Advertisement
pmanriquez93

Pregunta 13 - Listas, Pilas y Colas

Jul 2nd, 2014
554
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.81 KB | None | 0 0
  1. /* CABECERA */
  2.  
  3. #ifndef PREG13_H
  4. #define PREG13_H
  5.  
  6. typedef int TElemento;
  7.  
  8. typedef struct nodo{
  9.     TElemento elem;
  10.     struct nodo* ptrSig;
  11. }TNodo;
  12.  
  13. typedef struct{
  14.     TNodo *cima;
  15. }TPila;
  16.  
  17. void crearPila(TPila *);
  18.  
  19. void apilarDoble(TPila*,TPila*,TElemento);
  20.  
  21. void desapilarDoble(TPila*,TPila*);
  22.  
  23. void imprimirPila(TPila *);
  24.  
  25. #endif  /* PREG13_H */
  26.  
  27.  
  28.  
  29.  
  30. /* IMPLEMENTACION */
  31.  
  32. #include <stdlib.h>
  33. #include <stdio.h>
  34. #include "preg13.h"
  35.  
  36.  
  37. void crearPila(TPila *pila){
  38.     pila->cima = NULL;    
  39. }
  40.  
  41. void apilarDoble(TPila* pila,TPila* pilaMin,TElemento elem){
  42.     TNodo *ptrNuevo;
  43.     ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
  44.    
  45.     ptrNuevo->elem = elem;
  46.     ptrNuevo->ptrSig = NULL;
  47.    
  48.     if (pila->cima == NULL)
  49.         pila->cima = ptrNuevo;
  50.     else{
  51.         ptrNuevo->ptrSig = pila->cima;
  52.         pila->cima = ptrNuevo;  
  53.     }
  54.     if (pilaMin->cima == NULL){
  55.         TNodo *ptrMinimo;
  56.         ptrMinimo = (TNodo*)malloc(sizeof(TNodo));
  57.        
  58.         ptrMinimo->elem = elem;
  59.         ptrMinimo->ptrSig = NULL;
  60.        
  61.         pilaMin->cima = ptrMinimo;    
  62.     }
  63.    
  64.     else if (elem < pilaMin->cima->elem){
  65.         TNodo *ptrMinimo2;
  66.         ptrMinimo2 = (TNodo*)malloc(sizeof(TNodo));
  67.        
  68.         ptrMinimo2->elem = elem;
  69.         ptrMinimo2->ptrSig = NULL;
  70.        
  71.        
  72.         ptrMinimo2->ptrSig = pilaMin->cima;
  73.         pilaMin->cima = ptrMinimo2;
  74.         }
  75. }
  76.  
  77. void desapilarDoble(TPila *pila,TPila *pilaMin){  
  78.     TNodo *ptrEliminar;
  79.     TElemento elem;
  80.    
  81.     elem = pila->cima->elem;
  82.    
  83.     if (pila->cima == NULL)
  84.         printf("No se puede desapilar de una pila vacia");
  85.     else{
  86.         ptrEliminar = pila->cima;
  87.         pila->cima = pila->cima->ptrSig;
  88.         free(ptrEliminar);
  89.     }
  90.    
  91.     if (elem == pilaMin->cima->elem){
  92.         TNodo *ptrMinimo;
  93.         ptrMinimo = pilaMin->cima;
  94.         pilaMin->cima = pilaMin->cima->ptrSig;
  95.         free(ptrMinimo);
  96.     }
  97.    
  98. }
  99.  
  100. void imprimirPila(TPila *pila){
  101.     TNodo *ptrRec;  
  102.     ptrRec = pila->cima;
  103.    
  104.     while (ptrRec != NULL){
  105.         printf(" %d ",ptrRec->elem);
  106.         ptrRec = ptrRec->ptrSig;
  107.     }
  108.     printf("NULL\n");
  109. }
  110.  
  111.  
  112.  
  113.  
  114. /* MAIN */
  115.  
  116. #include <stdio.h>
  117. #include <stdlib.h>
  118. #include "preg13.h"
  119.  
  120. int main(int argc, char** argv) {
  121.    
  122.     TPila pila,pilaMin;
  123.    
  124.     crearPila(&pila);
  125.     crearPila(&pilaMin);
  126.    
  127.     apilarDoble(&pila,&pilaMin,5);
  128.     apilarDoble(&pila,&pilaMin,4);
  129.     apilarDoble(&pila,&pilaMin,12);
  130.     apilarDoble(&pila,&pilaMin,20);
  131.     apilarDoble(&pila,&pilaMin,54);
  132.     apilarDoble(&pila,&pilaMin,3);
  133.    
  134.     imprimirPila(&pila);
  135.     imprimirPila(&pilaMin);
  136.    
  137.     desapilarDoble(&pila,&pilaMin);
  138.    
  139.     imprimirPila(&pila);
  140.     imprimirPila(&pilaMin);
  141.    
  142.     return (EXIT_SUCCESS);
  143. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement