Advertisement
pmanriquez93

Ejemplo clase - Listas ligadas

Oct 23rd, 2014
460
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.09 KB | None | 0 0
  1. // MAIN
  2.  
  3. #include <cstdlib>
  4. #include <cstdio>
  5. #include <cstring>
  6.  
  7. #include "funcs.h"
  8.  
  9. using namespace std;
  10.  
  11. int main(void){
  12.     void *lista = NULL;
  13.     crearLista(lista);
  14.     mostrarLista(lista);
  15.     return 0;
  16. }
  17.  
  18.  
  19.  
  20.  
  21. // HEADER
  22.  
  23. #ifndef FUNCS_H
  24. #define FUNCS_H
  25.  
  26. void crearLista(void*&);
  27. void mostrarLista(void *);
  28.  
  29. void **leerNodo(void);
  30. void insertar(void *&, void **);
  31. void imprimeNodo(void **);
  32.  
  33. #endif  /* FUNCS_H */
  34.  
  35.  
  36.  
  37.  
  38.  
  39. // IMPLEMENTACION
  40.  
  41. #include <cstdlib>
  42. #include <cstdio>
  43. #include <cstring>
  44.  
  45. #include "funcs.h"
  46.  
  47. void crearLista(void *&lista){
  48.     void **nodo;
  49.     while (1){
  50.         nodo = leerNodo();
  51.         if (nodo == NULL) break;
  52.         insertar(lista,nodo);
  53.     }
  54. }
  55.  
  56. void **leerNodo(void){
  57.     int cod, *codigo;
  58.     char nomb[100], *nombre;
  59.     double *sueldo;
  60.    
  61.     void **nodo;
  62.    
  63.     if (scanf("%d",&cod) == EOF) return NULL;
  64.     while(getchar()!='\n');
  65.     gets(nomb);
  66.     sueldo = new double;
  67.     scanf("%lf",sueldo);
  68.     codigo = new int;
  69.     *codigo = cod;
  70.     nombre = new char[strlen(nomb)+1];
  71.     strcpy(nombre,nomb);
  72.    
  73.     nodo = new void*[4];
  74.     nodo[0] = codigo;
  75.     nodo[1] = nombre;
  76.     nodo[2] = sueldo;
  77.     nodo[3] = NULL;
  78.    
  79.     return nodo;
  80. }
  81.  
  82. void insertar(void *&lista,void **nodo){
  83.    
  84.     void **p = (void **)lista, **ant = NULL;
  85.    
  86.     while (p){          // while (p != NULL)
  87.         int *datoP, *datoNodo;
  88.         datoP = (int *)(p[0]);
  89.         datoNodo = (int *)(nodo[0]);
  90.        
  91.         if (*datoP > *datoNodo) break;
  92.         ant = p;
  93.         p = (void**)(p[3]);
  94.     }
  95.     nodo[3] = p;
  96.     if (ant != NULL)
  97.         ant[3] = nodo;
  98.     else
  99.         lista = nodo;
  100. }
  101.  
  102. void mostrarLista(void *l){
  103.     void **lista = (void **)l;
  104.     while (lista){
  105.         imprimeNodo(lista);
  106.         lista = (void **)(lista[3]);    // lista = lista->sig;
  107.     }
  108. }
  109.  
  110. void imprimeNodo(void **nodo){
  111.     int *codigo = (int*)(nodo[0]);
  112.     char *nombre = (char*)(nodo[1]);
  113.     double *sueldo = (double*)(nodo[2]);
  114.     printf("%10d %-30s %10.2lf \n",*codigo,nombre,*sueldo);
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement