#include <stdlib.h>
#include <stdio.h>
//Nodo Pila
typedef struct Nodo{
int numero;
struct Nodo *siguiente;
}miPila;
//Nodo Cola
typedef struct Nodo1{
char nombre;
struct Nodo1 *siguiente;
}miCola;
//Punteros de la Cola
miCola *frente = NULL;
miCola *final = NULL;
//*********************************** PILA ************************************
void pushPila(miPila **pila, int numero){ //Procedimiento para Apilar
//Creamos un nuevoNodo
miPila *nuevoNodo;
nuevoNodo = (miPila *) malloc(sizeof(miPila));
nuevoNodo -> numero = numero;
nuevoNodo -> siguiente = *pila;
*pila = nuevoNodo;
}
int popPila(miPila **pila, int numero){ //Procedimiento para Desapilar
miPila *aux = *pila; //Auxiliar que apunta al apuntador pila que en este caso va a ir para abajo
numero = aux->numero;
*pila = aux->siguiente;
//printf("Numero Eliminado %d:", aux->numero);
free(aux); //Eliminamos el nodo que esta arriba de la pila
return numero;
}
void mostrarPila(miPila **pila){ //Procedimiento para Mostar una Pila
miPila *aux = *pila;
printf("\n Su Pila es: ");
while(aux != NULL){ //Repetir esto hasta que se llegue a NULL, es decir, hasta que ya no exista mas elementos a recorrer.
printf(" %d ",aux->numero); //Imprimimos el valor de cada nodo de la Pila
aux = aux->siguiente; //Pasamos al siguiente nodo, recorremos la pila
}
printf(" \n ");
return;
}
//*********************************** COLA ************************************
void enqueueCola(char nombre){ //Procedimiento para Encolar, agregar elementos a una Cola
miCola *nuevoNodo; //Creamos un nuevoNodo
nuevoNodo = (miCola *) malloc(sizeof(miCola)); //Reserveamos memoria en el Heap para ese nuevoNodo
nuevoNodo -> nombre = nombre; //Asiganmos el valor al nuevoNodo
nuevoNodo -> siguiente = NULL;
if(frente == NULL){ //Si la cola esta vacia, frente aun no apunta a nada
frente = nuevoNodo; //Frente apunta a nuevoNodo
}else{
final -> siguiente = nuevoNodo; //Si la cola esta con elementos, apunta final, recorre final la cola
}
final = nuevoNodo; //Final apunta a nuevo Nodo
}
char dequeueCola(char nombre){ //Procedimiento para desencolar, eliminar los nodos de una cola
miCola *aux = frente;
nombre = frente -> nombre; //Permite en nombre almacenar el dato que esta en la cola
if( frente == final){
frente = NULL;
final = NULL;
}else{
frente = (frente) -> siguiente; //Si tenemos mas de un dato, el puntero frente apunta al segundo elemento de la cola, para que no se pierda la referencia.
}
free(aux); //El primero en ingresar se elimina, ene este caso lo que apunta cada vez frente
return nombre;
}
void mostrarCola(){ //Procedimiento para Mostar una Cola
miCola *aux = frente;
printf("\n Su Cola es: ");
while(aux != NULL){ //Repetir esto hasta que se llegue a NULL, es decir, hasta que ya no exista mas elementos a recorrer.
printf(" %c ",aux->nombre); //Imprimimos el valor del nodo
aux = aux->siguiente; //Pasamos al siguiente nodo, recorremos la cola
}
printf(" \n ");
return;
}
int main(int argc, const char * argv[]) {
miPila *pila = NULL; //Inicializamos Pila es igual a Null
int numero,i;
char nombre;
int n;
printf(" ¿Cuántos Numeros/Nombres Desea Ingresar?: ");
scanf("%d",&n); //Total de Numeros
//MENU
int opcion;
do{
printf( "\n 1. Push Pila");
printf( "\n 2. Pop Pila");
printf( "\n 3. Mostar Pila");
printf( "\n 4. Enqueue Cola ");
printf( "\n 5. Dequeue Cola ");
printf( "\n 6. Mostar Cola");
printf( "\n Introduzca una Opción (1-6): ");
scanf("%d", &opcion);
switch (opcion)
{
case 1:
for( i = 0; i < n ; i++){
// printf(" Ingrese el Numero %d: ", i + 1);
//scanf("%d",&numero); //Datos a Ingresar
numero = rand () % 30;
pushPila(&pila, numero); //Apilacion de Numeros Aleatorios
}
break;
case 2:
numero = popPila(&pila,numero);
printf("%d ",numero);
break;
case 3:
mostrarPila(&pila);
break;
case 4:
for( i = 0; i < n ; i++){
printf(" Ingrese el Nombre Cliente %d: ", i + 1);
scanf("%s",&nombre); //Datos a Ingresar
enqueueCola(nombre);
}
break;
case 5:
nombre = dequeueCola(nombre);
printf("%c ",nombre);
break;
case 6:
mostrarCola();
break;
}
}while( opcion != 7);
return 0;
}
0 Comentarios