You are on page 1of 7

UNMSM Facultad de Ingeniera Industrial

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
}

You might also like