Advertisement
ferseg

pilaycola

Jan 18th, 2015
266
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.37 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef struct nodo {
  5.     float valor;
  6.     struct nodo *ptrSiguiente;
  7.     struct nodo *ant; // Este campo no lo tenias declarado
  8. } nodo; // Al hacer eso, ya no escribirás "struct nodo", solo "nodo"
  9.  
  10. nodo* ptr_pila (nodo *pila, float numero);
  11. float i_sacaPila (nodo **pila);
  12. void visualizar(nodo *);
  13. void destruir_pila(nodo **); // El nombre de una funcion dar una idea clara de lo que hace
  14. int estaVacia();
  15. nodo* ptr_cola(nodo *cola, float numero);
  16. float i_sacaCola (nodo **cola);
  17. void v_imprimir(nodo *cola);
  18. void destruir_cola(nodo **); // Hace casi lo mismo que "destruir_pila"
  19. void menu(nodo *,nodo *);
  20. int main() {
  21.  
  22.     nodo *ultimo = NULL;
  23.     nodo *cola = NULL;
  24.     menu(ultimo,cola);
  25. }
  26.  
  27. nodo *ptr_pila (nodo *pila, float numero){
  28.     system("cls");
  29.     nodo *nuevo = (nodo*)malloc(sizeof(nodo));
  30.     nuevo->valor = numero;
  31.     nuevo->ant = pila;
  32.     return nuevo;
  33. }
  34.  
  35. float i_sacaPila (nodo **pila){
  36.     int ultimo;
  37.     if (*pila == NULL) {
  38.         return -1;
  39.     } else {
  40.         ultimo = (*pila)->valor;
  41.         nodo* aux = *pila;
  42.         *pila = (*pila)->ant;
  43.         free(aux);
  44.     }
  45.     return ultimo;
  46. }
  47.  
  48. void visualizar(nodo *ultimo){
  49.     if (ultimo==NULL){
  50.         printf("No hay elementos para listar");
  51.         /* system("pause>null"); // Esto no es necesario aqui */
  52.     } else {
  53.         nodo *actual = ultimo;
  54.         while (actual!=NULL){
  55.             printf("[%f]\n", actual->valor);
  56.             actual=actual->ant;
  57.         }
  58.     }
  59.     /* system("pause>null"); // Esto no es necesario aqui */
  60. }
  61.  
  62. void destruir_pila(nodo **ultimo){
  63.     system("cls");
  64.     if (ultimo==NULL){
  65.         printf("No hay elementos en la lista");
  66.         /* system("pause>null"); // Esto no es necesario */
  67.     } else{
  68.         while (i_sacaPila(ultimo) != -1); /* Aprende a re-utilizar codigo */
  69.     }
  70. }
  71.  
  72. nodo *ptr_cola (nodo *cola, float numero){
  73.     nodo *nuevo = (nodo *)malloc(sizeof(nodo));
  74.     nuevo->valor = numero;
  75.     nuevo->ptrSiguiente = NULL;
  76.  
  77.     if (estaVacia(cola))    {
  78.       cola = nuevo;
  79.    } else {
  80.       nodo *aux = cola;
  81.       while (aux->ptrSiguiente != NULL) {
  82.          aux = aux->ptrSiguiente;
  83.       }
  84.       aux->ptrSiguiente = nuevo;
  85.    }
  86.    return cola;
  87. }
  88.  
  89.  
  90. void v_imprimir(nodo *cola) {
  91.     while (cola != NULL){
  92.         printf("[%f]->", cola->valor);
  93.         cola = cola->ptrSiguiente;
  94.     }
  95.     printf("NULL\n");
  96. }
  97.  
  98. float i_sacaCola(nodo **cola) {
  99.    nodo *aux;
  100.    float num;
  101.  
  102.    if (estaVacia(*cola)) {
  103.       return -1;
  104.    } else {
  105.       num = (*cola)->valor;
  106.       aux = (*cola);
  107.       *cola = (*cola)->ptrSiguiente;
  108.       free(aux);
  109.    }
  110.  
  111.    return num;
  112. }
  113.  
  114. void destruir_cola(nodo **cola) {
  115.     system("cls");
  116.     if (cola==NULL){
  117.         printf("No hay elementos en la lista");
  118.     } else{
  119.         while (i_sacaCola(cola) != -1); /* Aprende a re-utilizar codigo */
  120.     }
  121. }
  122.  
  123. int estaVacia(nodo *cola){
  124.     if(cola == NULL)
  125.         return 1;
  126.     else
  127.       return 0;
  128. }
  129.  
  130. void menu(nodo *cola,nodo *ultimo){
  131.  
  132.     int opc;
  133.     float numero;
  134.     do{
  135.         system("cls");
  136.         printf("1- Agregar numero a la pila\n");
  137.         printf("2- Sacar numero de la pila\n");
  138.         printf("3- Visualizar la pila\n");
  139.         printf("4- Sacar elemento de la pila e ingresarlo en la cola\n");
  140.         printf("5- Eliminar todos los elementos de la pila\n"); //Al hacer esta operacion, estas destruyendo la pila
  141.         printf("6- Agregar numero a la cola\n");
  142.         printf("7- Sacar numero de la cola\n");
  143.         printf("8- Visualizar la cola\n");
  144.         printf("9- Sacar elemento de la cola e ingresarlo en la pila\n");
  145.         printf("10- Eliminar todos los elementos de la cola\n"); //Al hacer esta operacion, estas destruyendo la cola
  146.         printf("11- Salir");
  147.         printf("\n\nIntroducir opcion: ");
  148.         scanf("%d", &opc);
  149.         system("cls"); /* De acuerdo a tu tarea, se tiene que limpiar la pantalla cada vez que se selecciona algo del menu*/
  150.         switch(opc){
  151.             case 1:
  152.                 printf("Ingresar numero a la pila: ");
  153.                 scanf("%f",&numero);
  154.                 ultimo=ptr_pila(ultimo, numero);
  155.                 printf("Ok");
  156.                 break;
  157.             case 2:
  158.                 if (i_sacaPila(&ultimo) == - 1) {
  159.                     printf("Pila vacia");
  160.                 } else {
  161.                     printf("Ok");
  162.                 }
  163.                 break;
  164.             case 3:
  165.                 visualizar(ultimo);
  166.                 break;
  167.             case 4: /* Sacar elemento de pila e introducirlo a la cola */
  168.                 numero = i_sacaPila(&ultimo);
  169.                 if (numero == -1) {
  170.                     printf("Pila vacia");
  171.                 } else {
  172.                     cola = ptr_cola(cola, numero);
  173.                     printf("Ok");
  174.                 }
  175.                 break;
  176.             case 5:
  177.                 destruir_pila(&ultimo);
  178.                 printf("Ok");
  179.                 break;
  180.             case 6:
  181.                 printf("Ingrese valor ");
  182.                 scanf("%f", &numero);
  183.                 cola = ptr_cola(cola, numero);
  184.                 printf("Ok");
  185.                 break;
  186.             case 7:
  187.                 if(!estaVacia(cola)) {
  188.                     i_sacaCola(&cola);
  189.                     printf("Ok");
  190.                 }
  191.                 else {
  192.                     printf("Cola vacia\n");
  193.                 }
  194.                 break;
  195.              case 8:
  196.                 if(!estaVacia(cola))
  197.                     v_imprimir(cola);
  198.                 else
  199.                     printf("Cola vacia\n");
  200.                 break;
  201.             case 9: /* Sacar elemento de cola e introducirlo a la pila */
  202.                 numero = i_sacaCola(&cola);
  203.                 if (numero == -1) {
  204.                     printf("Cola vacia");
  205.                 } else {
  206.                     ultimo = ptr_pila(ultimo, numero);
  207.                     printf("Ok");
  208.                 }
  209.                 break;
  210.             case 10:
  211.                 destruir_cola(&cola);
  212.                 printf("Ok");
  213.                 break;
  214.         }
  215.         system("pause>null");
  216.     } while (opc != 11); /* En el menu la opcion salir es la 11, aqui tenias 8. Todo debe coincidir */
  217.  
  218.     destruir_pila(&ultimo);
  219.     destruir_cola(&cola);
  220.  
  221.     return 0; /* Todos los programas c/c++ deben regresar 0 en caso de exito en la funcion main, es un estandar. */
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement