//Carlos Sinuhe Gonzalez Ortega //Materia: Estructura de Datos Grupo : 2802 ******/ //Profesor: Rubio Alejandro //realiza las operaciones de una cola en forma dinamica,INSERTANDO Y //ELIMINANDO elementos #include #include #include struct nodo{ char dato; struct nodo *siguiente; }; typedef struct nodo NODO; typedef NODO *NODOSIG; /*funciones de inserci¢n en la cola*/ void insertar(NODOSIG *, char); /*funciones de eliminacion en la cola*/ char borrar(NODOSIG *); /*funci¢n de impresion de la cola*/ void printcola(NODOSIG); /*funci¢n del menu de opciones*/ void instrucciones(void); /*funcion de cola vacia*/ int isempty(NODOSIG cola); main() { NODOSIG cola = NULL; int op; char ele; do{ clrscr(); instrucciones(); printcola(cola);/*se imprime la cola con el valor insertado*/ gotoxy(48,11);scanf("%d", &op); switch (op) { case 1: /*inserci¢n*/ gotoxy(10,17); printf("Introduzca el elemento: "); scanf("\n %c", &ele);/*lectura del elemento a almacenar*/ insertar(&cola, ele);/*se envia el inicio de la cola y el valor a insertar*/ break; case 2: /*borrar*/ if (!isempty(cola))/*antes de eliminar el dato se pregunta si hay elementos en la cola*/ if (borrar(&cola)=='a')/* se envia la cola y se regresa el valor a para indicar que si se elimino un elemento de la cola*/ printcola(cola);/*Se imprime la cola actualizada*/ else{ /*regresa un valor diferente de a que indica que era el ultimo valor*/ /* printf("cola esta vacia\n\n"); free(cola);/*se libera completamente el espacio que ocupaba la cola*/ cola=NULL;/*se inicia nuevamente la cola*/ } break; } }while (op !=3);/*mientras no se presione la opcion de salir*/ return 0; } /*menu de opciones, para trabajar con la cola*/ void instrucciones(void) { gotoxy(28,2); printf("OPERACIONES CON COLAS\n\n"); gotoxy(35,5);printf("MENU"); gotoxy(30,7); printf( " 1.- Insertar"); gotoxy(30,8); printf( " 2.- Eliminar"); gotoxy(30,9); printf( " 3.- Salir"); gotoxy(30,11); printf( "Elija una opcion:"); } void insertar(NODOSIG *cola, char valor) { NODOSIG nuevo;/*variables temporales para la insercion en la cola del nuevo nodo*/ nuevo = new (NODO); /*malloc(sizeof(NODO));*//*el malloc lo puedes usar en lugar del new en c ansi*/ /*Esta operacion crea el nuevo nodo que sera insertado en la cola*/ if (nuevo != NULL) {/*Se pregunta si se pudo crear el nuevo espacio de memoria para el nodo*/ nuevo->dato = valor;/*se asigna el dato que se quiere insertar*/ nuevo->siguiente = NULL;/*se asigna nulo a la posicisi¢n siguiente del nodo creado*/ nuevo -> siguiente = *cola;/*el nuevo nodo en en su posicion siguiente toma el inicio de la cola y la cola completa*/ *cola = nuevo;/*ahora el nuevo inicio de la cola lo tendra nuevo, por lo cual se le asigna la posici¢n de memoria a cola, que es en donde iniciara la cola ahora*/ } } /*funcion para imprimir la cola completa, recibe como parametro por valor el inicio y la cola completa*/ void printcola(NODOSIG actual) { if (actual == NULL)/*Si no hay elementos en la cola*/ { gotoxy(10,13); printf("Cola vacia ");} else {/*si hay elementos en la cola*/ gotoxy(10,13); printf("La cola es: \n\t\t"); while (actual != NULL) {/*se imprimira la cola hasta llegar al final*/ printf("%c --> ",actual -> dato);/*se imprime el contenido del nodo*/ actual = actual -> siguiente;/*se avanza la posicion de actual al siguiente nodo*/ } printf("NULL "); } } /*Funci¢n para borrar un elemento al final de la cola recibe como parametro por referencia la cola*/ char borrar(NODOSIG *cola) { NODOSIG previo, actual, temporal;/*variables auxiliares*/ previo = NULL;/*se inicializa el en nulo el previo que es el que contendra la cola*/ actual = *cola;/*se asigna a actual el inicio y la cola completa*/ if (actual->siguiente != NULL) {/*pregunta si no es el ultimo nodo en la cola*/ while (actual->siguiente != NULL ){/*se recorrera la cola sin llegar al ultimo elemento de la cola*/ previo = actual;/*se asigna la posicion de actual a previo*/ actual = actual -> siguiente;/*se avanza al siguiente nodo*/ }/*se llego hasta un nodo antes del final y se asigna a temporal la cola*/ temporal=actual;/*para que este sea borrado y asi liberar el espacio ocupado por el elemento*/ previo->siguiente = NULL;/*se le asigna a previo en su posicion siguiente nulo, es decir, el fin de la cola*/ free(temporal);/*se libera el espacio del nodo a borrar*/ return 'a';/*se regresa un valor para indicar que no era el ultimo nodo*/ } return '\0';/*se regresa este valor para indicar que es el ultimo nodo*/ } /*funcion para determinar si hay elementos en la cola, recibe como parametro por valor la el inicio de la cola*/ int isempty(NODOSIG cola) { return cola == NULL;/*pregunta si hay elemento en la cola, regresa nulo si no hay*/ } /*de lo contrario regresa un valor diferente*/