Advertisement
20112080

LISTAS ENLAZADAS PF

Oct 23rd, 2014
193
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include "listas.h"
  4. void leeLista(void *&lista,void *(*leeDato)(),
  5.         int (*compararDato)(void *,void *)){
  6.     while(1){
  7.         void *dato=leeDato();
  8.         if(dato==NULL) break;
  9.         void **nodo=new void *[2];
  10.         nodo[0]=dato;
  11.         nodo[1]=NULL;
  12.         insertaNodo(lista,nodo,compararDato);      
  13.     }
  14. }
  15. void insertaNodo(void *&lista,void* nodoVoid,
  16.         int (*compararDato)(void *,void *)){
  17.     void **ant=NULL,**actual=(void **)lista;
  18.     void **nodo=(void **)nodoVoid;
  19.     while(actual){
  20.         if(compararDato(actual[0],nodo[0])>0) break;
  21.         ant=actual;
  22.         actual=(void **)actual[1];
  23.     }
  24.     nodo[1]=actual;
  25.     if(ant==NULL) lista=nodoVoid;
  26.     else ant[1]=nodoVoid;
  27. }
  28.  
  29. void eliminarLista(void*&listaVoid,void (*eliminarDato)(void*)){
  30.     void **lista=(void **)listaVoid;
  31.     while(lista){
  32.         eliminarDato(lista[0]);
  33.         void **aux=(void **)lista[1];
  34.         delete []lista;
  35.         lista=aux;
  36.     }
  37. }
  38. void imprimirLista(void *listaVoid,void (*imprimirDato)(void*)){
  39.     void **lista=(void **)listaVoid;
  40.     while(lista){
  41.         imprimirDato(lista[0]);
  42.         lista=(void **)lista[1];
  43.     }
  44. }
  45.  
  46. #include "datos.h"
  47. #include <cstdio>
  48. #include <cstdlib>
  49.  
  50.  
  51. void *leeDato(){
  52.     int *num=new int;
  53.     if(scanf("%d",num)==EOF) return NULL;
  54.     return num;
  55. }
  56. int compararDato(void *a,void*b){
  57.     int *x=(int *)a,*y=(int *)b;
  58.     return(*x-*y);
  59. }
  60. void imprimirDato(void *dato){
  61.     int *num=(int *)dato;
  62.     printf("%d\n",*num);
  63. }
  64. void eliminarDato(void *dato){
  65.     delete (int *)dato;
  66. }
  67.  
  68.  
  69. #ifndef DATOS_H
  70. #define DATOS_H
  71.  
  72. void *leeDato();
  73. int compararDato(void *,void*);
  74. void imprimirDato(void *);
  75. void eliminarDato(void *);
  76. #endif  /* DATOS_H */
  77.  
  78.  
  79. #ifndef LISTAS_H
  80. #define LISTAS_H
  81.  
  82. void leeLista(void *&,void *(*)(),int (*)(void *,void *));
  83. void insertaNodo(void *&,void*,int (*)(void *,void *));
  84. void eliminarLista(void*&,void (*)(void*));
  85. void imprimirLista(void *,void (*)(void*));
  86. #endif  /* LISTAS_H */
  87.  
  88. #include <cstdlib>
  89. #include "datos.h"
  90. #include "listas.h"
  91.  
  92. using namespace std;
  93.  
  94. int main(int argc, char** argv) {
  95.     void *lista=NULL;
  96.     leeLista(lista,leeDato,compararDato);
  97.     imprimirLista(lista,imprimirDato);
  98.     eliminarLista(lista,eliminarDato);
  99.     return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement