taller 3

4
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 declaración de una estructura que representa un nodo en una lista simplemente encadenada, gráficamente esto se vería así: 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, gráficamente es así: Veamos como actuar la función void insertar(NODO *p, NODO *q, int n). La siguiente es la imagen de lo que recibe la función, en este caso se supone que se va a insertar el valor 15 en la lista, los apuntadores *p y *q ya están en posición. Como el 15 debe ir luego del 10, la condición del if(p != NULL) será verdadera: 60 Nul l dato: entero siguiente: puntero a otro NODO NODO: estructura cab: apuntador a estructura NODO 10 40 Nul l 15 20 15 cab

Upload: jesus-acuna

Post on 03-Oct-2015

214 views

Category:

Documents


0 download

DESCRIPTION

programacion orienta

TRANSCRIPT

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:

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:

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:

Despus de ejecutar la funcin se obtiene el siguiente resultado:

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:

Despus de ejecutar la funcin se obtiene el siguiente resultado:

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:

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 2525 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. NODO: estructura

siguiente: puntero a otro NODO

10

dato: entero

Null

60

cab: apuntador a estructura NODO

Null

40

15

20

15

cab

cab

q

p

20

Null

40

10

n

15

n

15

q

p

cab

20

Null

40

10

15

n

7

p

Null

q

cab

20

Null

40

10

n

7

p

Null

q

cab

20

Null

40

10

7

10

15

Null

25

20

Null

cab