Esta vez tambien traigo unos programitas que concluí en estos dias, se tratan se unas aplicaciones que simulan las estructuras de datos: pilas y colas.
PILA
Esta aplicación permite mediante un menú ejecutar diferentes tareas a la pila, claro que para ello primero hay que rellenarla con algunos datos, podemos imprimir los elementos, sacar elementos, meter elementos. Además es posible realizar operaciones con los 2 elementos de hasta arriba de la pila.
Se realiza con arreglos y realmente no es nada complicado de entender:
#include#define FALSE -1 #define TRUE 1 void cabecera(void) { int i; printf("|"); for(i = 0; i < 50; i++) printf("-"); printf("|\n|"); printf("\t\tEJEMPLO DE PILA\t\t\t |\n"); printf("|"); for(i = 0; i < 50; i++) printf("-"); printf("|\n"); return; } int empty(int top) { if(top > -1) return FALSE; return TRUE; } int menu(void) { int op; printf("\n\t1. Push data\n"); printf("\t2. Pop data\n"); printf("\t3. Stacktop\n"); printf("\t4. Empty\n"); printf("\t5. Print\n"); printf("\t6. Operador\n"); printf("\t7. Exit\n\n"); printf(" Selecciona una opcion -> "); scanf("%d", &op); return (op); } int main(void) { int opcion = 0, temp, i, temp2[2]; int pila [15], tope = -1; char operador; cabecera(); while (opcion < 7) { switch(opcion = menu()) { case 1: { printf("\n\tIntroduce un dato -> "); scanf("%d", &temp); tope++; pila[tope] = temp; break; } case 2: { printf("\n"); if(empty(tope) == FALSE) { printf("\t\tElemento retirado -> [%d]\n\n", pila[tope]); tope = tope -1; } else printf("\t\tPILA VACIA\n\n"); break; } case 3: { printf("\n"); for(i = tope; i == tope; i++) printf("\tElemento en el tope -> [%d]\n\n", pila[i]); break; } case 4: { if(empty(tope) == TRUE) printf("\n\tLA PILA ESTA VACIA\n\n"); else printf("\n\tLA PILA NO ESTA VACIA\n\n"); break; } case 5: { printf("\n\tELEMENTOS EN PILA\n\n"); for(i = tope; i >= 0; i--) printf("\t\t[%d]\n",pila[i]); printf("\n"); break; } case 6: { while (getchar() != '\n') continue; printf("Que operacion quieres realizar?\n\n"); printf("\tSUMA -> +\n\tRESTA -> -\n\tMULTIPLICACION -> *\n\tDIVISION -> /\n"); scanf("%c", &operador); switch(operador) { case '*': { if(empty(tope) == FALSE) { temp2[0]=pila[tope]; tope = tope -1; if(empty(tope) == FALSE) { temp2[1]=pila[tope]; tope = tope; pila[tope] = temp2[0] * temp2[1]; break; } } } case '/': { if(empty(tope) == FALSE) { temp2[0]=pila[tope]; tope = tope -1; if(empty(tope) == FALSE) { temp2[1]=pila[tope]; tope = tope; pila[tope] = temp2[0] / temp2[1]; break; } } } case '+': { if(empty(tope) == FALSE) { temp2[0]=pila[tope]; tope = tope -1; if(empty(tope) == FALSE) { temp2[1]=pila[tope]; tope = tope; pila[tope] = temp2[0] + temp2[1]; break; } } } case '-': { if(empty(tope) == FALSE) { temp2[0]=pila[tope]; tope = tope -1; if(empty(tope) == FALSE) { temp2[1]=pila[tope]; tope = tope; pila[tope] = temp2[0] - temp2[1]; break; } } } } } } } return 0; }
DESCARGA: pila.c
Para compilar: gcc -o pila pila.c
Para ejecutar: ./pila
EJECUCIÓN
COLA DE DATOS
En escencia se trata casi del mismo código anterior pero no es igual, ya que ahora se emula lo que sería una cola de datos, de igual forma se incluye un menú con las operaciones que se pueden realizar en una cola de datos, en este ejemplo no podemos realizar operaciones aritmeticas.
#include#define FALSE -1 #define TRUE 1 void cabecera(void) { int i; printf("|"); for(i = 0; i < 50; i++) printf("-"); printf("|\n|"); printf("\t\tEJEMPLO DE COLA DE DATOS\t |\n"); printf("|"); for(i = 0; i < 50; i++) printf("-"); printf("|\n"); return; } int empty(int frente, int fondo) { if(frente > fondo) return FALSE; return TRUE; } int menu(void) { int op; printf("\n\t1. Insertar elemento\n"); printf("\t2. Retirar elemento\n"); printf("\t3. Elemento de incio\n"); printf("\t4. Verificar cola de datos\n"); printf("\t5. Imprimir cola de datos\n"); printf("\t6. Operador\n"); printf("\t7. Salir\n\n"); printf(" Selecciona una opcion -> "); scanf("%d", &op); return (op); } int main(void) { int opcion = 0, temp, i, temp2[2]; int cola [15], frente = 0, fondo = -1; char operador; cabecera(); while(opcion < 6) { switch(opcion = menu()) { case 1: { printf("\n\tDame el dato a ingresar -> "); scanf("%d", &temp); fondo++; cola[fondo] = temp; break; } case 2: { printf("\n"); if(empty(frente, fondo) == FALSE) { printf("\t\tElemento retirado -> [%d]\n\n", cola[frente]); frente = frente +1; } else printf("\t\tCOLA DE DATOS VACIA\n\n"); break; } case 3: { if(empty(frente, fondo) == FALSE) printf("Elemento al frente es %d\n", cola[frente]); else printf("LA COLA DE DATOS ESTA VACIA\n"); break; } case 4: { if(empty(frente, fondo)==TRUE) printf("\n\tLA COLA DE DATOS ESTA VACIA\n\n"); else printf("\n\tLA COLA DE DATOS NO ESTA VACIA\n\n"); break; } case 5: { printf("\n\tELEMENTOS EN COLA\n\n"); printf("INICIO"); for(i=frente;i<=fondo;i++) printf(" <- [%d]",cola[i]); printf(" <- FIN\n\n"); break; } } } return 0; }
DESCARGA: cola.c
Para compliar: gcc -o cola cola.c
Para ejecutar: ./cola
EJECUCIÓN
Espero y les sirvan para comprender estos dos conceptos con los que batallamos tanto el semestre pasado
SALUDOS!!! ^_^
Aquí también me corrige que son para la clase. Van a ser cinco en la clase, esos puntos son más preciosos :)
ResponderEliminarGracias por tu aporte, me sirvio de mucho, Felicidades por tu buen blog colega!! :-D
ResponderEliminar