Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include "listas.h"
- void leeLista(void *&lista,void *(*leeDato)(),
- int (*compararDato)(void *,void *)){
- while(1){
- void *dato=leeDato();
- if(dato==NULL) break;
- void **nodo=new void *[2];
- nodo[0]=dato;
- nodo[1]=NULL;
- insertaNodo(lista,nodo,compararDato);
- }
- }
- void insertaNodo(void *&lista,void* nodoVoid,
- int (*compararDato)(void *,void *)){
- void **ant=NULL,**actual=(void **)lista;
- void **nodo=(void **)nodoVoid;
- while(actual){
- if(compararDato(actual[0],nodo[0])>0) break;
- ant=actual;
- actual=(void **)actual[1];
- }
- nodo[1]=actual;
- if(ant==NULL) lista=nodoVoid;
- else ant[1]=nodoVoid;
- }
- void eliminarLista(void*&listaVoid,void (*eliminarDato)(void*)){
- void **lista=(void **)listaVoid;
- while(lista){
- eliminarDato(lista[0]);
- void **aux=(void **)lista[1];
- delete []lista;
- lista=aux;
- }
- }
- void imprimirLista(void *listaVoid,void (*imprimirDato)(void*)){
- void **lista=(void **)listaVoid;
- while(lista){
- imprimirDato(lista[0]);
- lista=(void **)lista[1];
- }
- }
- #include "datos.h"
- #include <cstdio>
- #include <cstdlib>
- void *leeDato(){
- int *num=new int;
- if(scanf("%d",num)==EOF) return NULL;
- return num;
- }
- int compararDato(void *a,void*b){
- int *x=(int *)a,*y=(int *)b;
- return(*x-*y);
- }
- void imprimirDato(void *dato){
- int *num=(int *)dato;
- printf("%d\n",*num);
- }
- void eliminarDato(void *dato){
- delete (int *)dato;
- }
- #ifndef DATOS_H
- #define DATOS_H
- void *leeDato();
- int compararDato(void *,void*);
- void imprimirDato(void *);
- void eliminarDato(void *);
- #endif /* DATOS_H */
- #ifndef LISTAS_H
- #define LISTAS_H
- void leeLista(void *&,void *(*)(),int (*)(void *,void *));
- void insertaNodo(void *&,void*,int (*)(void *,void *));
- void eliminarLista(void*&,void (*)(void*));
- void imprimirLista(void *,void (*)(void*));
- #endif /* LISTAS_H */
- #include <cstdlib>
- #include "datos.h"
- #include "listas.h"
- using namespace std;
- int main(int argc, char** argv) {
- void *lista=NULL;
- leeLista(lista,leeDato,compararDato);
- imprimirLista(lista,imprimirDato);
- eliminarLista(lista,eliminarDato);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement