300 likes | 892 Views
Listas enlazadas c++. Prof. Franklin Cedeño. Contenido. Fundamentos teóricos Operaciones en listas enlazadas Resumen Ejercicios Problemas. Prof. Franklin Cedeño. INTRODUCCIÓN.
E N D
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 puntero Nodo puntero Nodo Prof. Franklin Cedeño
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 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>>). 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>>). 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. 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 dato siguiente dato siguiente dato Ptr_actual cola cabeza 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 listaenlazada 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. class nodo { public : int dato; nodo *enlace; //constructor }; struct nodo{ int dato; nodo *enlace; }; Prof. Franklin Cedeño
#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 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; } } Ejemplo: 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); cout<<"Desea continuar s/n: "; cin>>resp; } mostrar(); return 0; } Ejemplo: Prof. Franklin Cedeño
Bibliografía: Programación en C++ . Algoritmos, estructura de datos y objetos. 2.da edición 2006. Luis Joyanes Aguilar. http://novella.mhhe.com/sites/8448156455/information_center_view0/ Consultar: Prof. Franklin Cedeño