Enunciado - Departament d`Informàtica

Anuncio
[
]
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
Descargar