Professional Documents
Culture Documents
ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 1
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
Nulo
12 30 21 54
UNMSM Facultad de Ingeniera Industrial
ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 2
Almacenamiento en Memoria
100
54 0 200
21 100
350
pL 500
500
12 700
700
30 200
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
Mag. Hilmar Hinojosa Lazo 3
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
Mag. Hilmar Hinojosa Lazo 4
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;
UNMSM Facultad de Ingeniera Industrial
ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 5
}
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"
UNMSM Facultad de Ingeniera Industrial
ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 6
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;
UNMSM Facultad de Ingeniera Industrial
ALGORITMOS Y PROGRAMACION
Mag. Hilmar Hinojosa Lazo 7
}