You are on page 1of 35

Tema 3

Estructura de datos lineales

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.1 Introducción

Las estructuras de datos dinámicas son una colección de elementos (también


llamados nodos) que normalmente son registros con la particularidad que crecen a
medida que se ejecuta un programa.
Al contrario de los arreglos (estructuras de datos estáticas) que pueden almacenar un
número fijo de elementos, una estructura dinámica de datos se amplía y se contrae
durante la ejecución del programa. Dicho de otra manera, este tipo de estructuras no
reserva una zona estática (fija) de memoria para su almacenamiento, sino que el
espacio ocupado crece o decrece a medida que evoluciona (se ejecuta) la estructura
y su programa correspondiente.
Las estructuras de datos dinámicas se puede dividir en dos grandes grupos

LINEALES NO LINEALES

Pilas Árboles
Colas Grafos
Listas

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.1 Introducción

Las estructuras de datos dinámicas son extremadamente flexibles, de allí que son
muy utilizadas para el almacenamiento de datos que cambian constantemente.
Además es relativamente fácil añadir información creando nuevos nodos o
insertándolo entre dos existentes. La modificación de información sobre estas
estructuras es relativamente fácil tanto en la modificación como en la eliminación
de un nodo existente.
En este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas,
colas y listas.

Una estructura estática de datos es aquella donde sus diferentes valores


pueden cambiar pero no su estructura dado que ella es fija. Su estructura se
especifica en el momento que se escribe el programa y no puede ser
modificada por el mismo.

Una estructura dinámica de datos, por el contrario puede modificar su


estructura mediante el programa, puede modificar su tamaño añadiendo o
eliminando nodos mientras está en ejecución el programa.

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Listas
Una lista es un conjunto ordenado de elementos de un tipo, la misma puede variar
el número de elementos.

Lista L: L1, L2, L3, L4,....., LN donde LN es un elemento de la lista.

Cada elemento de la lista – a excepción del primero – tiene un único predecesor y


a su vez cada elemento – a excepción del último – tiene un único sucesor.

Los elementos de una lista lineal normalmente se almacenan uno detrás de otro en
posiciones consecutivas de memoria, por ejemplo las entradas en una guía
telefónica. Cuando una lista se almacena en la memoria principal de una
computadora lo está haciendo en posiciones sucesivas de memoria; cuando se
almacena en cinta magnética, los elementos sucesivos se presentan en sucesión
en la cinta.
Esta asignación de memoria toma el nombre de almacenamiento secuencial, en
apartados posteriores veremos el tipo de almacenamiento encadenado o enlazado.

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Listas
3.2.1.1 Representación de listas
Uno de los medios mas clásicos de realizar una lista lineal es mediante un vector,
donde los elementos se sitúan en posiciones físicamente contiguas. Su
representación

LISTA LINEAL
1 2 3 N-1 N

Vector L ..........

L1 L2 L3 L n-1 Ln

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Listas
3.2.1.2 Operaciones
Las operaciones que pueden llevarse a cabo en una lista son, entre otras:
• Recorrido de la lista: Consiste en visitar todos o varios de los elementos que
formen la lista.
• Inserción de un elemento: Consiste en añadir un nuevo elemento al arreglo. Esta
operación tiene dos modalidades: a) añadir al final, b) añadir en el interior del
arreglo, lo que provoca desplazamiento de algunos elementos.
• Eliminación de un elemento: Esta operación consiste en borrar un elemento
deseado y desplazar a todos los elementos siguientes al que se desea borrar.
• Búsqueda de un elemento: Buscar la posición de un elemento que posee un valor
determinado.

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Listas
3.2.1.3 Listas enlazadas
Las listas enlazadas se presentan como alternativas a los almacenamientos
contiguos y la misma se logra utilizando punteros o enlaces para referenciar a
elementos de una lista lineal, los cuales almacenan la dirección del elemento
sucesor – que no necesariamente debe ser adyacente o contiguo físicamente.
Esta metodología recibe el nombre de almacenamiento enlazado o encadenado.
Un elemento en la lista enlazada se denomina nodo y contiene dos partes:
Información asociada al elemento. Será del tipo de datos que se quiera almacenar
en la lista.
Puntero: Campo de enlace que contiene la dirección del próximo elemento de la
lista. Se utiliza para establecer el enlace con otro nodo de la lista.

INFORMACION PUNTERO

Contiene la dirección del


siguiente nodo de la lista
Contiene información
tales como : nombre,
dirección, telefóno, etc.-

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Listas
3.2.1.3 Listas enlazadas
Para el último nodo de la lista el campo PUNTERO será vacío (NIL) y será una
dirección no válida.
Al tener un campo PUNTERO, no es necesario almacenar los nodos en espacios
contiguos.
El comienzo de la lista contiene una variable puntero con un nombre especial:
INICIO que contiene la posición del primer nodo de la lista.

GARCIA PEREZ FERNANDEZ nil

INICIO

Puntero o enlace del


información del nodo 1 nodo 2

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Listas
3.2.1.4 Listas circulares
Las listas circulares tienen como característica que el último elemento de la misma
apunta al primero.

INICIO

Las listas enlazadas vistas en el apartado anterior no permiten, a partir de un


elemento, acceder directamente a cualquiera de los elementos que lo preceden.
En las listas circulares en lugar de almacenar un puntero NULO en el campo
SIGUIENTE del último elemento de la lista, se hace que el último elemento
apunte al primero o al principio de la lista. Este tipo de estructura es lo que se
conoce con el nombre de lista enlazada circular o lista circular, también este tipo
de estructuras recibe el nombre de anillo.

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Listas
3.2.1.4 Listas circulares
Las listas circulares presentan ventajas con respectos a la vistas en el apartado
anterior:
Dado un nodo cualquiera, se puede recorrer toda la lista completa, en cambio
en las listas enlazadas solo se las puede recorrer por completo partiendo de su
primer nodo.
La concatenación y/o división de listas es más eficaz en esta estructura.
Pero por el contrario se puede observar inconvenientes en listas circulares:
Se pueden producir bucles infinitos.

La forma de evitar este inconveniente es colocando un nodo especial llamado


cabecera de la lista. Los nodos de cabecera pueden tener un valor especial en el
campo INFORMACIÓN que no es válido como datos de otros elementos (zona
sombreada de la figura), puede tener también un indicador o bandera (flag) que
indique cuando es nodo de cabecera.
CABECERA

Las operaciones en listas circulares son similares a las operaciones en listas lineales.
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales
3.2.1 Pilas
Una pila es una lista de elementos a la cual se puede insertar o eliminar alguno
solo por uno de los extremos, por lo tanto, los elementos de una pila serán
eliminados en orden inverso al que se insertaron. Es decir, el último elemento que
se introduce en la pila es el primero que se saca.
Con analogía con la vida real, por ejemplo puede verse una estructura de pila de
platos, es de suponer que el cocinero, si necesita un plato limpio, tomará el que
está encima de todos, que es el último que se colocó en la pila. Otros ejemplos
de pilas son las latas en un supermercado dispuestas de distintas maneras

Debido al orden en el cual se insertan o


eliminan elementos de una pila, a esta
estructura también se la conoce como
estructura
LIFO (last - In, First - Out: ultimo en
a) Pila de Platos b) Pila de latas c) Pila de latas entrar, primero en salir)

Las pilas pertenecen al grupo de estructuras de datos lineales, ya que los


componentes ocupan lugares sucesivos en la estructura.
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales
3.2.1 Pilas
3.2.2.1 Representación de pilas
Las pilas no son estructuras fundamentales de datos, es decir, no están definidos
como tales en los lenguajes de programación, como lo están, por ejemplo los
arreglos. Se pueden representar mediante el uso de:
 Arreglos
 Listas Enlazadas
Aquí se utilizarán ARREGLOS, por lo que se deberá definir el tamaño máximo de
la pila y además una variable auxiliar a la que se denominará TOPE o CIMA,
que será un apuntador al último elemento insertado en la pila.
PILA

MAXIMO N

..... PILA

TOPE 4444 4 AAA BBB CCC DDD .....

3333 3 1 2 3 4 N-1 N

2222 2 TOPE MAXIMO

1111 1

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Pilas
3.2.2.1 Representación de pilas
se representan ejemplos de pila llena (a), pila con algunos elementos (b) y pila
vacía (c) PILA PILA PILA

TOPE = MAX 9999 N MAX N MAX N

..... ..... .....

4444 4 4 4

3333 3 TOPE 3333 3 3

2222 2 2222 2 2

1111 1 1111 1 1

TOPE = 0

b) Pila con algunos


a) Pila llena c) Pila vacía
elementos

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Pilas
3.2.2.1 Representación de pilas Al utilizar esta estructura
con arreglos, se debe tener
PILA PILA PILA en cuenta el tamaño
TOPE = MAX 9999 N MAX N MAX N máximo de la pila; cuando la
variable auxiliar TOPE
..... ..... .....
llegue al máximo definido,
4444 4 4 4 no se podrá insertar mas
elementos. Una vez que la
3333 3 3333 3 3
pila esta llena
TOPE

2222 2 2222 2 2 (TOPE=MAX), y si se


intenta insertar un nuevo
1111 1 1111 1 1
valor, ocurrirá un error
TOPE = 0
conocido con el nombre de
a) Pila llena
b) Pila con algunos
c) Pila vacía desbordamiento K
elementos
(OVERFLOW).

Por ejemplo en la figura donde TOPE = MAX si se quisiera insertar otro elemento, se
tendría un error de desbordamiento. La pila está llena y el espacio reservado de memoria
es fijo, no puede en este caso ni expandirse ni contraerse.
Como una primera solución a este tipo de errores se puede definir pilas de gran tamaño,
pero esto resulta costoso e ineficiente uso de la memoria si solo se ocupan algunos
elementos de la misma.
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales
3.2.1 Pilas
3.2.2.1 Representación de pilas
Otra alternativa que existe como solución es definir dos pilas de N elementos en
un solo arreglo de 2*N elementos, esto se conoce con el nombre de espacios
compartidos de memoria. Supongamos que se necesitan dos pilas de N
elementos máximos cada una, se definirá un solo arreglo de 2 * N elementos
en lugar de dos arreglos de N elementos cada uno.
PILA 1 PILA 2

..... .....

1 2 3 N N+1 2 N -1 2N

TOPE 1 TOPE 2

Representación de pilas en espacios compartidos

En la figura la PILA 1 ocupará desde la posición 1 en adelante, mientras que la


PILA 2 ocupará desde el espacio 2N hacia atrás (2N-1, 2N-2, ....).

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Pilas
3.2.2.1 Representación de pilas
Puede ocurrir que en algún punto del proceso la PILA 1 necesitara mas de N
espacios y en ese momento la PILA 2 no tuvieran sus N lugares ocupados, en
consecuencia se podría seguir agregando elementos a la PILA 1 sin caer en
el error de desbordamiento (ver figura). El mismo tratamiento se haría en la
PILA 2 si esta necesitara mas lugar.
PILA 1 PILA 2

En la figura (a) La PILA 1 tiene


(a) ..... .....
más de N elementos y la PILA 2
1 2 3 N N+1 N+2 2 N -1 2N tiene menos de N elementos.

TOPE 1 TOPE 2

PILA 1 PILA 2

(b) ..... .....


En la figura (b) ocurre lo contrario,
la PILA 2 tiene más de N
1 2 3 N-1 N N+1 2 N -1 2N
elementos y la PILA 1 tiene
menos de N elementos.
TOPE 1 TOPE 2

Existe otro tipo de error que se lo conoce con el nombre de subdesbordamiento (underflow) es
cuando se intenta eliminar un elemento de una pila vacía.

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Pilas
3.2.2.2 Operaciones
Las operaciones más elementales que pueden realizarse con una estructura de
pila son:
a) Poner un elemento (Push)
b) Quitar un elemento (Pop).
La realización de cualquiera de las dos operaciones (inserción o extracción) se
realizará siempre por la parte superior.
Los algoritmos genéricos para agregar o quitar elementos en una pila son los
siguientes:

PONE (PILA, MAX, TOPE, DATO) QUITA (PILA, TOPE, DATO)


Si TOPE < MAX (Verifica que haya espacio libre) Si TOPE > 0 (Verifica que la pila no está vacía)
entonces Entonces
TOPE = TOPE + 1 (actualiza TOPE) DATO = PILA (TOPE)
PILA (TOPE) = DATO TOPE = TOPE - 1
sino Sino
escribir desbordamiento Imprimir “Subdesbordamiento”
Fin_si Fin_si

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Pilas
3.2.2.2 Operaciones COMENZAR

..................

PONE (PILA, MAX, TOPE, DATO)


Si TOPE < MAX (Verifica que haya espacio libre) TOPE < MAX NO
"DESBORDAMIENTO"

entonces
TOPE = TOPE + 1 (actualiza TOPE) SI

PILA (TOPE) = DATO TOPE = TOPE + 1

sino
escribir desbordamiento PILA(TOPE) = DATO

Fin_si
AGREGA ELEMENTOS A LA PILA

COMENZAR

QUITA (PILA, TOPE, DATO)


Si TOPE > 0 (Verifica que la pila no está vacía) ..................

Entonces "SUBDESBORDAMIENTO"

DATO = PILA (TOPE) TOPE > 0 NO

TOPE = TOPE - 1 SI

Sino DATO = PILA(TOPE)

Imprimir “Subdesbordamiento”
Fin_si
TOPE = TOPE - 1

QUITA ELEMENTOS A LA PILA

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Pilas
3.2.2.2 Operaciones : Ejemplo
Si se coloca (push) los 6 primeros meses del año en una pila la estructura
quedaría como muestra la figura a). Su TOPE quedaría en 6 (Junio). En
cambio si se quitara el mes junio, el TOPE apuntaría al mes Mayo (figura b)).
PILA PILA

MAX MAX

..... .....

TOPE JUNIO 6

MAYO 5 TOPE MAYO 5

ABRIL 4 ABRIL 4

MARZO 3 MARZO 3

FEBRERO 2 FEBRERO 2

ENERO 1 ENERO 1

a) Agregar b) Quitar

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.1 Pilas
3.2.2.2 Operaciones : Ejemplo
Una pila tiene cargada los 6 primeros meses del año y se desea completar con
los meses restantes. COMENZAR

TOPE = 6

TOPE < 12 No PARAR

SI
En pseudocódigo:
Comenzar
INGRESAR TOPE = 6
MES
Mientras TOPE < 12
Ingresar MES
TOPE = TOPE + 1 TOPE = TOPE +1
PILA(TOPE) = MES
Fin_Mientras
PILA (TOPE) = MES Parar
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales
3.2.1 Pilas
3.2.2.2 Operaciones : Ejemplo
Una pila tiene cargada los 12 meses del año y se desea quitar los últimos 4
meses del año.COMENZAR

TOPE = 12

CON = 0

CON = 4 SI PARAR
En pseudocódigo:
Comenzar
NO
TOPE = 12
CON = 0
DATO = PILA (TOPE)
Mientras CON = 4
DATO = PILA(TOPE)
TOPE = TOPE - 1
TOPE = TOPE – 1
CON = CON + 1
Fin_Mientras
CON = CON + 1 Parar
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales
3.2.3 Colas
Las colas son otro tipo de estructura de datos, similar a las pilas, pero se
diferencian de ellas en la forma de insertar/eliminar elementos.

Una cola es entonces una lista de elementos en la que estos se introducen por
un extremo(final) y se eliminan por otro (frente). La eliminación se realiza en el
mismo orden en que fueron insertados, por lo tanto el primer elemento
introducido será el primero en ser eliminado.
Por esta característica las colas reciben el nombre de

FIFO (Fist-in, First-Out: Primero en entrar, primero en salir)

Por esta característica este tipo de estructura se utiliza para almacenar datos que
necesitan ser procesados según el orden de llegada.

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.3 Colas
En la vida real encontramos numerosos casos de colas: personas esperando un
autobus, personas que esperan ser atendidas en un banco, autos que
esperan señal de semáforo, entre otros. En todos estos casos (personas,
autos) el primero que llega será el primero en salir.

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.1 Representación
Existen casos de colas llenas, vacías o con algunos elementos, estos se ven
representados en la figura

COLA COLA FRENTE = FINAL = 0 COLA

FRENTE 1111 1 FRENTE 1111 1 1

2222 2 2222 2 2

3333 3 FINAL 3333 3 3

4444 4

..... ..... .....

FINAL = MAX 9999 N MAX 9999 N MAX N

b) Cola con algunos


a) Cola llena c) Cola vacía
elementos

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.2 Operaciones
Las operaciones que podemos realizar con colas son:
• insertar un elemento
• eliminar un elemento de la cola.
Recordando la característica FIFO de las colas, la inserción se realiza por el
FINAL de la cola, mientras que la eliminación se realiza por el FRENTE.
Los algoritmos genéricos para agregar o quitar elementos de una cola son los
siguientes:
PONE (COLA, MAX, FRENTE, FINAL, DATO) QUITA (COLA, MAX , FRENTE, FINAL, DATO)

Si FINAL < MAX (Verifica que haya espacio libre) Si FRENTE <> 0 (Verifica que la cola no está vacía)
entonces Entonces
FINAL = FINAL + 1 (actualiza FINAL) DATO = COLA (FRENTE)
COLA (FINAL) = DATO Si FRENTE = FINAL (si hay un solo elemento)
Si FINAL = 1 {se insertó el primer elemento de la pila} Entonces
Entonces FRENTE = 0 (indica cola vacía)
FRENTE = 1 FINAL = 0
Fin_si Sino
sino FRENTE = FRENTE + 1
Imprimir “Subdesbordamiento” Fin_si
Fin_si Sino
escribir Subdesbordamiento
Fin_si
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales
3.2.3 Colas

COMENZAR COMENZAR

.................. ..................

"DESBORDAMIENTO "SUBDESBORDAMIENTO
FINAL < MAX NO COLA LLENA" FRENTE <> 0 NO COLA VACIA"

SI SI

FINAL= FINAL + 1 DATO = COLA(FRENTE)

COLA(FINAL) = DATO
FRENTE = FINAL Si FRENTE = 0

No

FINAL = 1 Si FRENTE = 1 FINAL = 0


FRENTE = FRENTE + 1

No

AGREGA ELEMENTOS EN LA COLA QUITA ELEMENTOS DE LA COLA

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.2 Operaciones: Ejemplo
Si se colocan los 6 primeros meses del año en una cola, la estructura quedaría
como muestra la figura a). En este caso su MAXIMO sería de 12 (Diciembre) y
su FINAL en 6. Caso b): En cambio si se quitara el mes ENERO, el FINAL
apuntaría al elemento 6 y el FRENTE al 2. Como tercer opción - caso c) – se
realizan las dos operaciones juntas (a partir del caso a), por un lado se quita el
primer mes - FRENTE = 2 – y se agrega el mes de Julio FINAL = 7.
COLA COLA COLA

FRENTE ENERO 1 1 1

FEBRERO 2 FRENTE FEBRERO 2 FRENTE FEBRERO 2

MARZO 3 MARZO 3 MARZO 3

6 6
ABRIL ABRIL ABRIL 4

MAYO 5 MAYO 5 MAYO 5

FINAL JUNIO 6 FINAL JUNIO 6 JUNIO 6

..... ..... FINAL JULIO 7

MAX 12 MAX 12 .....

MAX 12
a) Agregar b) Quitar
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
c) Agregar y Quitar
3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.2 Operaciones: Ejemplo
COMENZAR

Pone en la cola los 6 primeros


meses del año FRENTE = 0
FINAL = 0
MAX = 12

Comenzar COLA (K)


FRENTE = 0 K=1,12

FINAL = 0
MAX = 12
Ingresar COLA
INGRESAR MES
Hasta FINAL = 6
FINAL = FINAL + 1
COLA(FINAL) = MES FINAL = FINAL + 1

Fin_hasta
Parar
COLA(FINAL) = MES

FINAL = 6 SI PARAR

NO

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.2 Operaciones: Ejemplo COMENZAR

Saca de la cola el primer mes

FRENTE = 1
FINAL = 6
MAX = 12

Comenzar
FRENTE = 1
FINAL = 6
MAX = 12 COLA (K)
K=1,12
Ingresar COLA
DATO = COLA(FINAL)
FRENTE = FRENTE + 1
Parar
DATO = COLA(FRENTE)

FRENTE = FRENTE + 1

PARAR

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.2 Operaciones: Ejemplo
Una cola de los días de la semana cargada como muestra en la figura Cola
Original. En el caso a) de la figura, eliminamos los elementos desde lunes al
viernes. En el caso b) a continuación agregamos el día domingo. Y en el caso c)
a continuación se elimina el día sábado.
COLA COLA COLA COLA

LUNES 1 1 1 1 En el ejemplo representado las colas


quedan de la siguiente manera:
MARTES 2 2 2 2 Luego de eliminar los días lunes,
martes, miércoles, jueves y viernes
MIERCOLES 3 3 3 3 Luego de agregar el día domingo
6 6
Luego de quitar el día sábado
JUEVES 4 4

VIERNES 5 5 5 5

SABADO 6 FRENTE = FINAL SABADO 6 FRENTE SABADO 6 6

FRENTE=FINAL
7 MAX 7 FINAL= MAX DOMINGO 7 = MAX
DOMINGO 7

Cola Original a) Quitar b) Agregar y Quitar C) Quitar

Ya no se podrá agregar un nuevo elemento, dado que FINAL = MAX a pesar de que – como
muestra el caso c) – hay lugar disponible en la cola. En este caso estamos en presencia de un
conflicto: ¿Cómo puede ser que habiendo espacio no se pueda agregar elementos?.
Evidentemente esta situación nos muestra el mal uso de la memoria disponible este tipo de
estructura; pero este inconveniente es superado manejando colas circulares.
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.3 Colas circulares
Una cola circular es aquella en la que el elemento primero sigue al elemento último,
es decir, el elemento anterior al primero es el último. Este tipo de estructura
obliga a dejar siempre una posición libre para separar el principio del final, pero
evidentemente siempre existirá la limitación de que pueda llenarse
completamente la cola.
La figura muestra distintas situaciones de una cola circular.
COLA CIRCULAR COLA CIRCULAR COLA CIRCULAR

1 1 FINAL P3 1

FRENTE B2 2 2 2

D4 3 3 3

6
Z1 FRENTE Z1 4 FRENTE Z1 4

F4 5 F4 5 F4 5

G6 6 G6 6 G6 6

FINAL A1 7 FINAL A1 7 A1 7

a) Frente es menor b) Frente es menor c) Frente es mayor


que Final que Final que Final

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.3 Colas circulares
Esta figura ilustra como se ubican los punteros FRENTE y FINAL durante las
operaciones de inserción y eliminación. En el caso a) la cola tiene algunos
elementos y en este caso el Frente < Final. En el caso b) Se han eliminado dos
elementos de la cola y el puntero frente quedó en 4. En el caso c) Se insertaron
elementos (P3) que como en este caso FINAL=MÁXIMO se llevó el primer
apuntador a la posición que estaba vacía (FINAL = 1). De esta manera se hace
un uso mas eficiente de la memoria disponible, ya que al eliminar un elemento
esa casilla de la cola queda disponible para futuras inserciones.
COLA CIRCULAR COLA CIRCULAR COLA CIRCULAR

1 1 FINAL P3 1

FRENTE B2 2 2 2

D4 3 3 3

6
Z1 FRENTE Z1 4 FRENTE Z1 4

F4 5 F4 5 F4 5

G6 6 G6 6 G6 6

FINAL A1 7 FINAL A1 7 A1 7

a) Frente es menor b) Frente es menor c) Frente es mayor


que Final que Final que Final

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.3 Colas circulares: se ilustran distintos casos que pueden ocurrir en las colas
circulares a) COLA CIRCULAR - Estado Inicial

Y6 X1 Z1 F4 G6 A1

1 2 3 4 5 6 7

FRENTE FINAL

b) COLA CIRCULAR: Luego de insertar un elemento (Cola llena)

B4 Y6 X1 Z1 F4 G6 A1

1 2 3 4 5 6 7

FINAL FRENTE

c) COLA CIRCULAR: Luego de eliminar elementos

B4 A1

1 2 3 4 5 6 7

FINAL FRENTE

d) COLA CIRCULAR: Luego de eliminar el primer elemento (frente), se actualizan


los punteros y FRENTE = FINAL

B4

1 2 3 4 5 6 7

FRENTE = FINAL

e) COLA CIRCULAR: Cola vacía luego de eliiminar el último elemento

1 2 3 4 5 6 7
frente = final = 0

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.4 Doble cola
Existe una variante de la cola simple desarrollada anteriormente y es la doble cola o
bicola. Es una cola bidireccional ya que sus elementos pueden ser insertados o
eliminados por cualquiera de los extremos: FRENTE o FINAL. La doble cola se
representa como se muestra en la figura

DOBLE COLA
FRENTE FINAL

1 2 3 MAX

Las dos flechas de cada extremo indican que se pueden realizar las operaciones de
inserción y eliminación.

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.


3.2 Estructuras de datos lineales
3.2.3 Colas
3.2.3.4 Doble cola

Las variantes que podemos encontrar son :

Doble cola de entrada restringida: son las que aceptan inserciones solo al final de la
cola permitiendo que sus eliminaciones se realicen por cualquiera de los dos
extremos.

Doble cola de salida restringida: acepta eliminaciones solo al frente de la cola mientras
que las inserciones se pueden hacer por cualquiera de los dos extremos.
Doble Cola de entrada restringuida
FRENTE FINAL

1 2 3 MAX

Doble Cola de salida restringuida


FRENTE FINAL

1 2 3 MAX

J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.

You might also like