Está en la página 1de 34

Jos Vargas

Laboratorio de estructuras de datos A

Horario DSI
Martes 11:00 AM a 12:00 PM
Viernes 09:00 AM a 10:00 AM

Subir fotos al sistema DTT


Fotografa con el formato visual utilizado en el DPI o Pasaporte.
Fondo de color nico.
Fotografa formal, sin gorra ni sombrero o algn otro accesorio.
Toda Imagen a color.
Que la Imagen tenga buena calidad de visibilidad.
Dimensiones 200 X 300 px.
Fecha lmite 11/02/2015 23:59 (hoy)

Envo de entregables
o Crear una cuenta en dropbox.
o Crear una carpeta y nombrarla = <#carnet>
o Ejemplo: 201100000

o Compartir carpeta con ja14cv@gmail.com mediante dropbox.

* Para evitar que les reboten los correos por mandar rar, zip, exe, etc. Toda tarea,
hoja de trabajo, practica y proyecto que les solicite me enven hacerlo de la
siguiente manera:
o Subir entregables a dicha carpeta antes del da y hora lmite de entrega.
o No cambiar nombre luego de subirlo (el sistema altera la fecha y hora de subida).
o No hacer cambios dentro del archivo (el sistema altera la fecha y hora de subida).

Nombre para entregables:

Tipo

Formato

Ejemplo

Tarea

[EDD]Tarea#_<#carnet>.ext

[EDD]Tarea1_201100000.ext

Hoja de trabajo [EDD]HT#_<#carnet>.ext

[EDD]HT1_201100000.ext

Prctica

[EDD]Practica#_<#carnet>.ext

[EDD]Practica1_201100000.ext

Proyecto

[EDD]Proyecto#_<#carnet>.ext [EDD]Proyecto1_201100000.ext

A menos que se indique lo contrario, los tipos de archivos a aceptar (.ext) son:
.pdf
.rar

Las EDD simples se pueden combinar de varias maneras para formar estructuras
mas complejas. Las clases principales de dichas estructuras mas complejas son
lineales y no lineales, dependiendo de la complejidad de las relaciones lgicas que
representan.
Las EDD lineales presentan el principio de adyacencia, es decir, estar almacenadas
contiguamente. Entre las EDD lineales vamos a estudiar:
Listas
Pilas
Colas

Una lista enlazada es una EDD formada por un conjunto de elementos

ordenados; el nmero de elementos en la lista puede variar


(dinamismo). Denotemos la lista enlazada llamada A, formada por
T elementos como:
= [1 , 2 , , ]
Si = 0, se dice que la lista lineal esta vaca.

Se puede agregar o borrar un elemento en cualquier tiempo de la ejecucin del

programa.

Listas simples enlazadas


Cada nodo contiene un nico enlace que lo conecta al nodo siguiente o nodo sucesor. La

lista es eficiente en recorridos directos (adelante).

Listas doblemente enlazadas


Cada nodo contiene dos enlaces, uno a su nodo predecesor y otro a su nodo sucesor. La

lista es eficiente en recorrido directo (adelante) como en recorrido inverso (atrs).

Lista circular simplemente enlazada


El ultimo elemento (cola) se enlaza al primer elemento (cabeza) de tal modo que la lista

puede recorrerse de modo circular (en anillo) en direccin directa (adelante).

Lista circular doblemente enlazada


Cada nodo contiene dos enlaces, uno a su nodo predecesor y otro a su nodo sucesor,

adems, el ultimo elemento se enlaza al primer elemento y viceversa. Esta lista se puede
recorrer en modo circular (en anillo) tanto en direccin directa (adelante) como
inversa (atrs).

Implementacin de una lista enlazada:

Crear un elemento (nodo) que en lenguaje C es representado por un Struct.


El elemento esta formado en su interior por dos partes importantes:
Parte de dato: ac se declara la cantidad y tipo de atributos para el elemento
Parte de enlace: ac se declara la cantidad de enlaces que tendr dicho elemento, dicha cantidad
depende tambin del tipo de lista a implementar.
Instanciar dicho elemento poniendo un nombre descriptivo, por ejemplo: cabeza, primero,

inicio, etc.

Dentro de la implementacin se debe definir ciertas operaciones que dependen del

propsito de la EDD.

Insertar nuevo elemento


Eliminar elemento
Buscar elemento
Recorrer la lista enlazada
Comprobar si la lista esta vaca

No hay una regla que defina cual es la mejor manera de implementar una lista

enlazada, de hecho, se trata de realizar la EDD de tal manera que sea adecuada a la
aplicacin en la cual se va a utilizar.

Dicho lo anterior, normalmente se accede a partir del primer elemento (nodo),

en ocasiones tambin se mantiene una referencia al ltimo elemento (nodo) de


la lista enlazada.

El nuevo elemento que se desea incorporar a una lista se puede insertar de

distintas formas, segn la posicin o punto deseado de insercin.


En la cabeza de la lista (elemento primero).
En el final de la lista (elemento ultimo).
Antes de un elemento especificado.
Despus de un elemento especificado.

La posicin mas fcil, y a la vez, mas eficiente en donde insertar un nuevo

elemento de una lista es en la cabeza, es decir, por el primer elemento de la lista.


El proceso de insercin se resume:
Crear un nodo e inicializar el campo dato al nuevo elemento. La referencia del nodo se

asigna a nuevo, variable local del mtodo.


Hacer que el campo enlace del nuevo nodo apunte a la cabeza (primero) de la lista
original.
Hacer que primero apunte al nodo creado.

Una lista enlazada contiene tres elementos: 10, 25 y 40.


Insertar en la cabeza de la lista un nuevo elemento: 4
Paso 1:

Paso 2:

Paso 3:

La insercin al final de la lista es menos eficiente debido a que, normalmente, no

se tienen un puntero al ltimo nodo y, entonces, se ha de seguir toda la lista desde


el inicio hasta el ltimo para, a continuacin, realizar la insercin.

Se debe, entonces, crear un nodo, inicializando su dato a la entrada. El campo

enlace del ultimo nodo queda apuntado al nodo creado y asi se enlaza, como nodo
final a la lista.

El algoritmo para insertar entre dos nodos n1 y n2 es el siguiente:


Crear un nodo inicializando su dato a la entrada y el campo enlace a null. La

referencia al nodo se asigna a nuevo.

Hacer que el campo enlace del nuevo nodo apunte al nodo n2, ya que el nodo

creado se ubicara justo antes de n2.

La variable referencia anterior tiene la direccin del nodo n1, y esto exige hacer

que el anterior.enlace apunte al nodo creado.

Insertar el nodo con dato 75 entre los nodos n1 con dato 25 y n2 con dato 40
Paso 1:

Paso 2:

Paso 3:

La operacin bsqueda de un dato en una lista enlazada recorre la lista hasta

encontrar el nodo con el dato. El algoritmo que se utiliza para localizar un


elemento en una lista enlazada:
Crear un nodo auxiliar

Posicionar ese auxiliar a la cabeza de la lista


Verificar si el dato que buscamos esta en ese nodo auxiliar
Si esta devolverlo y terminar con el mtodo
De lo contrario continuar recorriendo hasta encontrar el dato o llegar al final de la lista y

no encontrarlo

Una vez encontrado el nodo, devuelve la referencia a ese nodo. Otro planteamiento

es que el mtodo devuelva true si encuentra el nodo con el elemento y false si no


esta en la lista.

La operacin eliminar un nodo de una lista supone enlazar el nodo anterior con el
nodo siguiente al que se desea eliminar y liberar la memoria que ocupa.
El algoritmo para eliminar un nodo que contiene un dato es el siguiente:
Bsqueda del nodo que contiene el dato. Se ha de obtener la direccin del nodo a

eliminar y la direccin del anterior.

Se coloca el enlace del nodo anterior apuntando al siguiente del nodo a eliminar.
Si el nodo a eliminar es la cabeza de la lista, se modifica primero para que tenga la

direccin del siguiente nodo.

Por ltimo, la memoria ocupada por el nodo se libera.

La lista ordenada es una lista enlazada a la que se aade la propiedad de

ordenacin de sus datos. Por esto, se puede decir que esta es una implementacin
de herencia sobre una lista enlazada. El mtodo de insertar es el mtodo que se
modifica, para que luego sea aprovechado ese orden en las otras operaciones.

En esta lista, cada elemento contiene dos apuntadores (referencias), adems del

dato almacenado. Una referencia apunta al siguiente elemento de la lista y la otra


referencia apunta al elemento anterior.

Insertar un elemento a la cabeza


Crear un nodo con el nuevo elemento y asignar su referencia a la variable nuevo
Hacer que el campo enlace adelante del nuevo nodo apunte a la cabeza (primer

nodo) de la lista original, y que el campo enlace atrs del nodo cabeza apunte al
nuevo nodo.

Hacer que cabeza apunte al nuevo nodo que se ha creado.

Insertar despus de un nodo


Crear un nodo con el nuevo dato y asignar su referencia a la variable nuevo.
Hacer que el enlace adelante del nuevo nodo apunte al nodo siguiente de n.
Si el siguiente de n no es null hacer que el enlace atrs apunte a nuevo.
Hacer que el enlace siguiente de n apunte a nuevo.
Hacer que el enlace atrs de nuevo apunte a n.

El algoritmo es similar al del borrado para una lista simple. Ahora, la direccin del
nodo anterior se encuentra en la referencia atrs del nodo a borrar. Los pasos a
seguir son:
Bsqueda del nodo que contiene el dato
La referencia adelante del nodo anterior tiene que apuntar a la referencia adelante

del nodo a eliminar (si no es el nodo cabecera)

La referencia atrs del nodo siguiente a borrar tiene que apuntar a la referencia

atrs del nodo a eliminar (si no es el ultimo nodo)

Si el nodo que se elimina es el primero, cabeza, se modifica la cabeza para que

tenga la direccin del nodo siguiente.

La memoria ocupada por el nodo se libera.

En las listas simples o en las dobles siempre hay un primer nodo (cabeza) y un

ultimo nodo (cola). Una lista circular, por propia naturaleza, no tiene principio ni
fin. Sin embargo, resulta til establecer un nodo a partir del cual se accede a la
lista y as poder acceder a sus nodos.

El apuntador de acceso a una lista circular (Lc), normalmente apunta al ultimo

nodo aadido a la estructura. Esta convencin puede cambiar, ya que en la


estructura circular no hay primero ni ultimo.

Una pila es un caso especial de lista lineal en el cual, la insercin y suprecin son
operaciones que solo pueden ocurrir en un extremo de la pila, el cual se denomina
como tope de pila. Denotemos TOPE(P) como el elemento tope de la pila P. Para la
pila P donde:
= [1 , 2 , , ]
El TOPE(P) es

Una pila tiene un numero entero de elementos, por ejemplo para la pila P de arriba,
el numero de elementos es T.
LIFO: Last In First Out, el ltimo en entrar es el primero en salir.

La representacin grfica
que elija no importa en
tanto que haya
consistencia para
cualquier pila en
particular. Generalmente
usamos de tener el tope
en la direccin superior.

Operacin

Descripcin

crear_pila(nombre,capacidad)

Inicia la pila con nombre y asigna capacidad

aplilar(P, dato)

Pone un dato en la pila P

desapilar(P)

Retira un dato de la pila P

pila_vacia(P)

Comprueba si la pila P no tiene elementos

pila_llena(P)

Comprueba si la pila P esta llena de elementos

limpiar_pila(P)

Quita todos los elementos de la pila P

cima_pila(P)

Obtiene el elemento cima de la pila P

tamanio_pila(P)

Numero de elementos mximo que puede


contener la pila P

Una cola es un caso especial de la EDD definida como lista lineal. En una cola la
insercin se hace estrictamente por un extremo al cual llamamos fondo, la supresin
slo puede hacerse por el otro extremo de la cola, al cual llamamos frente:
= 1 , 2 , ,
El frente de es 1
El fondo de es
SI T=0 la se dice que cola esta vaca

FIFO: First In First Out, el primero en entrar es el primero en salir.

En la realidad no es importante si trazamos una cola cuyo crecimiento vaya de

derecha a izquierda:

o de izquierda a derecha:

o, bien, en forma vertical, en tanto seamos consistentes con respecto a cuales son

el frente y el fondo de la cola.

Operacin

Descripcin

crear_cola(nombre, capacidad)

Inicia la cola con nombre y asigna capacidad

encolar(Q, dato)

Inserta un dato en la cola Q

desencolar(Q)

Retira el elemento frente de la cola Q

cola_vacia(Q)

Comprueba si la cola Q no tiene elementos

cola_llena(Q)

Comprueba si la cola Q esta llena de elementos

frente(Q)

Obtiene el elemento frente de la cola Q

tamanio_cola(Q)

Numero de elementos mximo que puede


contener la cola Q

1.

Dibuje la secuencia de resultados de aplicar las operaciones siguientes sobre


una pila vaca p:
apilar(p,1); apilar(p,7); desapilar(p); apilar(p,2); apilar(p,3); desapilar(p); apilar(p,5);

apilar(p,9).

2.

Dibuje la secuencia de resultados de aplicar las operaciones siguientes sobre


una cola vaca q:
encolar(q,1); encolar(q,7); desencolar(q); encolar(q,2); encolar(q,3); desencolar(q);

encolar(q,5); encolar(q,9);

Todo en un documento PDF


Nombre: [EDD]Tarea1_<carnet>.pdf
Ejemplo: [EDD]Tarea1_201100000.pdf
Entrega: Viernes 13/02/2015 23:59