Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Listas Enlazadas
Listas Enlazadas
Una lista enlazada es una estructura de datos dinmica formada por un conjunto de elementos llamados nodos.
- Una que contiene el dato. - Otra que contiene la direccin del siguiente nodo. Nodo
dato
Los nodos son variables dinmicas que se crean y destruyen de acuerdo a los requerimientos del proceso.
Para acceder a la lista es necesario un puntero que contenga la direccin del primer nodo .
El ltimo elemento de la lista se reconoce porque su puntero al siguiente tiene valor NULL.
pL 12 30 21 54 Nulo
Archivo listas.h
#ifndef LISTAS_H #define LISTAS_H struct nodo { int dato; nodo *sig; }; typedef nodo *pnodo;
UNMSM Facultad de Ingeniera Industrial ALGORITMOS Y PROGRAMACION class lista { private: pnodo pL; public: lista(); ~lista(); void insertar_comienzo(int x); void insertar_final(int x); void eliminar(int x); pnodo buscar(int x); pnodo buscar_anterior(int x); void imprimir(); }; lista::lista() { pL = NULL; } lista::~lista() { pnodo p,q; if ( pL != NULL ) { p = pL; while ( p != NULL ) { q = (*p).sig; delete p; p = q; } } } void lista::insertar_comienzo(int x) { pnodo p; p = new nodo; (*p).dato = x; (*p).sig = pL; pL = p; }
UNMSM Facultad de Ingeniera Industrial ALGORITMOS Y PROGRAMACION void lista::insertar_final(int x) { pnodo p,q; p = new nodo; (*p).dato = x; (*p).sig = NULL; if ( pL == NULL ) pL = p; else { q = pL; while ( (*q).sig != NULL ) q = (*q).sig; (*q).sig = p; } } pnodo lista::buscar(int x) { pnodo p; if ( pL == NULL ) return NULL; else { p = pL; while ( p != NULL ) if( (*p).dato == x ) break; else p = (*p).sig; return p; } } pnodo lista::buscar_anterior(int x) { pnodo a,p; a = NULL; p = pL; while ( (*p).dato != x ) { a = p; p = (*p).sig; } return a;
void lista::eliminar( int x ) { pnodo a,p; p = buscar( x ); if ( p == NULL ) cout<<"El elemento no esta en la lista"<<endl; else { a = buscar_anterior(x); if ( a == NULL ) pL = (*p).sig; else (*a).sig = (*p).sig; delete p; } } void lista::imprimir() { pnodo p; if ( pL == NULL ) cout<<"Lista vacia"<<endl; else { p = pL; while (p != NULL) { cout<<(*p).dato<<" -> "; p = (*p).sig; } cout<<"NULO"<<endl; } } #endif
UNMSM Facultad de Ingeniera Industrial ALGORITMOS Y PROGRAMACION using namespace std; int main() { lista L; pnodo b; int i,valor; cout<<"Insertando datos al comienzo"<<endl; for(i=1;i<=5;i++) { cout<<"Ingrese valor : "; cin>>valor; L.insertar_comienzo(valor); L.imprimir(); } cout<<"Insertando datos al final"<<endl; for(i=1;i<=5;i++) { cout<<"Ingrese valor : "; cin>>valor; L.insertar_final(valor); L.imprimir(); } for(i=1;i<=5;i++) { cout<<"Ingrese valor a buscar : "; cin>>valor; b = L.buscar(valor); if ( b == NULL ) cout<<"El elemento no esta en la lista"<<endl; else { cout<<"El elemento si esta en la lista"<<endl; b = L.buscar_anterior(valor); if ( b == NULL ) cout<<"No hay anterior"<<endl; else cout<<"El anterior es "<<(*b).dato<<endl; } } cout<<"Ingrese valor a eliminar : "; cin>>valor; L.eliminar(valor); L.imprimir(); cout<<endl; system("PAUSE"); return 0;