Está en la página 1de 7

UNMSM Facultad de Ingeniera Industrial ALGORITMOS Y PROGRAMACION LISTAS ENLAZADAS

Una lista enlazada es una estructura de datos dinmica formada por un conjunto de elementos llamados nodos.

Cada nodo consta de dos partes:

- Una que contiene el dato. - Otra que contiene la direccin del siguiente nodo. Nodo

dato

direccin del nodo siguiente

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 .

Si la lista esta vaca dicho puntero tendr el valor NULL.

El ltimo elemento de la lista se reconoce porque su puntero al siguiente tiene valor NULL.

Representacin Grfica de una Lista Enlazada

pL 12 30 21 54 Nulo

Mag. Hilmar Hinojosa Lazo

UNMSM Facultad de Ingeniera Industrial ALGORITMOS Y PROGRAMACION Almacenamiento en Memoria

100 54 0 200 21 350 pL 500 100

500 12 700 700 30 200

Archivo listas.h

#ifndef LISTAS_H #define LISTAS_H struct nodo { int dato; nodo *sig; }; typedef nodo *pnodo;

Mag. Hilmar Hinojosa Lazo

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; }

Mag. Hilmar Hinojosa Lazo

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;

Mag. Hilmar Hinojosa Lazo

UNMSM Facultad de Ingeniera Industrial ALGORITMOS Y PROGRAMACION }

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

Archivo listas.cpp #include <iostream> #include <stdlib.h> #include "listas.h"

Mag. Hilmar Hinojosa Lazo

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;

Mag. Hilmar Hinojosa Lazo

UNMSM Facultad de Ingeniera Industrial ALGORITMOS Y PROGRAMACION }

Mag. Hilmar Hinojosa Lazo

También podría gustarte