Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // MAIN
- #include <cstdlib>
- #include <cstdio>
- #include <cstring>
- #include "funcs.h"
- using namespace std;
- int main(void){
- void *lista = NULL;
- crearLista(lista);
- mostrarLista(lista);
- return 0;
- }
- // HEADER
- #ifndef FUNCS_H
- #define FUNCS_H
- void crearLista(void*&);
- void mostrarLista(void *);
- void **leerNodo(void);
- void insertar(void *&, void **);
- void imprimeNodo(void **);
- #endif /* FUNCS_H */
- // IMPLEMENTACION
- #include <cstdlib>
- #include <cstdio>
- #include <cstring>
- #include "funcs.h"
- void crearLista(void *&lista){
- void **nodo;
- while (1){
- nodo = leerNodo();
- if (nodo == NULL) break;
- insertar(lista,nodo);
- }
- }
- void **leerNodo(void){
- int cod, *codigo;
- char nomb[100], *nombre;
- double *sueldo;
- void **nodo;
- if (scanf("%d",&cod) == EOF) return NULL;
- while(getchar()!='\n');
- gets(nomb);
- sueldo = new double;
- scanf("%lf",sueldo);
- codigo = new int;
- *codigo = cod;
- nombre = new char[strlen(nomb)+1];
- strcpy(nombre,nomb);
- nodo = new void*[4];
- nodo[0] = codigo;
- nodo[1] = nombre;
- nodo[2] = sueldo;
- nodo[3] = NULL;
- return nodo;
- }
- void insertar(void *&lista,void **nodo){
- void **p = (void **)lista, **ant = NULL;
- while (p){ // while (p != NULL)
- int *datoP, *datoNodo;
- datoP = (int *)(p[0]);
- datoNodo = (int *)(nodo[0]);
- if (*datoP > *datoNodo) break;
- ant = p;
- p = (void**)(p[3]);
- }
- nodo[3] = p;
- if (ant != NULL)
- ant[3] = nodo;
- else
- lista = nodo;
- }
- void mostrarLista(void *l){
- void **lista = (void **)l;
- while (lista){
- imprimeNodo(lista);
- lista = (void **)(lista[3]); // lista = lista->sig;
- }
- }
- void imprimeNodo(void **nodo){
- int *codigo = (int*)(nodo[0]);
- char *nombre = (char*)(nodo[1]);
- double *sueldo = (double*)(nodo[2]);
- printf("%10d %-30s %10.2lf \n",*codigo,nombre,*sueldo);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement