Listas enlazadas c++

Download Report

Transcript Listas enlazadas c++

Listas enlazadas c++
Prof. Franklin Cedeño
Contenido





Fundamentos teóricos
Operaciones en listas enlazadas
Resumen
Ejercicios
Problemas
Prof. Franklin Cedeño
INTRODUCCIÓN
A diferencia de las estructuras de datos estáticas (arrays vectrores, matrices y
estructuras) en la que el tamaño en memoria se establece durante la
compilación del programa y permanece inalterable durante su ejecucion, las
estructuras de datos dinamias crecen y se contraen a medida que se ejecuta el
programa.
La estructura de datos Listas Enlazadas, que es una colección de
elementos( denominados nodos) dispuestos unos a continuación de otros,
cada uno de ellos conectados al siguiente elemento por un enlace o puntero.
Las listas enlazadas son estructuras de datos muy flexibles y con numerosas
aplicaciones en el mundo de la programación
Prof. Franklin Cedeño
FUNDAMENTOS TEÓRICOS
Cuando estudiábamos estructuras lineales de elementos homogéneos (Listas,
tablas, vectores) y se utilizaban arrays para su implementación . Esta técnica
obligaba a fijar por adelantado el espacio de memoria, de modo que cuando se
desea añadir un nuevo elemento que rebase el tamaño establecido, no seria
posible sin que ocurra un error en tiempo de ejecución. Ello se debe a que los
arrays hacen un uso ineficiente de la memoria.
Una lista enlazada es una colección o secuencia de elementos dispuestos
uno detrás de otro, en la que cada elemento se conecta al siguiente por un
<<enlace>> o <<puntero>>. La idea básica es construir una lista cuyos
elementos llamados nodos se se componen de dos partes o campos: la primera
parte o campo contiene la información y es por consiguiente , un valor de tipo
genérico (denominado dato, TipoElemento, etc) y la segunda parte o campo en
un puntero que apunta al siguiente elemento de la lista.
Nodo
Prof. Franklin Cedeño
puntero
Nodo
puntero
Nodo
FUNDAMENTOS TEÓRICOS
La representación gráfica más extendida es aquella que utiliza una caja con
dos secciones en su interior. En la primera sección se escribe el elemento o
valor del dato y en la segunda sección el enlace o puntero mediante una flecha
que sale de la caja y apunta al nodo siguiente
e1
e2
e3
en
Una lista enlazada consta de un numero indeterminado de elementos y cada
elemento tiene dos componentes (campos), un puntero al siguiente elemento
de la lista y un valor, que pude ser de cualquier tipo .
Prof. Franklin Cedeño
FUNDAMENTOS TEÓRICOS
Clasificación de las listas enlazadas
1. Listas simplementes enlazadas: cada nodo (elemento) contiene un unico en lace
que conecta ese al nodo siguiente o sucesor. La lista en eficiente para recorridos
directos.(<<adelante>>).
2. Lista doblemente enlazadas: cada nodo contiene dos enlaces, uno a su nodo
predecesor y el otro a su sucesor. La lista es eficiente tanto en recorrido directo
(<<adelante>>) como en recorrido inverso (<<atrás>>).
3. Lista circular simplemente enlazada: en la que el ultimo elemento (cola) se enlaza
con el primer elemento (cabeza) de tal modo que la lista pude ser recorrida de
modo circular.
4. Lista circular doblemente enlazada: el ultimo elemento se enlaza con el primero y
viceversa. Esta lista puede ser recorrida de modo circular tanto en dirección
directa (<<adelante>>) como inversa (<<atrás>>).
Prof. Franklin Cedeño
CONCEPTOS IMPORTANTES
Una lista enlazada consta de un conjunto de nodos. Un nodo consta de un
campo dato y un puntero que apunta al <<siguiente>> elemento de lista.
dato
siguiente
cabeza
dato
siguiente
dato
siguiente
Ptr_actual
dato
cola
El primer nodo, frente , es el nodo apuntado por cabeza. La lista encadena
nodos juntos desde el frente al final (cola) de la lista. El final se identifica como el
nodo cuyo campo puntero tiene valor NULL=0. La lista se recorre desde el primer
hasta el ultimo nodo; en cualquier punto del recorrido la posición actual se referencia
por el puntero Ptr_actual. En el caso que la lista no contiene nodo, el puntero cabeza
en nulo.
Prof. Franklin Cedeño
OPERACIONES EN LISTAS ENLAZADAS






Inicialización o creación, con declaración de los nodos
Insertar elementos en la lista
Eliminar elementos en la lista
Buscar elementos en la lista
Recorrer la lista
Comprobar si la lista esta vacía
Prof. Franklin Cedeño
DECLARACION DE UN NODO
Una lista enlazada se compone de una serie de nodos enlazadas
mediante punteros. Cada nodo es una combinación de dos partes: un
tipo de dato (entero, real, double, carácter, etc) y un enlace (puntero) al
siguiente nodo. En C++ se puede definir un nodo mediante un nuevo
tipo de dato con las palabras reservadas struct o class que contienen las
dos partes citadas.
struct nodo{
int dato;
nodo *enlace;
};
Prof. Franklin Cedeño
class nodo {
public :
int dato;
nodo *enlace;
//constructor
};
#include <iostream>
using namespace std;
// creo la estructura nodo
struct nodo{
int nro;
nodo *sgte;
};
struct nodo *pi,*pa,*pf; // declaramos tres punteros de tipo nodo
Ejemplo:
void insertar(int numero){ // funcion insertar
if(pi==NULL){
pi=new(nodo);
pi->nro=numero;
pf=pi;
}
else {
pa=new (nodo);
pf->sgte=pa;
pa->nro=numero;
pf=pa;
}
pf->sgte=NULL;
}
void mostrar(){
pa=pi;
while(pa!=NULL)
{
cout<<endl<<"---> Numero: "<<pa->nro;
pa=pa->sgte; //c=c+1;
}
}
Prof. Franklin Cedeño
int main(int argc, char **argv)
{
int numero;
string resp;
resp="s";
while(resp=="s" or resp=="S"){
cout<<"-----> Ingrese un numero: ";
cin>>numero;
insertar(numero);
Ejemplo:
cout<<"Desea continuar s/n: ";
cin>>resp;
}
mostrar();
return 0;
}
Prof. Franklin Cedeño
Bibliografía:
Programación en C++ . Algoritmos, estructura de datos y objetos. 2.da edición 2006.
Luis Joyanes Aguilar.
Consultar:
http://novella.mhhe.com/sites/8448156455/information_center_view0/
Prof. Franklin Cedeño