Вы находитесь на странице: 1из 7

UNMSM – Facultad de Ingeniería Industrial ALGORITMOS Y PROGRAMACION

LISTAS ENLAZADAS

Una lista enlazada es una estructura de datos dinámica formada por un conjunto de

elementos llamados nodos.

Cada nodo consta de dos partes:

- Una que contiene el dato.

- Otra que contiene la dirección del siguiente nodo.

Nodo

- Otra que contiene la dirección del siguiente nodo. Nodo dato dirección del nodo siguiente Los
- Otra que contiene la dirección del siguiente nodo. Nodo dato dirección del nodo siguiente Los

dato

dirección del

nodo siguiente

Los nodos son variables dinámicas que se crean y destruyen de acuerdo a los

requerimientos del proceso.

Para acceder a la lista es necesario un puntero que contenga la dirección del primer nodo .

Si la lista esta vacía dicho puntero tendrá el valor NULL.

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

Representación Gráfica de una Lista Enlazada pL 12 30 21 54 Nulo
Representación Gráfica de una Lista Enlazada
pL
12
30
21
54
Nulo

UNMSM – Facultad de Ingeniería Industrial ALGORITMOS Y PROGRAMACION

Almacenamiento en Memoria

100 54 0 200 21 100 350 pL 500 500 12 700 700 30 200
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 Ingeniería 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 Ingeniería 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;

 

UNMSM – Facultad de Ingeniería 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"

UNMSM – Facultad de Ingeniería 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;

UNMSM – Facultad de Ingeniería Industrial ALGORITMOS Y PROGRAMACION

}