#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct colanodo {
int clave;
char descrip[20];
struct colanodo *sigptr;};//apuntador del tipo estructura colanodo
typedef struct colanodo COLANODO;
typedef COLANODO *COLANODOPTR;
void enqueue(COLANODOPTR *, COLANODOPTR *, int, char[]);//se pone el asterisco porque
void menu(void);
void imprime(COLANODOPTR);
void dequeue(COLANODOPTR *);
main()
{ COLANODOPTR adelaptr = NULL/*apuntador al inicio de la cola*/, atrasptr = NULL/*final de la cola*/;
int opcion, clav;
char descri[20];
menu();//llamada al funcion menu
printf("\n Elige opcion: ");
scanf("%d", &opcion);
while (opcion != 4)
{ switch(opcion)
{ case 1: printf("\n INSERCION EN LA COLA");
printf("\n\n Clave del articulo: ");
scanf("%d", &clav);
fflush(stdin);
printf("\n Descripcion del articulo: ");
gets(descri);
enqueue(&adelaptr, &atrasptr, clav, descri);
break;
case 2:
dequeue (&adelaptr);
break;
case 3:
imprime (adelaptr);
break;
//llamado de la función imprime: imprime(adelaptr);
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/*se declara un apuntador, al apuntador *adelaptr de la función main*/,
COLANODOPTR *atrasptr/*apuntador que apunta a *atrasptr de la función main*/, int cla, char desc[20])
{ COLANODOPTR nvoptr;
nvoptr = (COLANODOPTR) malloc(sizeof(COLANODO));//se le asigna un espacio en memoria del tamaño de colanodo
if (nvoptr != NULL) {
nvoptr->clave = cla;//el miembro clave que esta siendo apuntado por nuevoptr asignale el valor de cla
strcpy(nvoptr->descrip, desc);/*en la función para copiar string: en la cadena desc vamos a copiar lo que hay en descrip
que esta siendo apuntada por nvoptr*/
nvoptr->sigptr = NULL; /* a sigptr que se encuentra en cada elemento de la cola, que esta siendo apuntado por nvoptr
le asignamos un valor nulo*/
if (*adelaptr==NULL)//if para agregar el primer nodo de la cola
*adelaptr = nvoptr;
else//si ya hay un elemento(S) en la cola los nuevos se van formando atras/* entonces se entra al else*/
(*atrasptr)->sigptr = nvoptr;/*el valor de nvoptr se lo asignamos a sigptr que esta siendo apuntado
por la variable que esta siendo apuntada por atrasptr<el ultimo elemento que fue ingresado es apuntado por atrasptr
del main, entonces ordenamos que el apuntador en ese nodo apunte hacia la posición de arriba>*/
*atrasptr = nvoptr;/*al cumplirse cualquiera de las condiciones anteriores el valor de nuevoptr es asignado al atrasptr
del main para reconocerlo como el nuevo final de la cola*/
}
else//else del if principal que nos indica que no se encontro memoria disponible
printf("%c %s no fue insertado. No hay memoria disponible\n\n", cla, desc);
}
void imprime(COLANODOPTR auxptr)
{
if(auxptr==NULL)
printf("no hay cola\n");
else
{
while(auxptr!=NULL)
{
printf("\n %d %s", auxptr->clave, auxptr->descrip);
auxptr= auxptr->sigptr;
}
printf("\nfin de la cola");
}
getch();
}
void dequeue(COLANODOPTR *adelaptr)
{
COLANODOPTR auxptr;
auxptr=*adelaptr;
if(auxptr==NULL)
{
printf("\n no hay elementos en la cola");
}
else
{
(*adelaptr)=auxptr->sigptr;
printf("\n el producto de clave: %i-- y descripcion: %s fue eliminado",auxptr->clave, auxptr->descrip);
free(auxptr);
}
getch();
}
No hay comentarios:
Publicar un comentario