Advertisement
Miketo_prog

Cola

May 23rd, 2021
844
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.31 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. /* estructura autorreferenciada */
  5. struct nodoCola {
  6. char *dato; /* define dato como un char */
  7. struct nodoCola *ptrSiguiente; /* apuntador nodoCola */
  8. }; /* fin de la estructura nodoCola */
  9.  
  10. typedef struct nodoCola NodoCola;
  11. typedef NodoCola *ptrNodoCola;
  12.  
  13. /* prototipos de las funciones */
  14. //void imprimeCola( ptrNodoCola ptrActual );
  15. int estaVacia( ptrNodoCola ptrCabeza );
  16. char *retirar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon );
  17. void agregar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon, char *valor );
  18. //void instrucciones( void );
  19.  
  20. /* la función main comienza la ejecución del programa */
  21. int main(){
  22.     ptrNodoCola frente = NULL;
  23.     ptrNodoCola fin = NULL;
  24.     char nombre[11];
  25.     char linea[17];
  26.     int cont=0;
  27.  
  28.  
  29.     while(cont<16){
  30.         fgets(linea, 17, stdin);
  31.         printf("Lei: %s", linea);
  32.  
  33.         if( linea[0]=='L' ){
  34.             //Extraer el nombre
  35.             int k=0;
  36.             for(int i=6; linea[i]!='\0'; i++)
  37.                 nombre[k++] = linea[i];
  38.             nombre[k] = '\0';
  39.  
  40.             //agregar a la cola
  41.             agregar(&frente, &fin, nombre);
  42.  
  43.             printf("%s", nombre);
  44.         }
  45.         else{
  46.  
  47.  
  48.             //Entonces mandamos
  49.             if( !estaVacia(frente) ){
  50.                 char *dato = retirar(&frente, &fin);
  51.  
  52.                 if( frente!=NULL ){
  53.                     printf("%s", dato);
  54.                 }
  55.                 else
  56.                     printf("IMPOSIBLE\n");
  57.             }
  58.         }
  59.  
  60.         cont++;
  61.     }
  62.  
  63. //    agregar(&frente, &fin, "UNO");
  64. //    agregar(&frente, &fin, "DOS");
  65. //    agregar(&frente, &fin, "TRES");
  66. //
  67. //    printf("Valor: %s\n",retirar(&frente, &fin) );
  68. //    printf("Valor: %s\n",retirar(&frente, &fin) );
  69. //    printf("Valor: %s\n",retirar(&frente, &fin) );
  70.  
  71. }
  72.  
  73.  
  74.  
  75.  /* inserta un nodo al final de la cola */
  76. void agregar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon, char *valor ){
  77.     ptrNodoCola ptrNuevo; /* apuntador a un nuevo nodo */
  78.  
  79.     ptrNuevo = (NodoCola*)malloc( sizeof( NodoCola ) );
  80.  
  81.     if ( ptrNuevo != NULL ) { /* es espacio disponible */
  82.         ptrNuevo->dato = valor;
  83.         ptrNuevo->ptrSiguiente = NULL;
  84.  
  85.         /* si está vacía inserta un nodo en la cabeza */
  86.         if ( estaVacia( *ptrCabeza ) ) {
  87.             *ptrCabeza = ptrNuevo;
  88.         } /* fin de if */
  89.         else {
  90.             ( *ptrTalon )->ptrSiguiente = ptrNuevo;
  91.         } /* fin de else */
  92.  
  93.         *ptrTalon = ptrNuevo;
  94.     } /* fin de if */
  95.     else {
  96.         printf( "no se inserto %c. No hay memoria disponible.\n", valor );
  97.     } /* fin de else */
  98.  
  99. } /* fin de la función agregar */
  100.  
  101.  
  102.  
  103. /* elimina el nodo de la cabeza de la cola */
  104. char *retirar( ptrNodoCola *ptrCabeza, ptrNodoCola *ptrTalon ){
  105.     char *valor; /* valor del nodo */
  106.     ptrNodoCola tempPtr; /* apuntador a un nodo temporal */
  107.  
  108.     valor = ( *ptrCabeza )->dato;
  109.     tempPtr = *ptrCabeza;
  110.     *ptrCabeza = ( *ptrCabeza )->ptrSiguiente;
  111.  
  112.     /* si la cola está vacía */
  113.     if ( *ptrCabeza == NULL ) {
  114.         *ptrTalon = NULL;
  115.     } /* fin de if */
  116.  
  117.     free( tempPtr );
  118.  
  119.     return valor;
  120. } /* fin de la función retirar */
  121.  
  122.  
  123.  
  124. int estaVacia( ptrNodoCola ptrCabeza ){
  125.     return ptrCabeza == NULL;
  126. } /* fin de la función estaVacia */
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement