Vous êtes sur la page 1sur 7

Repblica Bolivariana de Venezuela Ministerio del Poder Popular para la Educacin Universitaria Universidad Politcnica Territorial de Aragua Federico

Brito Figueroa La Victoria-Edo Aragua

LISTAS ENLAZADAS, PILAS Y COLAS

Prof.: Mara Rebeca Gil Integrantes: Aranguren Amanda CI: 21.252.551 Pea Ana Karina CI: 21.026.687

Programacin 02 Seccin 05

Listas enlazadas: Una lista enlazada es un tipo de dato autoreferenciado porque contienen un puntero o enlace (en ingls link, del mismo significado) a otro dato del mismo tipo. Las listas enlazadas permiten inserciones y eliminacin de nodos en cualquier punto de la lista en tiempo constante (suponiendo que dicho punto est previamente identificado o localizado), pero no permiten un acceso aleatorio. Existen diferentes tipos de listas enlazadas: Lista Enlazadas Simples, Listas Doblemente Enlazadas, Listas Enlazadas Circulares y Listas Enlazadas Doblemente Circulares Listas simples enlazadas La lista enlazada bsica es la lista enlazada simple la cual tiene un enlace por nodo. Este enlace apunta al siguiente nodo en la lista, o al valor NULL o a la lista vaca, si es el ltimo nodo. Lista Doblemente Enlazada Un tipo de lista enlazada ms sofisticado es la lista doblemente enlazada o lista enlazadas de dos vas. Cada nodo tiene dos enlaces: uno apunta al nodo anterior, o apunta al valor NULL si es el primer nodo; y otro que apunta al nodo siguiente, o apunta al valor NULL si es el ltimo nodo. En algn lenguaje de muy bajo nivel, XOR-Linking ofrece una va para implementar listas doblemente enlazadas, usando una sola palabra para ambos enlaces, aunque el uso de esta tcnica no se suele utilizar. Listas enlazadas circulares En una lista enlazada circular, el primer y el ltimo nodo estn unidos juntos. Esto se puede hacer tanto para listas enlazadas simples como para las doblemente enlazadas. Para recorrer una lista enlazada circular podemos empezar por cualquier nodo y seguir la lista en cualquier direccin hasta que se regrese hasta el nodo original. Desde otro punto de vista, las listas enlazadas circulares pueden ser vistas como listas sin comienzo ni fin. Este tipo de listas es el ms usado para dirigir buffers para ingerir datos, y para visitar todos los nodos de una lista a partir de uno dado.

Una lista enlazada circular que contiene tres valores enteros Listas enlazadas circulares simples Cada nodo tiene un enlace, similar al de las listas enlazadas simples, excepto que el siguiente nodo del ltimo apunta al primero. Como en una lista enlazada simple, los nuevos nodos pueden ser solo eficientemente insertados despus de uno que ya tengamos referenciado. Por esta razn, es usual quedarse con una referencia solamente al ltimo elemento en una lista enlazada circular simple, esto nos permite rpidas inserciones al principio, y tambin permite accesos al primer nodo desde el puntero del ltimo nodo. 1 Lista Enlazada Doblemente Circular En una lista enlazada doblemente circular, cada nodo tiene dos enlaces, similares a los de la lista doblemente enlazada, excepto que el enlace anterior del primer nodo apunta al ltimo y el enlace siguiente del ltimo nodo, apunta al primero. Como en una lista doblemente enlazada, las inserciones y eliminaciones pueden ser hechas desde cualquier punto con acceso a algn nodo cercano. Aunque estructuralmente una lista circular doblemente enlazada no tiene ni principio ni fin, un puntero de acceso externo puede establecer el nodo apuntado que est en la cabeza o al nodo cola, y as mantener el orden tan bien como en una lista doblemente enlazada. Nodos Centinelas A veces las listas enlazadas tienen un nodo centinela (tambin llamado falso nodo o nodo ficticio) al principio o al final de la lista, el cual no es usado para guardar datos. Su propsito es simplificar o agilizar algunas operaciones, asegurando que cualquier nodo tiene otro anterior o posterior, y que toda la lista (incluso alguna que no contenga datos) siempre tenga un primer y ltimo nodo. Recorrido: Esta operacin consiste en visitar cada uno de los nodos que forman la lista . Para recorrer todos los nodos de la lista, se comienza con el primero, se toma el valor del campo liga para

avanzar al segundo nodo, el campo liga de este nodo nos dar la direccin del tercer nodo, y as sucesivamente. Insercin: Esta operacin consiste en agregar un nuevo nodo a la lista. Para esta operacin se pueden considerar tres casos: Insertar un nodo al inicio. Insertar un nodo antes o despus de cierto nodo. Insertar un nodo al final. Borrado: La operacin de borrado consiste en quitar un nodo de la lista, redefiniendo las ligas que correspondan. Se pueden presentar cuatro casos: Eliminar el primer nodo. Eliminar el ltimo nodo. Eliminar un nodo con cierta informacin. Eliminar el nodo anterior o posterior al nodo cierta con informacin. Bsqueda: Esta operacin consiste en visitar cada uno de los nodos, tomando al campo liga como puntero al siguiente nodo a visitar.

Pilas: Las pilas son estructuras de datos que tienes dos operaciones bsicas: push (para insertar un elemento) y pop (para extraer un elemento). Su caracterstica fundamental es que al extraer se obtiene siempre el ltimo elemento que acaba de insertarse. Por esta razn tambin se conocen como estructuras de datos LIFO (del ingls Last InFirstOut).Una posible implementacin mediante listas enlazadas sera insertando y extrayendo siempre por el principio de la lista. Gracias a las pilas es posible el uso de la recursividad (lo veremos en detalle en el tema siguiente). La variable que llama al mismo procedimiento en el q est, habr que guardarla as como el resto de variables de la nueva llamada, para a la vuelta de la recursividad ir sacandolas, esto es posible a la implementacin de pilas. Implementacin en base a Punteros La lista est conformada por un conjunto de celdas, cada una posee dos componentes, un puntero y el otro es el elemento que se desea almacenar. El puntero seala a la siguiente celda. Se requiere un apuntador para la primera celda, al que se lo llamar inicio. Al arreglo lo denotaremos con la letra A, y a los ndices con la letra i, por lo que A(i), comprende el elemento i-simo en el arreglo. Cabe resaltar que esta estructura posee una capacidad de almacenamiento de datos fija N. Adems es de inters conocer la ltima posicin en la que se almacen un elemento en el arreglo, a la que se har referencia con la letra L. Se observa que L no puede ser mayor a N. Adems es de inters conocer la ltima posicin en la que se almacen un elemento en el arreglo, a la que se har referencia con la letra L. Se observa que L no puede ser mayor a N.Si se desea determinar si un elemento dado, w , pertenece o no al arreglo, simplemente se recorre desde la posicin en que i=1 y se compara con los datos del arreglo, se detendr la bsqueda en el caso de que encontremos un elemento igual o si es que llegamos a la posicin L.Para insertar un dato, primero verificamos si ste ya pertenece mediante el procedimiento anterior y si es que todava existe espacio en el arreglo para otro elemento, lo que se comprueba si L es menor a N. Al cumplirse las condiciones anteriores insertamos el nuevo dato en la posicin L+1 y ste ser el nuevo valor de L para una posterior operacin.Los arreglos no son eficientes para realizar otro tipo de operaciones, como por ejemplo insertar o

eliminar un elemento en una posicin menor a L. Luego de eliminar un elemento en la posicin k-sima (k<L), se debe cambiar a los datos situados en k+1, k+2, ... L una posicin hacia atrs y ahora L sera igual a L-1. Para un elemento en la posicin k-sima (k<L), se debe cambiar a los datos situados en k, k+1, ... L una posicin hacia delante y ahora L sera igual a L+1. Por estas razones esta estructura de datos no es utilizada en la prctica para implementar programas de aplicacin.

Implementacin en base a Arreglos

Para describir la lista enlazada definiremos dos arreglos de dimensin N, uno denominado datos, y el otro enlace. Las celdas que conforman la lista se representan mediante los arreglos mencionados. Por ejemplo la k-sima celda consta de datos (k), donde se almacena un elemento, y de enlace(k), que contiene la posicin del siguiente elemento. El arreglo enlace debe ser inicializado con 0 en todas sus entradas. Adems se necesita de un nmero, llamado primero, el que indica la posicin del primer elemento de la lista. Si primero vale 0, la lista est vaca. Esta implementacin ofrece una forma fcil de manipular la estructura de datos. Si se desea conocer si un elemento pertenece o no a la lista, definimos una variable llamada sgte. A dicha variable se le asigna el valor de primero, que si fuera igual a cero, la bsqueda se detendra. Si este no fuera el caso, se verifica si en datos(sgte), se encuentra el elemento de inters. Si no es el elemento que buscamos se actualiza el valor de sgte, lo que se logra haciendo sgte=enlace (sgte).Este proceso se repetir hasta que se encuentre el elemento con el que comparamos o hasta que enlace(sgte) sea igual a cero. Para insertar un nuevo elemento X en la lista, se identifica una celda que no haya sido utilizada. Cuya posicin ser nuevo, y se realizar la asignacin datos(nuevo)=X. Colas: Las colas tambin son llamadas FIFO (First In First Out), que quiere decir el primero que entra es el primero que sale. Colas simples: Se inserta por un sitio y se saca por otro, en el caso de la cola simple se inserta por el final y se saca por el principio. Para gestionar este tipo

de cola hay que recordar siempre cual es el siguiente elemento que se va a leer y cual es el ltimo elemento que se ha introducido. Colas circulares: En las colas circulares se considera que despus del ltimo elemento se accede de nuevo al primero. De esta forma se reutilizan las posiciones extradas, el final de la cola es a su vez el principio, crendose un circuito cerrado. Colas con prioridad: Las colas con prioridad se implementan mediante listas o arrays ordenados. No nos interesa en este caso que salgan en el orden de entrada sino con una prioridad que le asignemos. Puede darse el caso que existan varios elementos con la misma prioridad, en este caso saldr primero aquel que primero llego (FIFO)

Vous aimerez peut-être aussi