#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();
}