Advertisement
pmanriquez93

Pregunta 5 - Lista, Pilas y Colas (SUMA)

May 26th, 2014
538
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.79 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. typedef struct nodo{
  5.     int elem;
  6.     struct nodo* ptrSig;
  7. }TNodo;
  8.  
  9. typedef struct {
  10.     TNodo *inicio;
  11.     TNodo *fin;
  12. }TLista;
  13.  
  14. void crearLista(TLista *);
  15. void listaUnitaria(TLista *,int);
  16. void anadeIzq(TLista *,int);
  17. void anadeDer(TLista *, int);
  18. void imprimirLista(TLista *);
  19. TLista suma(TLista *, TLista *);
  20. void arreglarLista(TLista *);
  21. TLista voltearLista(TLista *);
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  int main(void){
  30.     TLista lista1;
  31.     TLista lista2;
  32.     TLista listaFinal, listaFinal2;
  33.     crearLista(&lista1);
  34.     crearLista(&lista2);
  35.    
  36.     int digito;
  37.     printf("Numero 1 : \n");
  38.     /*for (;;){
  39.         scanf("%d",&digito);
  40.         if (digito == -1) break;
  41.         anadeIzq(&lista1,digito);
  42.     }*/
  43.    
  44.     printf("Numero 2 : \n");
  45.     /*for(;;){
  46.         scanf("%d",&digito);
  47.         if (digito == -1) break;
  48.         anadeIzq(&lista2,digito);
  49.     }*/
  50.      
  51.      anadeIzq(&lista1,1);
  52.      anadeIzq(&lista1,9);
  53.      anadeIzq(&lista1,9);
  54.      //anadeIzq(&lista1,7);
  55.      //anadeIzq(&lista1,8);
  56.      
  57.      anadeIzq(&lista2,1);
  58.      anadeIzq(&lista2,0);
  59.      anadeIzq(&lista2,9);
  60.      //anadeIzq(&lista2,9);
  61.      //anadeIzq(&lista2,7);
  62.    
  63.     imprimirLista(&lista1);
  64.     imprimirLista(&lista2);
  65.  
  66.     listaFinal = suma(&lista1,&lista2);
  67.     imprimirLista(&listaFinal);
  68.    
  69.     arreglarLista(&listaFinal);
  70.     listaFinal2 = voltearLista(&listaFinal);
  71.    
  72.     imprimirLista(&listaFinal2);   
  73. }
  74.  
  75.  
  76.  
  77.  
  78. void crearLista(TLista *lista){
  79.     lista->inicio = NULL;
  80.     lista->fin = NULL;
  81. }
  82.  
  83.  
  84. void imprimirLista(TLista *lista){
  85.    
  86.     TNodo *ptrRec;  
  87.     ptrRec = lista->inicio;
  88.     while (ptrRec != NULL){
  89.         printf(" %d ",ptrRec->elem);
  90.         ptrRec = ptrRec->ptrSig;
  91.     }
  92.     printf("NULL\n");
  93. }
  94.  
  95. void listaUnitaria(TLista *lista, int elem){
  96.     TNodo *ptrNuevo;
  97.    
  98.     ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
  99.     ptrNuevo->elem = elem;
  100.     ptrNuevo->ptrSig = NULL;
  101.    
  102.     lista->inicio = ptrNuevo;
  103.     lista->fin = ptrNuevo;
  104. }
  105.  
  106.  
  107. void anadeIzq(TLista *lista, int elem){
  108.    
  109.     TNodo *ptrNuevo;
  110.    
  111.     ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
  112.     ptrNuevo->elem = elem;
  113.     ptrNuevo->ptrSig = NULL;
  114.    
  115.     if (lista->inicio == NULL){
  116.         listaUnitaria(lista,elem);
  117.     }else{
  118.         ptrNuevo->ptrSig = lista->inicio;
  119.         lista->inicio = ptrNuevo;
  120.     }
  121. }
  122.  
  123.  
  124. void anadeDer(TLista *lista, int elem){
  125.     TNodo *ptrNuevo;
  126.    
  127.     ptrNuevo = (TNodo*)malloc(sizeof(TNodo));
  128.     ptrNuevo->elem = elem;
  129.     ptrNuevo->ptrSig = NULL;
  130.    
  131.     if (lista->inicio == NULL){
  132.         listaUnitaria(lista,elem);
  133.     }else{
  134.         lista->fin->ptrSig = ptrNuevo;
  135.         lista->fin = ptrNuevo;
  136.     }
  137.  
  138. }
  139.  
  140.  
  141.  
  142.  
  143.  
  144. TLista suma(TLista *l1, TLista *l2){
  145.    
  146.     TLista listaSum;
  147.     crearLista(&listaSum);
  148.    
  149.     TNodo *ptrRec1, *ptrRec2;
  150.     ptrRec1 = l1->inicio;
  151.     ptrRec2 = l2->inicio;
  152.    
  153.     while (ptrRec1 != NULL && ptrRec2 != NULL){
  154.         int num1, num2;
  155.         num1 = ptrRec1->elem;
  156.         num2 = ptrRec2->elem;
  157.    
  158.         anadeDer(&listaSum,num1 +num2);
  159.        
  160.        
  161.         ptrRec1 = ptrRec1->ptrSig;
  162.         ptrRec2 = ptrRec2->ptrSig;
  163.     }  
  164.    
  165.     while (ptrRec1 != NULL){
  166.         anadeDer(l1,ptrRec1->elem);
  167.         ptrRec1 = ptrRec1->ptrSig;
  168.     }
  169.    
  170.     while (ptrRec2 != NULL){
  171.         anadeDer(l2,ptrRec2->elem);
  172.         ptrRec2 = ptrRec2->ptrSig;
  173.     }      
  174.     return listaSum;
  175. }
  176.  
  177. void arreglarLista(TLista *lista){
  178.     TNodo *ptrRec;
  179.     ptrRec = lista->inicio;
  180.     int acc = 0;
  181.     while (ptrRec != NULL){
  182.         if (ptrRec->elem > 9){
  183.             ptrRec->elem = (ptrRec->elem) - 10 + acc;
  184.             acc = 1;
  185.         }
  186.         else{
  187.             ptrRec->elem = ptrRec-> elem + acc;
  188.             if (ptrRec->elem>9){
  189.                 ptrRec->elem = 0;
  190.                 acc = 1;
  191.             }else{
  192.                 acc = 0;
  193.             }          
  194.         }
  195.         ptrRec = ptrRec->ptrSig;
  196.         }
  197. }
  198.  
  199.  
  200. TLista voltearLista(TLista *lista){
  201.     TNodo *ptrRec;
  202.     TLista lista2;
  203.     crearLista(&lista2);
  204.    
  205.     ptrRec = lista->inicio ;
  206.        
  207.     while (ptrRec != NULL){
  208.         anadeIzq(&lista2,ptrRec->elem);
  209.         ptrRec = ptrRec->ptrSig;
  210.     }
  211.     return lista2;
  212. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement