#include <stdlib.h>
#include <stdio.h>
struct Nodo {
char dato;
Nodo *siguiente;
};
void menu();
void agregarCola(Nodo *&frente, Nodo *&fin, char dato);
void quitarCola(Nodo *&frente, Nodo *&fin, char &dato);
bool cola_vacia(Nodo *frente);
int main() {
menu();
// system("pause");
return 0;
}
void menu(){
int opc;
char dato;
Nodo *frente = NULL; // cola total
Nodo *fin = NULL; // ultimo nodo de la cola
// Asignamos memoria de la estructura Nodo a la variable frente y fin.
frente = (struct Nodo*) malloc(sizeof(struct Nodo));
// '\0', NULL indica el inicio o frente esta vacio, cuando sea '\0', NODO entonces ya no estará vacia
frente -> dato = '\0'; // caracter vacio
frente -> siguiente = NULL; // no deben tener nodos siguientes
fin = (struct Nodo*) malloc(sizeof(struct Nodo));
fin -> dato = '\0'; // caracter vacio
fin -> siguiente = NULL; // no deben tener nodos siguientes
do{
printf("\t.:MENU:.\n");
printf("\n1. Insertar un caracter a una cola");
printf("\n2. Mostrar todos los elementos de la cola");
printf("\n3. Salir");
printf("\nOPCION: ");
scanf("%d", &opc);
switch(opc) {
case 1: printf("\nIngrese el caracter a leer en la cola\n");
scanf(" %c", &dato); // acá colocamos " %c" el espacio en blanco es para evitar el salto de linea que debjo tu scanf opcion.
agregarCola(frente, fin, dato);
break;
case 2: printf("\nMostrando los elementos de la cola\n");
while(frente != NULL){
quitarCola(frente, fin, dato);
if(frente != NULL){
printf("%c ,", dato);
}
else{
printf("%c .", dato);
}
}
printf("\n");
// system("pause");
break;
case 3: break;
}
// system("cls");
}while(opc != 3);
}
void agregarCola(Nodo *&frente, Nodo *&fin, char n) {
Nodo *nuevo_nodo = NULL; //= new Nodo();
// Asignamos memoria.
nuevo_nodo = (struct Nodo*) malloc(sizeof(struct Nodo));
nuevo_nodo -> dato = n; // colocamos el valor n en el atributo dato del puntero nuevo_nodo
nuevo_nodo -> siguiente = NULL; // colocamos el vaor NULL en el atributo siguiente del puntero nuevo_nodo
if(cola_vacia(frente)) {
frente -> siguiente = nuevo_nodo;
} else {
fin -> siguiente = nuevo_nodo;
}
fin = nuevo_nodo;
printf("Elemento %c anadido a la cola\n", n);
}
bool cola_vacia(Nodo *frente) {
if(frente -> siguiente == NULL && frente -> dato == '\0') {
// la cola esta vacia
return true;
} else {
return false;
}
}
void quitarCola(Nodo*&frente,Nodo*&fin,char &n) {
n = frente -> dato; // Asignamos a n lo que queremos eliminar
Nodo *aux = frente;
if(frente == fin) {
frente = NULL;
fin = NULL;
} else {
frente = frente->siguiente;
}
delete aux;
}