Page 306

4.8 Listas con enlace doble · 274 Dise˜ na una funci´ on que elimine el primer nodo con un valor dado en una lista con punteros a cabeza y cola. · 275 Dise˜ na una funci´ on que elimine todos los nodos con un valor dado en una lista con punteros a cabeza y cola. · 276 Dise˜ na una funci´ on que devuelva el elemento que ocupa la posici´on n en una lista con puntero a cabeza y cola. (La cabeza ocupa la posici´on 0.) La funci´on devolver´a como valor de retorno 1 o 0 para, respectivamente, indicar si la operaci´on se pudo completar con ´exito o si fracas´ o. La operaci´ on no se puede completar con ´exito si n es negativo o si n es mayor o igual que la talla de la lista. El valor del nodo se devolver´a en un par´ametro pasado por referencia. · 277 Dise˜ na una funci´ on que devuelva un ((corte)) de la lista. Se recibir´an dos ´ındices i y j y se devolver´ a una nueva lista con punteros a cabeza y cola con una copia de los nodos que van del que ocupa la posici´ on i al que ocupa la posici´on j − 1, ambos inclu´ıdos. La lista devuelta tendr´a punteros a cabeza y cola. · 278 Dise˜ na una funci´ on de inserci´on ordenada en una lista ordenada con punteros a cabeza y cola. · 279 Dise˜ na una funci´ on que devuelva el menor valor de una lista ordenada con punteros a cabeza y cola. · 280 Dise˜ na una funci´ on que devuelva el mayor valor de una lista ordenada con punteros a cabeza y cola. · 281 Dise˜ na una funci´ on que a˜ nada a una lista con punteros a cabeza y cola una copia de otra lista con punteros a cabeza y cola. .............................................................................................

4.8.

Listas con enlace doble

Vamos a dotar a cada nodo de dos punteros: uno al siguiente nodo en la lista y otro al anterior. Los nodos ser´ an variables de este tipo: lista doble.h 1 2 3 4 5

struct DNodo { int info; // Valor del nodo. struct DNodo * ant; // Puntero al anterior. struct DNodo * sig; // Puntero al siguiente. };

Una lista es un puntero a un struct DNodo (o a NULL). Nuevamente, definiremos un tipo para poner ´enfasis en que un puntero representa a la lista que ((cuelga)) de ´el. 1

typedef struct DNodo * TipoDLista;

Aqu´ı tienes una representaci´ on gr´afica de una lista doblemente enlazada: ant

lista

info

sig

ant

3

info

sig

ant

8

info

sig

2

Observa que cada nodo tiene dos punteros: uno al nodo anterior y otro al siguiente. ¿Qu´e nodo sigue al u ´ltimo nodo? Ninguno, o sea, NULL. ¿Y cu´al antecede al primero? Ninguno, es decir, NULL.

4.8.1.

Inserci´ on por cabeza

La inserci´ on por cabeza es relativamente sencilla. Tratemos en primer lugar el caso general: la inserci´on por cabeza en una lista no vac´ıa. Por ejemplo, en ´esta: lista

ant

info

8

sig

ant

info

sig

2

Vamos paso a paso. 300

Introducci´ on a la Programaci´ on con C

Profile for esLibre.com

Introducción a la programación con c  

Introducción a la programación con c  

Advertisement