martes, 26 de noviembre de 2013

Programa 5 (colas)  Daniel Prado Garcia







#include <stdio.h>
#include <conio.h>
#include <stdlib.h>


struct colanodo 
      {
           int clave;
           char descrip[20];
           struct colanodo *sigptr;
       };


typedef struct colanodo COLANODO;
typedef COLANODO *COLANODOPTR;



void enqueue(COLANODOPTR *, COLANODOPTR *, int, char[]);
void menu(void);
void imprimir(COLANODOPTR);
int descolar(COLANODOPTR *);



main()
      COLANODOPTR adelaptr = NULL, atrasptr = NULL;
      int opcion, clav;
      char descri[20];
      menu();
      printf("\n                Elige opcion: ");
      scanf("%d", &opcion);
    
      while (opcion != 4)
      { 
          system("cls");
          switch(opcion) 
          { 
              case 1: 
                  printf("\n   INSERCION EN LA COLA\n\n");   
                  printf("\n\n   Clave del articulo:  ");
                  scanf("%d", &clav);
                  fflush(stdin);
                  printf("\n  Descripcion del articulo:  ");
                  gets(descri);
                  enqueue(&adelaptr, &atrasptr, clav, descri); //direcciones de memoria
                  imprimir(adelaptr); 
              break;
              case 2:
                    descolar(&adelaptr);
                    imprimir(adelaptr); 
              break;
              case 3:
                    imprimir(adelaptr); 
              break;
              default : 
                  printf("\n    Opcion no permitida.\n\n");
                  printf("   Enter para continuar...");
                  getch();
                  menu();
              break;
          }
          menu();
          printf("\n   Elige opcion: ");
          scanf("%d", &opcion);
      }
      printf("\n    Fin del programa.\n\n");
      printf("\n     Enter para salir...");
      getch();
}


void menu(void)
       system("cls");
       printf("\n\n\n\n"
          "OPERACIONES DISPONIBLES CON LA COLA: \n\n\n\n"
          " 1 (enqueue) AGREGAR UN DATO A LA COLA\n"
          " 2 (dequeue) ELIMINAR UN DATO DE LA COLA\n"
          " 3 IMPRIMIR LA COLA\n"
          " 4 SALIR DEL PROGRAMA\n");
}



void enqueue(COLANODOPTR *adelaptr, COLANODOPTR *atrasptr, int cla, char desc[20])
       COLANODOPTR nvoptr;
       nvoptr = (COLANODOPTR) malloc(sizeof(COLANODO)); //apuntador nuevoptr apunta al area de memoria reservada
       if (nvoptr != NULL) 
       {
           nvoptr->clave = cla; //al elemento "clave" que esta siendo apuntado por "nvoptr" asignale "cla".
           strcpy(nvoptr->descrip, desc); //copiar lo qe esta en "desc" (todo el string) al elemento "descrip" que esta siendo apuntado por "nvoptr"
           nvoptr->sigptr = NULL; //asignar NULL al miembro "sigptr" que esta siendo apuntado por "nvoptr"
           if (*adelaptr==NULL) //si la variable (en main) que esta siendo apuntada por "adelaptr" (temporal) es NULL
               *adelaptr = nvoptr; //asigna el valor que tiene "nvoptr" a "adelaptr" (tienen el mismo valor)
           else
              (*atrasptr)->sigptr = nvoptr; //al elemento "sigptr" que esta siendo apuntado por la variable que esta siendo apuntada por "atrasptr" asignale "nvoptr"
              *atrasptr = nvoptr; //asigna el valor de "nvoptr" a "adelaptr" (tienen el mismo valor)
       }
       else
              printf("%c %s no fue insertado. No hay memoria disponible\n\n", cla, desc);   
}

int descolar(COLANODOPTR *inicioptr)
{
    COLANODOPTR auxptr;
    auxptr=*inicioptr; //la variable que esta siendo apuntada por "inicioptr" asignaselo a "auxptr"
    *inicioptr=auxptr->sigptr;
    free(auxptr); 
}


void imprimir(COLANODOPTR auxptr)
{
    system("cls");
    if(auxptr==NULL) //la cola esta vacia
        printf("\n\n    La cola esta vacia");
    else
    {
        printf("\n\n    El contenido de la cola es: ");
        printf("\n\n\n  ---- Principio de la cola ----\n");
        while(auxptr!=NULL)
        {
            printf("\n\n   %d - %s",auxptr->clave, auxptr->descrip); //clave que esta siendo apuntada por auxptr
            auxptr=auxptr->sigptr;
        }
        printf("\n\n\n  ---- Fin de la cola ----\n");
    }
    getch();
}

No hay comentarios:

Publicar un comentario