Sunteți pe pagina 1din 3

Captulo 1 Listas abiertas

1.1 Definicin
^

La forma ms simple de estructura dinmica es la lista abierta. En esta forma los nodos se organizan de modo que cada uno apunta al siguiente, y el ltimo no apunta a nada, es decir, el puntero del nodo siguiente vale NULL. En las listas abiertas existe un nodo especial: el primero. Normalmente diremos que nuestra lista es un puntero a ese primer nodo y llamaremos a ese nodo la cabeza de la lista. Eso es porque mediante ese nico puntero podemos acceder a toda la lista. Cuando el puntero que usamos para acceder a la lista vale NULL, diremos que la lista est vaca. El nodo tpico para construir listas tiene esta forma:
struct nodo \{ int dato; struct nodo *siguiente; };

En el ejemplo, cada elemento de la lista slo contiene un dato de tipo entero, pero en la prctica no hay lmite en cuanto a la complejidad de los datos a almacenar.

1.2 Declaraciones de tipos para manejar listas en C


^

Normalmente se definen varios tipos que facilitan el manejo de las listas, en C, la declaracin de tipos puede tener una forma parecida a esta:
typedef struct _nodo \{ int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista;

tipoNodo es el tipo para declarar nodos, evidentemente. pNodo es el tipo para declarar punteros a un nodo. Lista es el tipo para declarar listas, como puede verse, un puntero a un nodo y una lista son la misma cosa. En realidad, cualquier puntero a un nodo es una lista, cuyo primer elemento es el nodo apuntado.
Lista enlazada

Es muy importante que nuestro programa nunca pierda el valor del puntero al primer elemento, ya que si no existe ninguna copia de ese valor, y se pierde, ser imposible acceder al nodo y no podremos liberar el espacio de memoria que ocupa.

Captulo 4 Listas circulares


^

4.1 Definicin
^

Una lista circular es una lista lineal en la que el ltimo nodo a punta al primero. Las listas circulares evitan excepciones en la operaciones que se realicen sobre ellas. No existen casos especiales, cada nodo siempre tiene uno anterior y uno siguiente. En algunas listas circulares se aade un nodo especial de cabecera, de ese modo se evita la nica excepcin posible, la de que la lista est vaca. El nodo tpico es el mismo que para construir listas abiertas:

struct nodo \{ int dato; struct nodo *siguiente; };

4.2 Declaraciones de tipos para manejar listas circulares en C


^

Los tipos que definiremos normalmente para manejar listas cerradas son los mismos que para para manejar listas abiertas:
typedef struct _nodo \{ int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista;

tipoNodo es el tipo para declarar nodos, evidentemente. pNodo es el tipo para declarar punteros a un nodo. Lista es el tipo para declarar listas, tanto abiertas como circulares. En el caso de las circulares, apuntar a un nodo cualquiera de la lista.

Lista circular

A pesar de que las listas circulares simplifiquen las operaciones sobre ellas, tambin introducen algunas complicaciones. Por ejemplo, en un proceso de bsqueda, no es tan sencillo dar por terminada la bsqueda cuando el elemento buscado no existe. Por ese motivo se suele resaltar un nodo en particular, que no tiene por qu ser siempre el mismo. Cualquier nodo puede cumplir ese propsito, y puede variar durante la ejecucin del programa. Otra alternativa que se usa a menudo, y que simplifica en cierto modo el uso de listas circulares es crear un nodo especial de har la funcin de nodo cabecera. De este modo, la lista nunca estar vaca, y se eliminan casi todos los casos especiales.

Listas doblemente enlazadas


^

5.1 Definicin
^

Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces, uno al nodo siguiente, y otro al anterior. Las listas doblemente enlazadas no necesitan un nodo especial para acceder a ellas, pueden recorrerse en ambos sentidos a partir de cualquier nodo, esto es porque a partir de cualquier nodo, siempre es posible alcanzar cualquier nodo de la lista, hasta que se llega a uno de los extremos. El nodo tpico es el mismo que para construir las listas que hemos visto, salvo que tienen otro puntero al nodo anterior:
struct nodo \{

int dato; struct nodo *siguiente; struct nodo *anterior; };

5.2 Declaraciones de tipos para manejar listas doblemente enlazadas en C


^

Para C, y basndonos en la declaracin de nodo que hemos visto ms arriba, trabajaremos con los siguientes tipos:
typedef struct _nodo \{ int dato; struct _nodo *siguiente; struct _nodo *anterior; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista;

tipoNodo es el tipo para declarar nodos, evidentemente. pNodo es el tipo para declarar punteros a un nodo. Lista es el tipo para declarar listas abiertas doblemente enlazadas. Tambin es posible, y potencialmente til, crear listas doblemente enlazadas y circulares.

Lista doblemente enlazada

El movimiento a travs de listas doblemente enlazadas es ms sencillo, y como veremos las operaciones de bsqueda, insercin y borrado, tambin tienen ms ventajas.

S-ar putea să vă placă și