Advertisement
pmanriquez93

Pregunta 8 - Listas, Pilas y Colas

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