// ******************************************************** // // Programa que crea una lista simplemente ligada ordenada // // ******************************************************** /* * Archivo: main.cpp * Autor : J. Miguel Guanira E. * * Creado el 25 de noviembre de 2011, 09:09 AM */ #include #include "Nodo.h" #include "ListaSL.h" int main(void) { Nodo *lista = NULL; crear(lista); mostrar(lista); eliminar(lista); return (EXIT_SUCCESS); } /* * Archivo: Nodo.h * Autor : J. Miguel Guanira E. * * Created on 25 de noviembre de 2011, 09:11 AM */ #ifndef NODO_H #define NODO_H //Nodo de una lista simplemente ligada (LSL) struct Nodo { int codigo; char *nombre; Nodo *siguiente; }; #endif /* NODO_H */ /* * Archivo: ListaSL.h * Autor : J. Miguel Guanira E. * * Created on 25 de noviembre de 2011, 09:17 AM */ #ifndef LISTASL_H #define LISTASL_H #include "Nodo.h" void crear(Nodo *&); void mostrar(Nodo *); void eliminar(Nodo *); Nodo * leeRegistro(void); void insertar(Nodo *&, Nodo *); #endif /* LISTASL_H */ /* * Archivo: ListaSL.cpp * Autor : J. Miguel Guanira E. * * Created on 25 de noviembre de 2011, 09:17 AM */ #include #include #include "Nodo.h" #include "ListaSL.h" void crear(Nodo *&lista){ Nodo *nuevo; while (1){ nuevo = leeRegistro(); if (nuevo==NULL) break; insertar(lista, nuevo); } } void mostrar(Nodo *lista){ while(lista) { printf("%10d %-30s\n", lista->codigo, lista->nombre); lista = lista->siguiente; } } void eliminar(Nodo *lista){ Nodo *sale; while(lista) { sale = lista; lista = lista->siguiente; delete sale; } } Nodo * leeRegistro(void){ int cod; char nomb[60]; Nodo *dato; if (scanf("%d", &cod)==EOF) return NULL; while(getchar()!='\n'); dato = new Nodo; dato->codigo = cod; gets(nomb); dato->nombre = new char[strlen(nomb)+1]; strcpy(dato->nombre, nomb); return dato; } void insertar(Nodo *&lista, Nodo *nuevo){ Nodo *p = lista, *ant = NULL; while (p){ if (p->codigo > nuevo->codigo) break; ant = p; p = p->siguiente; } nuevo->siguiente = p; if (ant == NULL) lista = nuevo; else ant->siguiente = nuevo; }