Contenido
Listas ............................................................................................................................................................. 2 Qu objetos se pueden modelar con una lista? ..................................................................................... 2 Definiendo una lista .................................................................................................................................. 2 TAD para representar una lista ................................................................................................................. 2 Relacionando el concepto de Ventana con el de Lista ....................................................................... 4 Describiendo las implementaciones de Listas .......................................................................................... 4 Vectores ................................................................................................................................................ 4 Listas doblemente enlazadas ................................................................................................................ 5 Mecanismos para implementar las listas en diferentes lenguajes ........................................................... 5 Pilas ............................................................................................................................................................... 6 Qu objetos se pueden modelar con una pila? ...................................................................................... 6 Definiendo una pila ................................................................................................................................... 7 TAD para representar una pila .................................................................................................................. 7 Mecanismos para implementar las pilas a travs de listas y vectores ..................................................... 8 Cola ............................................................................................................................................................... 8 Qu objetos se pueden modelar con una cola?...................................................................................... 8 Definiendo una cola .................................................................................................................................. 9 TAD para representar una cola ................................................................................................................. 9 Particularidades de una cola con prioridades ............................................ Error! Bookmark not defined. Describiendo las implementaciones de colas con vectores circulares ..................................................... 9
Listas
Qu objetos se pueden modelar con una lista?
Los ingredientes de una receta de cocina Los integrantes de una junta de vecinos Las partes de un aparato electrnico
Invariante: n > i >= p Resumen de Operaciones: o crear: o combinar: o dividir: o truncar: o insertar: o remover: o siguiente: o inicio: o fin: o cantElem:
nil Lista x Lista Lista, int, bool Lista, int Nodo Nodo Nodo Lista Lista Lista
Lista Lista Lista, Lista Lista Lista Lista Nodo Nodo Nodo int
Detalle de Operaciones:
Lista crear () /*Construye una nueva lista */ {Pre: -} {Post: crear es una lista con un solo nodo} Lista combinar (Lista lst1, Lista lst2) /*Combina ambas listas en una sola, concatenando el ltimo elemento de lst1 con el primero de lst2 */ {Pre: l1 y l2 son listas no vacas} {Post: combinar es una lista que contiene todos los elementos de lst1 y lst2} Lista dividir (Lista lst, int x, Boolean orientacin) /*Remueve todos los elementos a partir del nodo X de lst y retorna una nueva lista con dichos elementos. Orientacin define como se realiza la operacin: si es TRUE se toman los elementos a la derecha de X, y viceversa */ {Pre: N> x >= P, donde P es el ndice del nodo inicial y N es el nodo final} {Post: dividir es una lista que contiene los elementos de lst a partir de X} Lista truncar (Lista lst, int x) /*Remueve los elementos de lst a partir del nodo x*/ {Pre: N> x >= P, donde P es el ndice del nodo inicial y N es el nodo final} {Post: truncar es una lista que contiene X-P elementos} Void insertar (Lista lst, Nodo n) /*Inserta un nuevo nodo al final de la lista*/ {Pre:} {Post: lst[p] = n} Nodo siguiente (Nodo n1) /*Devuelve el nodo que le sigue a n1 en la lista */ {Pre: n1!= lst[p]} {Post: -} Nodo inicio (Lista lst) /*Devuelve el nodo inicial de lst*/ {Pre: lst es una lista no vaca} {Post: inicio es el nodo raz de lst} Nodo fin (Lista lst) /*Devuelve el ultimo nodo de la lista*/ {Pre: lst es una lista no vaca.} {Post: fin es el ltimo nodo de la lista} Int cantElem (Lista lst) /*Devuelve la cantidad de nodos en lst*/ {Pre: -} {Post: -}
En Java, las funcionalidades del vector estn contenidas en la clase ArrayList. Hay una clase Vector pero su uso no es aconsejable. Un ArrayList es una estructura de datos que no se basa en nodos para el almacenamiento de la informacin, sino que internamente guarda punteros a cada uno de los elementos en un arreglo. Esto permite que el acceso a los elementos sea indizado, seo, que acceder al elemento <N> de un ArrayList es algo trivial; sin embargo, la debilidad de esta estructura es que si el arreglo se llena, es necesario copiar todo su contenido en otro arreglo de mayor tamao y liberar el espacio de memoria ocupada por el arreglo anterior. Otro inconveniente es la insercin de elementos en el en el en otra posicin que no sea al final ya que esta operacin requiere la modificacin de gran parte del arreglo.
Esta es la otra implementacin de la interfaz Lista en Java, que si utiliza nodos como unidades bsicas de persistencia. Estos permiten que la lista no tenga lmite terico de crecimiento, simplemente se sigue agregando el nuevo nodo al final y se actualizan las referencias a este. La desventaja est en la lectura, ya que para leer el elemento <N> se necesita atravesar N elementos.
C#: El namespace System. Collections incluye 3 implementaciones de lista: o List<t>: Se comporta Como un vector, utilizando un arreglo para proporcionar los servicios de lista. o LinkedList<t>: Se comporta Como una lista enlazada, utilizando nodos para almacenar los datos. o SortedList<k, t>: Como su nombre lo indica, es una lista de elementos del tipo T, que se ordenan en base a la comparacin valor de la clave K. En este caso la insercin es ms lenta, ya que debe comparar los valores de las claves para ver donde insertar el nuevo nodo, pero la lectura es trivial ya que todos los nodos estn ordenados.
Java: Implementa ArrayList y LinkedList. Vector tambin implementa la interfaz de lista, pero su uso no es recomendado en nuevas implementaciones. Estas implementaciones, y otras mas estn contenidas en el paquete java.Util.Collections
Pilas
Qu objetos se pueden modelar con una pila?
Supongamos que est atrapado en un laberinto cualquiera (Ya sea el laberinto del mino tauro, en Creta, o un callejn de Gualey, usted decide). Al llegar a un punto muerto, Qu har? Devolverse, lgicamente. Pero, Hacia dnde? Pues hacia el ltimo punto de divergencia. Esto se puede modelar como una pila donde colocamos (push) puntos y al encontrar un punto muerto, retrocedemos (pop) al primer punto de la pila.
Igualmente, supongamos que estas realizando una presentacin para cierta clase de Estructuras de Datos en MS Word. Sin darte cuenta, has seleccionado todo el texto, y has presionado la tecla Borrar. Qu haces? No hay problema, haces un Ctrl + Z y listo, Verdad? Esa funcionalidad se implementa con una pila. El programa va colocando cada estado en una pila, y cuando deshacemos simplemente hacemos un pop() a la pila. Igual el caso si quisiramos por ejemplo, invertir una palabra. La agregamos carcter por carcter a la pila y luego la retornamos con Pop() en orden inverso.
De hecho, las pilas son una importantsima herramienta en el anlisis lexicogrfico; los compiladores la utilizan para por ejemplo, encontrar las llaves que encierran un enunciado en el cdigo fuente; o para evaluar expresiones matemticas escritas utilizando una notacin infix cambindolas por una notacin post-fix .
En todo momento, el nico elemento visible de la estructura es el ltimo que se coloc. Se define el tope de la pila como el punto donde se encuentra dicho elemento, y el fondo, como el punto donde se encuentra el primer elemento incluido en la estructura
Invariante: Cantidad de elementos <= 0 Operaciones: o crearPila Pila o push Elemento o pop Pila o cantElem Pila
En el caso del vector, como siempre la limitacin esta en el hecho de que las constantes rea locaciones para obtener ms espacio disponible pueden convertirse en un problema.
Las operaciones Push () y Pop () deben tener una complejidad Constante de O(1), sin importar que mecanismos se utilicen para implementarla.
Cola
Qu objetos se pueden modelar con una cola?
Considere el caso de un banco donde usted se dirige un da primero de cualquier mes a realizar el cambio del cheque de su salario. Al entrar al establecimiento se encuentra que decenas de personas estn presentes para realizar la misma operacin, pero la cantidad de cajeros es limitada. Qu sucede? Se organizan en una fila, por orden de llegada. El primero en llegar (o el ms vivo, dependiendo de qu pas de trate) est en la primera posicin y es despachado primero.
Esta situacin se aplica bastante en la vida diaria: Al ir a un bao pblico, al esperar en la fila del supermercado, al esperar el autobs; Recursos en los que es necesario regular el acceso al mismo, debido a que son limitados. En la informtica se dan muchos casos de colas: o o o o Las colas de impresin. Las colas de prioridades para los procesos en el CPU Las colas de acceso a archivos Las colas de despacho en los dispositivos de acceso a la red
En el caso de una lista, esto no supone mayores complicaciones, pero si se utiliza un array debe de aplicarse una matemtica especial para los ndices.
Referencias:
http://www.cs.cmu.edu/~adamchik/15121/lectures/Stacks%20and%20Queues/Stacks%20and%20Queues.html http://cupi2.uniandes.edu.co/libros/estructuras_de_datos/index.php?option=com_content&view=articl e&id=217&Itemid=68