You are on page 1of 24

Pilas.

Definicin
La pila es una lista de elementos caracterizada porque las operaciones de insercin
eliminacin de elementos se realizan solamente en un extremo de la estructura. El
extremo Donde se realizan estas operaciones se denomina habitualmente cima (top en la
nomenclatura inglesa).

Una pila es una estructura de datos en la que el ltimo elemento en entrar es el primero
en salir, por lo que tambin se denominan estructuras lifo (last in,first out).en esta
estructura solo se tiene acceso a la cabeza o cima de la pila.

Una pila es un tipo especial de lista abierta en la que slo se pueden insertar y eliminar
nodos en uno de los extremos de la lista. Estas operaciones se conocen como "push" y
"pop", respectivamente "empujar" y "tirar". Adems, las escrituras de datos siempre son
inserciones de nodos, y las lecturas siempre eliminan el nodo ledo.

Las pilas se utilizan en muchas aplicaciones que utilizamos con frecuencia. Por ejemplo,
la gestin de ventanas en Windows (cuando cerramos una ventana siempre recuperamos
la que tenamos detrs).

Otro ejemplo es la evaluacin general de cualquier expresin matemtica para evitar tener
que calcular el nmero de variables temporales que hacen falta.

Por ejemplo:

Asociadas con la estructura pila existen una serie de operaciones necesarias para su
manipulacin. stas son:
Iniciacin de la estructura
Crear la pila (Crear Pila): La operacin de creacin de la pila inicia la pila como
vaca. Operaciones para aadir y eliminar informacin
- Aadir elementos en la cima (Apilar): pondr un nuevo elemento en la parte
superior de la pila.
-Eliminar elementos de la cima (Desapilar): lo que har ser eliminar el elemento
superior de la pila.
Operaciones para comprobar tanto la informacin contenida en la pila, como
el propio estado de la cima
Comprobar si la pila est vaca (Pila Vaca): Esta operacin es necesaria para
verificar la existencia de elementos de la pila.
Acceder al elemento situado en la cima (Cima Pila): Devuelve el valor del
elemento situado en la parte superior de la pila.
Como en el caso de cualquier contenedor de datos las operaciones relevantes
tienen que ver con el almacenamiento (Apilar), eliminacin (Desapilar) o consulta
(CimaPila) de informacin.
La especificacin correcta de todas estas operaciones permitir definir
adecuadamente el tipo pila. Una declaracin ms formal de las operaciones
definidas sobre la estructura de datos pila, y los axiomas que las relacionan es la
siguiente:

Estructura

Pila (Valor) /* Valor constituye el dominio sobre el que se define el tipo de datos y hace
referencia a los datos que se almacenan en la pila */

Operaciones

CrearPila () Pila
Apilar (Pila, Valor) Pila
Desapilar (Pila) Pila
CimaPila (Pila) Valor
PilaVacia (Pila) Lgico

Axiomas

S Pila, x Valor se cumple que:


PilaVacia (CrearPila ()) cierto
PilaVacia (Apilar (s, x)) falso
Desapilar (CrearPila ()) error
Desapilar (Apilar (s, x)) s
CimaPila (CrearPila ()) error
CimaPila (Apilar (s, x)) x

Estos axiomas explican de manera precisa el comportamiento de las operaciones que


caracterizan las pilas y constituyen la referencia en la que se debe basar cualquier
implementacin de este tipo. Son el plano sobre el que basarse a la hora de la
construccin.

Representacin de Pilas en C++

Los lenguajes de programacin de alto nivel no suelen disponer de un tipo de datos


predefinido pila. Por lo tanto, es necesario representar la estructura pila a partir de otros
tipos de datos existentes en el lenguaje.

En C++, lo primero que se plantea al construir una clase que represente el tipo pila son
los mtodos pblicos a travs de los que se podr manipular la estructura. Las
operaciones sern bsicamente las definidas en el tipo abstracto de datos, aunque ser
preciso adaptarse a las caractersticas del lenguaje para establecer los detalles finales de
la representacin. As, se puede establecer el siguiente interfaz para la clase pila:

class Pila {
public:
Pila ();
bool Apilar (Valor);
bool Desapilar ();
bool CimaPila (Valor &);
bool PilaVacia ();
private:
//Todava por definir
};
Los criterios establecidos para esta definicin son los siguientes:

Aquellas operaciones que, segn el TAD, puedan generar un error (Desapilar, CimaPila)
devolvern un valor lgico que indique si la operacin se ha realizado correctamente o no.
La operacin CimaPila devuelve un valor lgico para informar de un posible error, pero
tambin debe retornar el valor que se ubica en la cima de la pila. Como no es posible que
una funcin devuelva dos valores diferentes, se plantea que tenga un argumento por
referencia que permita almacenar como salida de la operacin el valor almacenado en la
cima de la pila.

La operacin Apilar permitir aadir nuevos elementos a la pila. No obstante, es posible


que el espacio en memoria para los elementos de la pila est limitado (en principio, el
lmite puede ser la memoria disponible en el ordenador) y es posible que la pila se llene
y no admita nuevos elementos. sto debera generar un error similar al generado cuando
se desea eliminar un dato y la pila est vaca. Por ese motivo, se plantea que la operacin
Pg. 3 Tema 10. Tipos de datos devuelva un valor lgico que informe sobre si la operacin
se ha podido realizar correctamente.

Recordar que en C++, si la implementacin se realiza mediante clases, no es necesario


pasar como parmetro el objeto receptor de la peticin de operacin. Ese es un
argumento implcito en todas las operaciones.

Finalmente, el mtodo de iniciacin de la estructura CrearPila toma la forma de lo que se


conoce en C++ como un constructor de objetos de la clase. El constructor es un mtodo
especial que es llamado siempre que se instancia (declara) un nuevo objeto de una clase.
Si no existe el constructor por defecto, la instanciacin se limita a reservar el espacio
necesario para guardar la informacin del objeto. Si existe el constructor por defecto, ste
es llamado inmediatamente despus de la reserva de memoria y permite establecer un
estado inicial correcto para el objeto. El constructor es un mtodo que tiene el mismo
nombre que la clase, no devuelve ningn valor (ni siquiera void) y puede tener los
parmetros que se consideren oportunos, en nuestro caso ninguno (constructor por
defecto).

Operaciones
Una pila cuenta con 2 operaciones imprescindibles: apilar y desapilar, a las que en las
implementaciones modernas de las pilas se suelen aadir ms de uso habitual.

Crear: se crea la pila vaca. (constructor)


Tamao: regresa el nmero de elementos de la pila. (size)

Apilar: se aade un elemento a la pila.(push)

Desapilar: se elimina el elemento frontal de la pila.(pop)

Cima: devuelve el elemento que est en la cima de la pila. (top o peek)

Vaca: devuelve cierto si la pila est sin elementos o falso en caso de que
contenga uno. (empty).

Caractersticas:
Las pilas solo se pueden ingresar datos desde uno de sus extremos igualmente
como si fuera una pila de platos.
Las pilas generalmente van creciendo de acuerdo a la cantidad de datos que se
van apilando en ella.
Las pilas son una lista de elementos en la que puede insertar o eliminar.

Elementos:
A continuacin aprenderemos a insertar un elemento a la pila. El mtodo de insercin de
datos o tambin como Push, donde el elemento ingresado se almacena en el tope o en la
cima de la pila.

1. Crear CAB (Se crea el primer nodo de la lista)


2. Leer CAB.INFO

3. Hacer que CAB.SGTE -> NULL (-> apunte)

4. Escribir "Desea ingresar mas nodos a la lista? S:1, No: 0"

5. Leer RES

6. Mientras (RES=1) Repetir

Crear NUEVO

Leer NUEVO.INFO

Hacer que NUEVO.SGTE -> CAB y CAB -> NUEVO

Escribir "Desea ingresar mas nodos a la lista? S:1, No: 0"

Leer RES

Diferencias entre una pila y una cola


Una pila: en ingls (stack) es una lista ordinal o estructura de datos en la que el modo de
acceso a sus elementos es el lifo (del ingls last in first out, ultimo en entrar primero en
salir) que permite almacenar y recuperar datos.se aplica en multitud de ocasiones en
informtica debido a su simplicidad y ordenacin implcita en la propia estructura.

Una cola: es una estructura de datos caracterizada por ser una secuencia de elementos
en la operacin de insercin push se realiza por extremo y la operacin de extraccin pop
por otro.

Se entiende por una cola una estructura de datos en la que se aaden nuevos tms en un
extremo y se suprimen itms viejos en el opuesto.
A diferencia de las colas, en las pilas los tms se aaden y se eliminan en el mismo
extremo.

La pila es un sistema lifo (last in first out) sea lo que entra de ultimo a la lista ser la
primera en salir, mientras que la cola es un fifo (first in first out) en la que el primero en
entrar ser lo primero en salir.
La diferencia radica en cuales son los elementos que salen primero
Pilas:(primeras en entrar, primeras en salir) son como una pila de libros, los
primeros que entran a la pila son los ltimos que salen porque quedan debajo de
los ltimos.
Colas (primeras en entrar, primeras en salir): son como la cola para comprar un
boleto del cine, los primeros en entrar a la cola son los primeros que salen en ella.

Otra diferencia es que las pilas los tems se aaden y se eliminan en el mismo extremo.

Similitudes
Las similitudes entre pilas y colas es que ambas son estructura de datos donde el primer
elemento en entrar es el primero en salir y en las pilas los elementos en entrar es el
primero en salir estructuras lifo y fifo.

Colas
Definicin.
Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos
en la que la operacin de insercin push se realiza por un extremo y la operacin de
extraccin pop por el otro. Tambin se le llama estructura FIFO (del ingls First In First
Out), debido a que el primer elemento en entrar ser tambin el primero en salir.

^Una cola es un tipo especial de lista abierta en la que slo se puede insertar nodos en
uno de los extremos de la lista y slo se pueden eliminar nodos en el otro. Adems, como
sucede con las pilas, las escrituras de datos siempre son inserciones de nodos, y las
lecturas siempre eliminan el nodo ledo. Este tipo de lista es conocido como lista FIFO
(First In First Out), el primero en entrar es el primero en salir.

Una cola es un grupo ordenado de elementos homogneos en el que los nuevos


elementos se aaden por un extremo (el final) y se quitan por el otro extremo (el frente).
En las colas el elemento que entr primero sale tambin primero, por ello se las llama
como listas FIFO (first in, first out) "primero en entrar, primero en salir".
Utilizacin: Las colas se utilizan en sistemas informticos, transportes y operaciones
de investigacin (entre otros), dnde los objetos, personas o eventos son tomados como
datos que se almacenan y se guardan mediante colas para su posterior procesamiento.
Este tipo de estructura de datos abstracta se implementa en lenguajes orientados a
objetos mediante clases, en forma de listas.

Enlazadas Una cola es una estructura de datos, caracterizada por ser una secuencia de
elementos en la que la operacin de insercin push se realiza por un extremo y la
operacin de extraccin pop por el otro. Tambin se le llama estructura FIFO (del
ingls First In First Out), debido a que el primer elemento en entrar ser tambin el
primero en salir.

Las colas se utilizan en sistemas informticos, transportes y operaciones de investigacin


(entre otros), dnde los objetos, personas o eventos son tomados como datos que se
almacenan y se guardan mediante colas para su posterior procesamiento. Este tipo de
estructura de datos abstracta se implementa en lenguajes orientados a objetos mediante
clases, en forma de listas enlazadas.

Operaciones Bsicas
Crear: se crea la cola vaca.

Encolar (aadir, entrar, insertar): se aade un elemento a la cola. Se aade al final


de esta.
Desencolar (sacar, salir, eliminar): se elimina el elemento frontal de la cola, es
decir, el primer elemento que entr.
Frente (consultar, front): se devuelve el elemento frontal de la cola, es decir, el
primer elemento que entr

Tipos De Colas.
Cola circular o anillo: Una cola circular o anillo es una estructura de datos en la que los
elementos estn de forma circular y cada elemento tiene un sucesor y un predecesor. Los
elementos pueden consultarse, aadirse y eliminarse nicamente desde la cabeza del
anillo que es una posicin distinguida. Esta avanza en el sentido de las agujas del reloj.

Cola de prioridades: Una cola de prioridades se utiliza para que los elementos se
atienden en el orden indicado por una prioridad asociada a cada uno. Si varios elementos
tienen la misma prioridad, se atendern de modo convencional segn la posicin que
ocupen.

Este tipo especial de colas tienen las mismas operaciones que las colas, pero con la
condicin de que los elementos se atienden en orden de prioridad.

Ejemplos de la vida diaria seran la sala de urgencias de un hospital, ya que los enfermos
se van atendiendo en funcin de la gravedad de su enfermedad.

Estas colas se dividen en dos tipos:

*Colas de prioridades con ordenamiento ascendente: en ellas los elementos se insertan


de forma arbitraria, pero a la hora de extraerlos, se extrae el elemento de menor prioridad.

*Colas de prioridades con ordenamiento descendente: son iguales que las colas de
prioridad con ordenamiento ascendente, pero al extraer el elemento se extrae el de mayor
prioridad.
Consideremos el siguiente ejemplo como un numero de 15 hijos y se ordena segur la
prioridad de: como es mayor que, se intercambia con este, y como es mayor que, tambin
se intercambia con este, y el proceso termina porque es menor que.

Doble Cola (bicola): es un tipo de cola especial que permiten la insercin y eliminacin
de elementos de ambos extremos de la cola. Puede representarse a partir de un vector y
dos ndices, siendo su representacin ms frecuente una lista circular doblemente
enlazada. Todas las operaciones de este tipo de datos tienen coste constante.

Existen
dos tipos
de la doble cola:
Doble cola de entrada restringida: acepta inserciones solo al final de la cola.
Doble cola de salida restringida: acepta eliminaciones solo al frente de la cola.

Representacin de las Colas.


Se las puede representar por listas enlazadas o por arrays
C= Q (1), Q(2)......., Q(n).
En cualquier caso se necesitan dos punteros
frente (f)

final (r)

Y la lista o array de n elementos (LONGMAX) Parte no utilizada de la lista Cola parte no


utilizada de la lista Para ver el grfico seleccione la opcin "Descargar" del men superior.

Representacin de una Cola, mediante un array.

10 26 119 48
0 4
Frente final
Representacin de una Cola mediante una lista enlazada

1234

100 264

Frente final
Las operaciones que se pueden realizar con una cola son:
1. Acceder al primer elemento de la Cola

2. Aadir un elemento al final de la Cola

3. Eliminar el primer elemento de la Cola

4. Vaciar una Cola

5. Verificar estado de la Cola: vaca, Llena.

Caractersticas
secuencia de elementos en la que la operacin de insercin push se realiza por
un extremo y la operacin de extraccin pop por el otro.
Las colas se caracterizan por ser circulares, de prioridad, bicocas de entrada
restringida y de salida restringida.
Permiten aadir un elemento, eliminar un elemento y devolver un elemento
primario de entrada.
el primer elemento en entrar ser tambin el primero en salir.

Elementos
Cliente: Es todo individuo de la poblacin potencial que solicita servicio como por ejemplo
una lista de trabajo esperando para imprimirse.

Fuente de entrada: Una caracterstica de la fuente de entrada es su tamao. El tamao


es el nmero total de clientes que pueden requerir servicio en determinado momento.
Puede suponerse que el tamao es infinito o finito.

Disciplina de la cola: La disciplina de la cola se refiere al orden en el que se seleccionan


sus miembros para recibir el servicio. Por ejemplo, puede ser: FIFO: primero en entrar,
primero en salir. LIFO: atender primero al cliente que ha llegado el ltimo. RSS:
selecciona los clientes de manera aleatoria.

Capacidad de la cola: Es el mximo nmero de clientes que pueden estar haciendo cola
(antes de comenzar a ser servidos). De nuevo, puede suponerse finita o infinita

Mecanismo de servicio: El mecanismo de servicio consiste en una o ms instalaciones


de servicio, cada una de ellas con uno o ms canales paralelos de servicio, llamados
servidores.

Redes de colas. Sistema donde existen varias colas y los trabajos fluyen de una a otra.
Por ejemplo: las redes de comunicaciones o los sistemas operativos multitarea.

Cola: Una cola se caracteriza por el nmero mximo de clientes que puede admitir. Las
colas pueden ser finitas o infinitas.

El proceso de servicio: Define cmo son atendidos los clientes.

Diferencias

La pila es un sistema lifo (last In first out),sea lo que entra de ultimo a la lista ser
el primero en salir mientras que la cola en un fifo (first In first out )en la que el
primero en entrar ser el primero en salir
La diferencia con las pilas es en el modo de entrada / salida de datos; en las colas
se realizan las inserciones al final de la lista, no al principio.
Por eso, se usan para almacenar datos que necesitan ser procesados segn el orden de
llegada.
C= C (1), C (2),......., C(N)
Las eliminaciones se realizan al principio de la lista frente (front), y las inserciones se
realizan en el otro extremo final (rear).
Para ver el grfico seleccione la opcin "Descargar" del men superior

Similitudes
Que son estructuras lineales los itms aaden y se eliminan en el mismo extremo.

Listas
Definicin.
Una lista es una estructura de datos lineal que se puede representar simblicamente
como un conjunto de nodos enlazados entre s. Las listas permiten modelar diversas
entidades del mundo real como por ejemplo, los datos de los alumnos de un grupo
acadmico, los datos del personal de una empresa, los programas informticos
almacenados en un disco magntico, etc.

Una LISTA es un conjunto ordenado de elementos homogneos, en la que no hay


restricciones de acceso, la introduccin y borrado de elementos puede realizarse en
cualquier posicin de LISTAS DEFINICIN borrado de elementos puede realizarse en
cualquier posicin de la misma.

Cuando hablamos de un conjunto ordenado, nos referimos a la disposicin de sus


elementos y no a su valor. Esto es que cada uno de ellos, salvo el primero y el ltimo,
tienen un anterior y un LISTAS DEFINICIN uno de ellos, salvo el primero y el ltimo,
tienen un anterior y un siguiente.

Por otro lado, al decir que los elementos de la lista son homogneos, queremos
decir que son del mismo tipo base, aunque sin establecer ninguna limitacin sobre
este tipo.
Se trata de una estructura dinmica, ya que su tamao cambia a medida que se
aaden y eliminan elementos de la misma.

Hay varios tipos de listas, las hay enlazadas, no enlazadas, ordenadas y no ordenadas.
Nosotros vamos a estudiar las listas enlazadas, tanto ordenadas como no ordenadas.

La diferencia que existe entre las listas enlazadas y las no enlazadas es que las
enlazadas utilizan punteros, es decir, asignacin dinmica de memoria, lo que optimiza la
gestin de la misma. Una lista no enlazada es un simple array, y por lo tanto es un bloque
contiguo de memoria, mientras que una lista enlazada es un conjunto de nodos que no
tienen por qu ocupar posiciones contiguas de memoria.

La diferencia entre listas ordenadas y no ordenadas es obvia, las ordenadas mantienen


cierto orden entre sus elementos. A partir de ahora nos centraremos en las listas
enlazadas no ordenadas.

Una lista es una sucesin de nodos en la que a partir de un nodo se puede acceder al que
ocupa la siguiente posicin en la lista. Esta caracterstica nos indica que el acceso a las
listas es secuencial y no indexado, por lo que para acceder al ltimo elemento de la lista
hay que recorrer los n-1 elementos previos (n es el tamao de la lista).

Para que un nodo pueda acceder al siguiente y la lista no se rompa en varias listas cada
nodo tiene que tener un puntero que guarde la direccin de memoria que ocupa el
siguiente elemento. De esta forma un nodo se podra representar esquemticamente as:

Estructura de un nodo: Informacin y puntero

En el campo informacin se almacena el objeto a guardar y el puntero mantendr la


conexin con el nodo siguiente.

De esta forma al ir aadiendo nodos se ira formando una sucesin de nodos


encadenados mediante punteros.

Estructura de una lista: Secuencia de nodos enlazados

Siguiente

Logo HCI
Caractersticas
La cantidad reservada de almacenamiento para la pila o la cola es fija. Vimos
pilas y colas alojadas en arreglos.
Problemas al insertar o eliminar elementos.
Una representacin secuencial, refleja el orden lgico de los elementos
fsicamente almacenados en la lista; el orden fsico y lgico son los mismos.
Solucin a los problemas de movimiento de los datos que se ha encontrado al
utilizar representaciones secuenciales.
Con la representacin no secuencial el orden lgico y el orden LISTAS
CARACTERSTICAS
Con la representacin no secuencial el orden lgico y el orden fsico de los
elementos no es necesario que sea el mismo.
El orden lgico se representa de tal forma que cada elemento apunta al
siguiente elemento, es decir, se encuentran ligados.
Elementos.
Una lista es una secuencia de elementos del mismo tipo, de cada uno de los cuales se
puede decir cul es su siguiente (en caso de existir).
Existen dos criterios generales de calificacin de listas:
Listas densas. Cuando la estructura que contiene la lista es la que determina la posicin
del siguiente: elemento. La localizacin de un elemento de la lista es la siguiente:

Est en la posicin 1 si no existe elemento anterior.


Est en la posicin N si la localizacin del elemento anteriores (N-1).

Listas enlazadas: La localizacin de un elemento es:

Estar en la direccin k, si es el primer elemento, siendo k conocido.


Si no es el primer elemento de la lista, estar en una direccin, j, que est
contenida en el elemento anterior.

Por la informacin utilizada para acceder a sus elementos:

Listas ordinales. La posicin de los elementos en la estructura la determina su


orden de llegada.

Listas calificadas. Se accede a un elemento por un valor que coincide con el de un


determinado campo, conocido como clave. Este tipo de listas se pueden clasificar
a su vez en ordenadas o no ordenadas por el campo clave.
Diferencias
La lista es una estructura de datos homognea y dinmica que va a estar formada por una
secuencia de elementos donde cada uno de ellos va seguido a otro o de ninguno.
Una cola se diferencia en que las operaciones de insercin y extraccin sigue el principio
entrar -de primero en salir

Similitudes
Que ambas estructuras se basan en diferentes rdenes.

Listas simples
Definicin
Las listas son estructuras de datos que permiten tener cierta flexibilidad en su manejo,
pueden crecer o acortarse segn se lo requiera, existen varias formas de implementar una
lista en Java en este caso se presenta un ejemplo en cdigo utilizando punteros mediante
la referencia a objetos.

Las listas bsicamente se forman del enlace de nodos los cuales funcionan como
contenedores para almacenar el valor y enlace al siguiente nodo.

Caractersticas
El ltimo nodo de la lista no apunta a ningn a ninguno (null).
Se accede a la lista mediante el primer nodo o tambin llamado inicio de la lista.
No tiene acceso aleatorio es decir para acceder a un valor se debe recorrer toda la
lista.
Una lista enlazada simple necesita una estructura con varios campos, los campos
que contienen los datos necesarios (nombre y telfono) y otro campo que contiene
un puntero a la propia estructura.

Este puntero se usa para saber dnde est el siguiente elemento de la lista, para
saber la posicin en memoria del siguiente elemento.

struct _agenda {
char nombre[20];
char telefono[12];
struct _agenda *siguiente;
};
Elementos
En una lista los elementos son contiguos en lo que concierne al enlazado. En cambio,
mientras que en un array los elementos estn contiguos en la memoria.

en una lista los elementos estn dispersos. El enlace entre los elementos se hace
mediante un puntero. En realidad, en la memoria la representacin es aleatoria en funcin
del espacio asignado.

El puntero siguiente del ltimo elemento tiene que apuntar hacia NULL (el fin de la lista).
Para acceder a un elemento, la lista es recorrida comenzando por el inicio, el
puntero Siguiente permite el cambio hacia el prximo elemento.

El desplazamiento se hace en una sola direccin, del primer al ltimo elemento.


Si deseas desplazarte en las dos direcciones (hacia delante y hacia atrs) debers utilizar
las listas doblemente enlazadas.

Diferencias
Definir un tamao determinado el cual no poda modificarse posteriormente

Similitudes
no sepamos de antemano el tamao requerido para nuestra aplicacin

hay una gran cantidad de operaciones y manipulaciones de los datos dentro de las
estructuras

Listas doblemente ligadas


Definicin
Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces,
uno al nodo siguiente, y otro al anterior.

Las listas doblemente enlazadas no necesitan un nodo especial para acceder a ellas,
pueden recorrerse en ambos sentidos a partir de cualquier nodo, esto es porque a partir
de cualquier nodo, siempre es posible alcanzar cualquier nodo de la lista, hasta que se
llega a uno de los extremos.

El nodo tpico es el mismo que para construir las listas que hemos visto, salvo que tienen
otro puntero al nodo anterior:

Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces,
uno al nodo siguiente, y otro al anterior. Las listas doblemente enlazadas no necesitan un
nodo especial para acceder a ellas, pueden recorrerse en ambos sentidos a partir de
cualquier nodo, esto es porque a partir de cualquier nodo, siempre es posible alcanzar
cualquier nodo de la lista, hasta que se llega a uno de los extremos.

El nodo tpico es el mismo que para construir las listas que hemos visto, salvo que tienen
otro puntero al nodo anterior:
struct nodo {
int dato;
struct nodo *siguiente;
struct nodo *anterior;
};

Existen dos tipos de listas doblemente ligadas:


Listas dobles lineales. En este tipo de lista doble, tanto el puntero izquierdo del
primer nodo como el derecho del ltimo nodo apuntan a NIL.
Listas dobles circulares. En este tipo de lista doble, el puntero izquierdo del
primer nodo apunta al ltimo nodo de la lista, y el puntero derecho del ltimo
nodo apunta al primer nodo de la lista.

Caractersticas
Recorrido secuencial en ambas direcciones
Mayor ocupacin: 2 referencias en cada nodo
Insercin y borrado: Modificar ms referencias
Borrado ms simple: Localizado el elemento a borrar se accede al anterior /
siguiente
Elementos.
El puntero anterior del primer elemento debe apuntar hacia NULL (el inicio de la
lista).
El puntero siguiente del ltimo elemento debe apuntar hacia NULL (el fin de la
lista).
Para acceder a un elemento, la lista puede ser recorrida en ambos sentidos:
comenzando por el inicio, el puntero siguiente permite el desplazamiento hacia el
prximo elemento.
comenzando por el final, el puntero anterior permite el desplazamiento hacia el
elemento anterior.
Resumiendo, el desplazamiento se hace en ambas direcciones, del primer al
ltimo elemento y/o del ltimo al primer elemento.

Diferencias
Las listas doblemente enlazadas son estructuras de datos semejantes a las listas
enlazadas simples.

La asignacin de memoria es hecha al momento de la ejecucin.

En cambio, en relacin a la listas enlazada simple el enlace entre los elementos se hace
gracias a dos punteros (uno que apunta hacia el elemento anterior y otro que apunta
hacia el elemento siguiente).

Similitudes
Una lista doblemente enlazada es una lista lineal en la que cada nodo tiene dos enlaces,
uno al nodo siguiente, y otro al anterior. Y son similares a las doblemente ligadas a
consideracin que son ms complejas

Listas simples circulares


Definicin
La lista circular es una especie de lista enlazada simple o doblemente enlazada, pero que
posee una caracterstica adicional para el desplazamiento dentro de la lista: esta no tiene
fin.
Para que la lista sea sin fin, el puntero siguiente del ltimo elemento apuntar hacia
el primer elemento de la lista en lugar de apuntar al valor NULL, como hemos visto en el
caso de listas enlazadas simples o doblemente enlazadas.

En las listas circulares, nunca se llega a una posicin en la que ya no sea posible
desplazarse. Cuando se llegue al ltimo elemento, el desplazamiento volver a comenzar
desde el primer
elemento.

Caractersticas
Pueden ser fifo o lifo.
Es similar a listas simples pero el ltimo apunta al primero

Elementos
Consideramos los dos primeros casos como uno solo
Lista con ms de un nodo
El primer paso es seguir que la lista apunte al nodo anterior al que queremos
eliminar. Esto se consigue haciendo que lista valga lista ->siguiente, mientras
lista --> siguiente apunte a nodo.
Hacemos que lista-->siguiente apunte a nodo --> siguiente.
Eliminamos el nodo.

Elemento desencolado o eliminado.

En el siguiente Apple que se muestra como ejemplo se muestran las direcciones de cada
nodo correspondiente. Se aclara que las direcciones mostradas no son completas, sino
solamente las 4 ltimas direcciones.

Las direcciones que estn en cuadro de bordes anaranjados son las direcciones del
primer nodo y del ltimo, como se puede observar la direcciones siguiente del ultimo nodo
apunta a la direccin del primer nodo por tratarse de listas simples circulares.

Las direcciones que estn encerradas dentro de un crculo de color verde lechuga son las
direcciones actuales de cada nodo. Y las encerradas dentro de un crculo verde fuerte son
las direcciones siguientes de cada nodo correspondiente.
Este Apple tiene un mximo de agregacin de 6 nodos por causas de tamao de la pgina
web.

El Apple muestra las formas en que las listas se ven afectadas con cada proceso. Adems
muestra los punteros de direccin, o sea haca donde est apuntando. Encima y debajo
de los nodos estn las direcciones, los de arriba son las direcciones de los nodos en si, y
los de abajo son las direcciones de los siguientes nodos.

Diferencias
Otra diferencia notable en listas circulares es que, como el ltimo nodo apunta al
primero, entonces NO existe NINGUN nodo que apunte a NULL. Hay que tomar muy en
cuenta esto en listas circulares, sino podemos encontrarnos con un ciclo infinito del que
no podremos salir y nuestro programa no servir.

Similitudes
Las dos tienen las mismas para funcin para desplazarse y para comenzar desde el
primer elemento.

Listas doblemente circulares


Definicin
La lista circular doble es una especie de lista enlazada doblemente enlazada, pero que
posee una caracterstica adicional para el desplazamiento dentro de la lista, sta no tiene
fin y tiene 2 apuntadores a si misma.

Para que la lista sea sin fin, el puntero siguiente del ltimo elemento apuntar hacia el 1er
elemento y el puntero anterior del primer elemento apuntara hacia el ltimo elemento de
la lista en lugar de apuntar al valor NULL, como hemos visto en el caso de listas
enlazadas simples o doblemente enlazadas.
En las listas circulares dobles, nunca se llega a una posicin en la que ya no sea posible
desplazarse.
Cuando se llegue al ltimo elemento, el desplazamiento volver a comenzar desde el
primer elemento.
Caractersticas
Como en una lista doblemente circulares las inserciones y eliminaciones pueden ser
hechas desde cualquier punto con acceso a algn nodo cercano

Aunque estructuralmente una lista circular doblemente circular no tiene ni principio ni fin
un puntero de acceso externo puede establecer el nodo apuntando que est en la cabeza
o al nodo cola y as mantener el orden tan bien como en una lista doblemente enlazada.

Elementos
Insertar: inserta un nodo con dato x en la lista, pudiendo realizarse esta insercin al
principio o final de la lista o bien en orden.

Eliminar: elimina un nodo de la lista, puede ser segn la posicin o por el dato.

Buscar: busca un elemento en la lista.

Localizar: obtiene la posicin del nodo en la lista.

Imprimir: imprime los elementos de la lista.

Diferencias
En las listas circulares, nunca se llega a una posicin en la que ya no sea posible
desplazarse. Y las doblemente circulares el desplazamiento dentro de la lista, sta no
tiene fin y tiene 2 apuntadores a s misma.

Similitudes
Las dos tienen las mismas para funcin para desplazarse y para comenzar desde el
primer elemento. Ya que pesen la misma funcin.
Referencias

You might also like