Anda di halaman 1dari 3

UNIVERSIDAD NACIONAL DE COLOMBIA

FACULTAD DE INGENIERIA
DEPARTAMENTO DE SISTEMAS
PROGRAMACION ORIENTADA A OBJETOS I-2004
TALLER 3
Vamos a analizar brevemente el funcionamiento del programa taller3.cpp.
Al inicio del programa se encuentra la declaracin de una estructura que representa un nodo en una
lista simplemente encadenada, grficamente esto se vera as:

cab: apuntador a estructura NODO


NODO: estructura
60

Null

dato: entero

siguiente: puntero a otro NODO

De esta forma al encadenar varios de estos nodos tendremos una lista simplemente encadenada con
una variable apuntador *cab indicando el inicio de la lista, grficamente es as:
cab

10

15

20

15

40

Null

Veamos como actuar la funcin void insertar(NODO *p, NODO *q, int n).
La siguiente es la imagen de lo que recibe la funcin, en este caso se supone que se va a insertar el
valor 15 en la lista, los apuntadores *p y *q ya estn en posicin. Como el 15 debe ir luego del 10,
la condicin del if(p != NULL) ser verdadera:
cab
n
10

20

40

Null

Despus de ejecutar la funcin se obtiene el siguiente resultado:

15

n
15

15

cab

10

20

40

Null

Otro caso es cuando es necesario insertar el nuevo nodo al principio de la lista, aunque es un caso
muy similar al anterios, slo hay que nodificar el apuntador *cab. Un ejemplo de esto lo tenemos
cuando la funcin recibe la siguiente configuracin. Como el 7 debe ir antes del 10, la condicin del
if(p != NULL) ser falsa y ejecutar la accin escrita dentro del else:
cab
n
10

20

40

Null

Null

Despus de ejecutar la funcin se obtiene el siguiente resultado:


n
cab

10

20

40

Null

Null

Cuando *q = NULL se tiene una lista vacia, por lo tanto el nuevo nodo ser el primero y su variable
apuntador *siguiente ser tambin NULL, lo cual indica que se tiene una lista con un nico nodo.
La funcin int posicion_lista(int n) recibe el nmero a insertar en la lista y busca la posicin
adecuada para insertarlo. Esta funcin garantiza que los nmeros insertardos estarn en orden
ascendente, para ello recorre la lista de principio a fin hasta que encuentre la posicin adecuada del

nuevo nmero, si encuentra un nmero mayor que este entonces abre espacio en la lista y lo inserta,
si no encuentra uno mayor lo ubica al final de la lista.
Con esto ya se tiene una buena idea del funcionamiento del programa.
EJERCICIO:
Una lista doblemente encadenada es una extensin de una simplemente encadenada como se puede
ver en el siguiente grfico:
cab

Null

10

15

20

25

Null

La diferencia radica en que cada nodo tiene dos variables apuntador, la primera apunta al nodo que
se encuentra atrs (flechas en color azul) y la segunda apunta al siguiente nodo (flechas en color
rojo) similar a las listas simplemente encadenadas.
Los nodos que se encuentran a los extremos tienen uno de los apuntadores inicializados en NULL
como se ve en el grfico. Adicionalemente se debe contar con una variable apuntador que nos
indique el inicio de la lista.
El ejercicio consiste en crear una lista doblemente encadenada y las funciones necesarias para:
1. Insertar un nuevo nodo de tal forma que al recorrer la lista de izquierda a derecha los nmeros
estn en orden ascendente.
2. Imprimir la lista en ambos sentidos, es decir, la salida para el ejemplo dado en el grfico debe
ser:
10 15 20 25
25 20 15 10.
3. Eliminar un nodo que ya ha sido insertado en la lista doblemente encadenada. El nmero a ser
eliminado lo escoge el usuario del programa.

Anda mungkin juga menyukai