Operacion y mantenimiento de una cola

¿Has encontrado un error? ¿Tienes la solución? Deja tu correción ;-)

Antes de comentar: Gran parte de los ejercicios propuestos no tienen librerías debido a que Wordpress las eliminó al verlas como etiquetas HTML. Si sabes/tienes/conoces las librerías que hacen falta, déjalo en los comentarios. Y lo mas importante: Todos los ejemplos fueron realizados por estudiante con únicamente conocimiento básico del lenguaje, no de programación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <stdio.h>
#include <stdlib.h>
 
/* estructura autoreferenciada */
struct nodoCola {      char dato;                 /* define dato como un char */
   struct nodoCola *ptrSiguiente; /* apuntador nodoCola */
}; /* fin de la estructura nodoCola */
 
typedef struct nodoCola NodoCola;typedef NodoCola *ptrNodoCola;
 
/* prototipos de las funciones */
void imprimeCola( ptrNodoCola ptrActual );
int estaVacia( ptrNodoCola ptrCabeza );char retirar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon );
void agregar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon, 
              char valor );
void instrucciones( void );
 /* la función main comienza la ejecución del programa */
int main()
{ 
   ptrNodoCola ptrCabeza = NULL; /* incializa ptrCabeza */
   ptrNodoCola ptrTalon = NULL;  /* incializa ptrTalon */   int eleccion;                 /* elección de menú del usuario */
   char elemento;                /* entrada char del usuario */
 
   instrucciones(); /* despliega el menú */
   printf( "? " );   scanf( "%d", &eleccion );
 
   /* mientras el usuario no introduzca 3 */
   while ( eleccion != 3 ) { 
       switch( eleccion ) { 
 
         /* agrega el valor */
         case 1:
            printf( "Introduzca un caracter: " );            scanf( "n%c", &elemento );
            agregar( &ptrCabeza, &ptrTalon, elemento );
            imprimeCola( ptrCabeza );
            break;
          /* retira el valor */
         case 2:
 
            /* si la cola no está vacía */
            if ( !estaVacia( ptrCabeza ) ) {                elemento = retirar( &ptrCabeza, &ptrTalon );
               printf( "se desenfilo %c.n", elemento );
            } /* fin de if */
 
            imprimeCola( ptrCabeza );            break;
 
         default:
            printf( "Eleccion no valida.nn" );
            instrucciones();            break;
 
      } /* fin de switch */
 
      printf( "? " );      scanf( "%d", &eleccion );
   } /* fin de while */
 
   printf( "Fin de programa.n" );
      return 0; /* indica terminación exitosa */
 
} /* fin de main */
 
/* despliega las instrcciones del programa para el usuario */void instrucciones( void )
{ 
   printf ( "Introuzca su elección:n"
           "   1 para retirar un elemento a la colan"
           "   2 para eliminar un elemento de la colan"           "   3 para terminarn" );
} /* fin de la función instrucciones */
 
/* inserta un nodo al final de la cola */
void agregar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon,               char valor )
{ 
   ptrNodoCola ptrNuevo; /* apuntador a un nuevo nodo */
 
   ptrNuevo = malloc( sizeof( NodoCola ) ); 
   if ( ptrNuevo != NULL ) { /* es espacio disponible */ 
      ptrNuevo->dato = valor;
      ptrNuevo->ptrSiguiente = NULL;
       /* si esta vacía inserta un nodo en la cabeza */
      if ( estaVacia( *ptrCabeza ) ) {
         *ptrCabeza = ptrNuevo;
      } /* fin de if */
      else {         ( *ptrTalon )->ptrSiguiente = ptrNuevo;
      } /* fin de else */
 
      *ptrTalon = ptrNuevo;
   } /* fin de if */   else {
      printf( "no se inserto %c. No hay memoria disponible.n", valor );
   } /* fin de else */
 
} /* fin de la función agregar */ 
/* elimina el nodo de la cabeza de la cola */
char retirar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon )
{ 
   char valor;           /* valor del nodo */   ptrNodoCola tempPtr; /* apuntador a un nodo temporal */
 
   valor = ( *ptrCabeza )->dato;
   tempPtr = *ptrCabeza;
   *ptrCabeza = ( *ptrCabeza )->ptrSiguiente; 
   /* si la cola está vacía */
   if ( *ptrCabeza == NULL ) {
      *ptrTalon = NULL;
   } /* fin de if */ 
   free( tempPtr );
 
   return valor;
 } /* fin de la función retirar */
 
/* Devuelve 1 si la cola está vacía, de lo contrario devuelve 0 */
int estaVacia( ptrNodoCola ptrCabeza )
{    return ptrCabeza == NULL;
 
} /* fin de la función estaVacia */
 
/* Imprime la cola */void imprimeCola( ptrNodoCola ptrActual )
{ 
 
   /* si la cola esta vacía */
   if ( ptrActual == NULL ) {      printf( "La cola esta vacia.nn" );
   } /* fin de if */
   else { 
      printf( "La cola es:n" );
       /* mientras no sea el final de la cola */
      while ( ptrActual != NULL ) { 
         printf( "%c --> ", ptrActual->dato );
         ptrActual = ptrActual->ptrSiguiente;
      } /* fin de while */ 
      printf( "NULLnn" );
   } /* fin de else */
 
} /* fin de la función imprimeCola */

Punto importante: Si vas a sugerir un segmento de código en algún lenguaje debes hacerlo así:

  • Si es lenguaje C <code lang="c">Código en C</code>
  • Si es lenguaje Pascal <code lang="pascal">Aquí dentro el código de Pascal</code>.

De esta manera el código coloreas el código.

Deja un comentario

Suscribirse a los comentarios.