Advertisement
juanjo12x

Conjunto_Pilas_TAD

Jun 5th, 2014
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.26 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef int TElemento;
  4.  
  5. typedef struct nodo {
  6.         TElemento info;
  7.         struct nodo *sig;
  8. } TNodo;
  9.  
  10. typedef struct pila{
  11.         TNodo *top;
  12.         int tamano;
  13. } TPila;
  14.  
  15. typedef struct pilas{
  16.     TPila * Pilinicio;
  17.     struct pilas*pilassig;
  18. }TPilas;
  19.  
  20. typedef struct{
  21.     TPilas *Pilacima;
  22. }TConjuntoPilas;
  23.  
  24. void Pila_crear(TPila**);
  25. void Pila_push(TPila**, TElemento);
  26. void Pila_pop(TPila**);
  27. int Pila_estaVacia(TPila *);
  28. void Pila_finalizar(TPila *);
  29. void Pila_super_crear(TConjuntoPilas**);
  30. void Pila_super_push(TConjuntoPilas**,int,int);
  31. void Pila_super_pop(TConjuntoPilas**);
  32. void Pila_crear(TPila **P){
  33.     TPila*P1=*P;
  34.     P1->top = NULL;
  35.     P1->tamano=0;
  36.     *P=P1;
  37. }
  38. void Pila_push(TPila **P, TElemento nuevoElem){
  39.     TNodo *ptr_nuevoElem;
  40.     TPila*P1=*P;
  41.     ptr_nuevoElem = (TNodo*)malloc(sizeof(TNodo));
  42.    
  43.     if (ptr_nuevoElem){
  44.         ptr_nuevoElem->info = nuevoElem;
  45.         ptr_nuevoElem->sig = P1->top;
  46.         P1->top = ptr_nuevoElem;
  47.         (P1->tamano)++;
  48.         *P=P1;
  49.     }
  50. }
  51.  
  52. void Pila_pop(TPila **P){
  53.     TElemento top_info; TNodo *ptr_top;TPila*P1=*P;
  54.     if (!Pila_estaVacia(P1)){
  55.         ptr_top = P1->top;
  56.         top_info = ptr_top->info;
  57.         P1->top = P1->top->sig;
  58.         free(ptr_top);
  59.         (P1->tamano)--;
  60.         *P=P1;
  61.     }
  62. }
  63.  
  64. int Pila_estaVacia(TPila *P){
  65.     return (P->top == NULL);
  66. }
  67.  
  68. void Pila_finalizar(TPila *P){
  69.     while (!Pila_estaVacia(P))
  70.         Pila_pop(&P);
  71. }
  72. void Pila_super_crear(TConjuntoPilas**P){
  73.      TConjuntoPilas*P1=*P;
  74.     P1->Pilacima=NULL;
  75.     *P=P1;
  76. }
  77. void Pila_super_push(TConjuntoPilas**P,int e,int max){
  78.     TPila *P1;TPilas*Pilas;
  79.     P1=(TPila*)malloc(sizeof(TPila));
  80.     TConjuntoPilas *Pt1=*P;//pt1 es un conjunto de pilas auxiliar
  81.     TPilas*Pilasaux =Pt1->Pilacima;
  82.     if (Pt1->Pilacima==NULL){
  83.         Pila_crear(&P1);//creo pila
  84.         Pila_push(&P1,e);//Agrego elemento a la pila
  85.         Pilas=(TPilas*)malloc(sizeof(TPilas));//reservo
  86.         Pilas->Pilinicio=P1;//inicializo pila inical
  87.         Pilas->pilassig=NULL;//no hay mas pilas
  88.         Pt1->Pilacima=Pilas;//guardo puntero
  89.        
  90.     }else{
  91.         if(Pt1->Pilacima->Pilinicio->tamano+1<=max){
  92.             P1=Pilasaux->Pilinicio;//Busco en la pila actual
  93.             Pila_push(&P1,e);
  94.             Pilasaux->Pilinicio=P1;
  95.             Pt1->Pilacima=Pilasaux;          
  96.         }else{//si ya se sobrepaso la capacidad
  97.             Pila_crear(&P1);//creo nueva pila
  98.             Pila_push(&P1,e);//Agrego elemento a la pila
  99.             TPilas* aux=(TPilas*)malloc(sizeof(TPilas));//reservo
  100.             aux->Pilinicio=P1;
  101.             aux->pilassig=Pilasaux;
  102.             Pt1->Pilacima=aux;
  103.            
  104.         }
  105.     }
  106.     *P=Pt1;
  107. }
  108. void Pila_super_pop(TConjuntoPilas**P){
  109.     TConjuntoPilas *Pt1=*P;//pt1 es un conjunto de pilas auxiliar
  110.     if (Pt1->Pilacima==NULL){
  111.         printf("No hay nada que desapilar ,baka!\n");
  112.     }else{//si la pila de la cima no es vacia
  113.         TPilas*Pilasaux =Pt1->Pilacima;
  114.         TPila *P1=Pilasaux->Pilinicio;//saco la pila de inicio
  115.         Pila_pop(&P1);//desapilo
  116.         //verifico que el tamaΓ±o de la pila no sea 0
  117.         if(P1->tamano!=0){
  118.             Pilasaux->Pilinicio=P1;//apunto a la pila que se desapilo
  119.             Pt1->Pilacima=Pilasaux;//sigue siendo la misma pila
  120.         }else{//la pila termino estando vacia
  121.             Pila_finalizar(P1);//Eliminamos pila vacia
  122.             Pilasaux=Pilasaux->pilassig;//pasamos a la siguiente pila
  123.             Pt1->Pilacima=Pilasaux;//la siguiente pila es ahora la cima
  124.         }
  125.     }
  126. }
  127. int main(){
  128.     int max;
  129.     TConjuntoPilas *P;
  130.     P=(TConjuntoPilas*)malloc(sizeof(TConjuntoPilas));//reservo
  131.     Pila_super_crear(&P);
  132.     printf("Ingrese el maximo de elementos que quiere que tenga su pila\n");
  133.     scanf("%d",&max);
  134.     Pila_super_push(&P,1,max);
  135.     Pila_super_push(&P,2,max);
  136.     Pila_super_push(&P,3,max);
  137.     Pila_super_push(&P,4,max);
  138.     Pila_super_push(&P,5,max);
  139.     Pila_super_push(&P,6,max);
  140.     Pila_super_push(&P,7,max);
  141.     Pila_super_push(&P,8,max);
  142.     Pila_super_push(&P,9,max);
  143.     Pila_super_push(&P,10,max);
  144.     Pila_super_pop(&P);
  145.     Pila_super_pop(&P);
  146.     Pila_super_pop(&P);
  147.     return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement