[ ] Departament d’Informàtica Departamento de Informática Informática PRÀCTICA 13 Curs 2002-2003 FACULTAT DE MATEMATIQUES UNIVERSITAT DE VALENCIA Práctica Nº 13: Introducción a las estructuras dinámicas: listas enlazadas Objetivos de la práctica: - Definir y manipular listas enlazadas. - Uso de funciones para trabajar con listas: inserción de un elemento en una lista, borrado de un elemento en una lista, búsqueda de un elemento en una lista. Recordar el concepto de puntero visto en la práctica 9 y la reserva dinámica de memoria (new, delete). Definición de nodo En general podremos construir agrupaciones dinámicas incluyendo un puntero como campo de un registro, de manera que a través de este puntero puedo acceder a otros elementos de la agrupación. A estos registros, que contienen un puntero se les suele llamar NODOS, y son la base de las agrupaciones dinámicas, ya que gracias a estos punteros podemos enlazar todos los elementos de información que queramos (limitados tan solo por la capacidad física de la memoria del ordenador) y además gracias a la instrucción ‘new’ podemos reservar memoria para nuevos elementos a medida que nos vaya haciendo falta. Una definición de nodo en C/C++: struct datos { int x; // Esta estructura tendrá tantos campos como campos de información // queramos almacenar en los nodos de la lista. }; struct nodo; typedef nodo *pnodo; struct nodo { datos info; pnodo sig; }; La manera de acceder a los campos de un registro a partir de un puntero es mediante el operador ‘contenido’ (el *) y el operador de acceso ‘.’ nodo *p_aux; //pnodo p_aux ; //Es una definición equivalente. (*p_aux).info.x / (*p_aux).sig Esta combinación es equivalente al operador de acceso en punteros ‘->’ (un menos seguido de un mayor) de manera que quedaría: p_aux->info.x / p_aux->sig Práctica Nº 13: Introducción a las estructuras dinámicas: listas enlazadas 1/2 [ ] Departament d’Informàtica Departamento de Informática Informática PRÀCTICA 13 Curs 2002-2003 FACULTAT DE MATEMATIQUES UNIVERSITAT DE VALENCIA Listas enlazadas Una lista enlazada es una lista de elementos “nodos” que se construye usando punteros. Además, no tiene un tamaño fijo, sino que puede crecer y decrecer durante la ejecución del programa. Existe un elemento o nodo que llamamos “primero” o “cabeza”, que es el primero de la lista, y a partir del cual se puede acceder al resto de los elementos uno a uno. Las listas enlazadas están definidas por: 1. Una estructura de tipo nodo. 2. Un puntero que nos marca el primer elemento, a partir del cual puede accederse a cualquier otro elemento de la agrupación. La idea a la que se quiere llegar sería la siguiente: La lista de números 1, 3, 5, 7 quedaría en forma enlazada como sigue: A ‘NADA’ en C/C++ se le llama ‘NULL’. Una definición de un tipo lista en C++ a partir de las definiciones de nodo y puntero a nodo realizadas previamente podría ser: typedef pnodo lista; En el programa principal al definir una lista la debemos iniciar a lista vacía (NULL): int main (void) { lista l=NULL; ... Práctica Nº 13: Introducción a las estructuras dinámicas: listas enlazadas 2/2