Upload
buinguyet
View
214
Download
0
Embed Size (px)
Citation preview
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
Estructura de datos lineales
Tema 3
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
ÁrbolesGrafos
PilasColasListas
NO LINEALESLINEALES
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 lineales3.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 lineales3.2.1 Listas
3.2.1.1 Representación de listasUno 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 NN-1
Vector L
L 1 L 2 L 3 L n-1 L n
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Listas
3.2.1.2 OperacionesLas 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 lineales3.2.1 Listas
3.2.1.3 Listas enlazadasLas 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 delsiguiente nodo de la lista
Contiene informacióntales como : nombre,dirección, telefóno, etc.-
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Listas
3.2.1.3 Listas enlazadasPara 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.
INICIO
GARCIA PEREZ FERNANDEZ nil
Puntero o enlace delnodo 2información del nodo 1
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Listas
3.2.1.4 Listas circularesLas listas circulares tienen como característica que el último elemento de la misma
apunta al primero.
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.
INICIO
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Listas
3.2.1.4 Listas circularesLas 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 lineales3.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
a) Pila de Platos b) Pila de latas c) Pila de latas
Las pilas pertenecen al grupo de estructuras de datos lineales, ya que los componentes ocupan lugares sucesivos en la estructura.
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 entrar, primero en salir)
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Pilas
3.2.2.1 Representación de pilasLas 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 EnlazadasAquí 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.
.....
4444
3333
2222
1111
TOPE
MAXIMO
PILA
AAA BBB CCC DDD .....
PILA
TOPE MAXIMO
1 2 3 4 N-1 N
1
2
3
4
N
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Pilas
3.2.2.1 Representación de pilasse representan ejemplos de pila llena (a), pila con algunos elementos (b) y pila
vacía (c)
9999
.....
4444
3333
2222
1111
TOPE = MAX
PILA
1
2
3
4
N
.....
3333
2222
1111
MAX
PILA
1
2
3
4
N
TOPE
.....
MAX
PILA
1
2
3
4
N
TOPE = 0
a) Pila llena b) Pila con algunoselementos c) Pila vacía
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Pilas
3.2.2.1 Representación de pilas
9999
.....
4444
3333
2222
1111
TOPE = MAX
PILA
1
2
3
4
N
.....
3333
2222
1111
MAX
PILA
1
2
3
4
N
TOPE
.....
MAX
PILA
1
2
3
4
N
TOPE = 0
a) Pila llena b) Pila con algunoselementos c) Pila vacía
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.
Al utilizar esta estructura con arreglos, se debe tener en cuenta el tamaño máximo de la pila; cuando la variable auxiliar TOPE llegue al máximo definido, no se podrá insertar mas elementos. Una vez que la pila esta llena (TOPE=MAX), y si se intenta insertar un nuevo valor, ocurrirá un error conocido con el nombre de desbordamiento K (OVERFLOW).
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Pilas
3.2.2.1 Representación de pilasOtra 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.
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, ....).
..... .....
TOPE 1 TOPE 2
1 2 3 2 N -1 2N
PILA 1
N N+1
PILA 2
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Pilas
3.2.2.1 Representación de pilasPuede 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.
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.
..... .....
TOPE 2
1 2 3 2 N -1 2N
PILA 1
N N+1
PILA 2
TOPE 1
N+2
(a)
..... .....
TOPE 2
1 2 3 2 N -1 2N
PILA 1
N-1 N
PILA 2
TOPE 1
N+1
(b)
En la figura (a) La PILA 1 tiene más de N elementos y la PILA 2 tiene menos de N elementos.
En la figura (b) ocurre lo contrario, la PILA 2 tiene más de N elementos y la PILA 1 tiene menos de N elementos.
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.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)Si TOPE < MAX (Verifica que haya espacio libre) entonces
TOPE = TOPE + 1 (actualiza TOPE)PILA (TOPE) = DATO
sinoescribir desbordamiento
Fin_si
QUITA (PILA, TOPE, DATO)Si TOPE > 0 (Verifica que la pila no está vacía) Entonces
DATO = PILA (TOPE)TOPE = TOPE - 1
SinoImprimir “Subdesbordamiento”
Fin_si
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Pilas
3.2.2.2 Operaciones
PONE (PILA, MAX, TOPE, DATO)Si TOPE < MAX (Verifica que haya espacio libre) entonces
TOPE = TOPE + 1 (actualiza TOPE)PILA (TOPE) = DATO
sinoescribir desbordamiento
Fin_si
COMENZAR
..................
TOPE < MAX NO
SI
TOPE = TOPE + 1
PILA(TOPE) = DATO
"DESBORDAMIENTO"
COMENZAR
..................
TOPE > 0 NO
SI
DATO = PILA(TOPE)
TOPE = TOPE - 1
"SUBDESBORDAMIENTO"
AGREGA ELEMENTOS A LA PILA
QUITA ELEMENTOS A LA PILA
QUITA (PILA, TOPE, DATO)Si TOPE > 0 (Verifica que la pila no está vacía) Entonces
DATO = PILA (TOPE)TOPE = TOPE - 1
SinoImprimir “Subdesbordamiento”
Fin_si
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Pilas
3.2.2.2 Operaciones : EjemploSi 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)).
.....
ABRIL
MARZO
FEBRERO
ENERO
MAX
PILA
1
2
3
4
a) Agregar
MAYO 5
JUNIO 6TOPE
.....
ABRIL
MARZO
FEBRERO
ENERO
MAX
PILA
1
2
3
4
b) Quitar
MAYO 5TOPE
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Pilas
3.2.2.2 Operaciones : EjemploUna pila tiene cargada los 6 primeros meses del año y se desea completar con
los meses restantes. COMENZAR
TOPE = 6
INGRESARMES
TOPE < 12 No PARAR
SI
TOPE = TOPE + 1
PILA (TOPE) = MES
En pseudocódigo:Comenzar
TOPE = 6Mientras TOPE < 12
Ingresar MESTOPE = TOPE +1PILA(TOPE) = MES
Fin_MientrasParar
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.1 Pilas
3.2.2.2 Operaciones : EjemploUna pila tiene cargada los 12 meses del año y se desea quitar los últimos 4
meses del año.COMENZAR
TOPE = 12
CON = 4 SI PARAR
NO
DATO = PILA (TOPE)
TOPE = TOPE - 1
CON = 0
CON = CON + 1
En pseudocódigo:Comenzar
TOPE = 12CON = 0Mientras CON = 4
DATO = PILA(TOPE)TOPE = TOPE – 1CON = CON + 1
Fin_MientrasParar
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.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 lineales3.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 lineales3.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
9999
.....
1111
2222
3333
4444
FRENTE
COLA
4
3
2
1
N
a) Cola llena b) Cola con algunoselementos
FINAL = MAX 9999
.....
1111
2222
3333
FRENTE
COLA
3
2
1
NMAX
FINAL
c) Cola vacía
.....
FRENTE = FINAL = 0 COLA
3
2
1
NMAX
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.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)
Si FINAL < MAX (Verifica que haya espacio libre) entonces
FINAL = FINAL + 1 (actualiza FINAL)COLA (FINAL) = DATO
Si FINAL = 1 {se insertó el primer elemento de la pila}Entonces
FRENTE = 1Fin_si
sinoImprimir “Subdesbordamiento”
Fin_si
QUITA (COLA, MAX , FRENTE, FINAL, DATO)
Si FRENTE <> 0 (Verifica que la cola no está vacía) Entonces DATO = COLA (FRENTE) Si FRENTE = FINAL (si hay un solo elemento) Entonces
FRENTE = 0 (indica cola vacía)FINAL = 0
SinoFRENTE = FRENTE + 1
Fin_siSino escribir SubdesbordamientoFin_si
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.3 Colas
COMENZAR
..................
FINAL < MAX NO
SI
FINAL= FINAL + 1
COLA(FINAL) = DATO
"DESBORDAMIENTOCOLA LLENA"
COMENZAR
..................
FRENTE <> 0 NO
SI
DATO = COLA(FRENTE)
"SUBDESBORDAMIENTOCOLA VACIA"
AGREGA ELEMENTOS EN LA COLA QUITA ELEMENTOS DE LA COLA
FINAL = 1
No
Si FRENTE = 1
FRENTE = FINAL Si FRENTE = 0
FINAL = 0
FRENTE = FRENTE + 1
No
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.3 Colas
3.2.3.2 Operaciones: EjemploSi 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.
ENERO
MAX
COLA
1
2
3
12
a) Agregar
5
6FINAL
6
FRENTE
MAX
COLA
1
2
3
12
b) Quitar
5
6FINAL
6
FRENTE
MAX
COLA
1
2
3
12
c) Agregar y Quitar
5
6
FINAL
4
FRENTE
7
FEBRERO FEBRERO FEBRERO
MARZO MARZO MARZO
ABRIL ABRIL ABRIL
MAYO MAYO MAYO
JUNIO JUNIO JUNIO
..... ..... JULIO
.....
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.3 Colas
3.2.3.2 Operaciones: EjemploPone en la cola los 6 primeros
meses del año
COMENZAR
FINAL = 6 SI
NO
FINAL = FINAL + 1
COLA(FINAL) = MES
INGRESAR MES
FRENTE = 0FINAL = 0MAX = 12
PARAR
COLA (K)K=1,12
ComenzarFRENTE = 0FINAL = 0MAX = 12Ingresar COLAHasta FINAL = 6
FINAL = FINAL + 1 COLA(FINAL) = MES
Fin_hastaParar
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.3 Colas
3.2.3.2 Operaciones: EjemploSaca de la cola el primer mes
COMENZAR
FRENTE = FRENTE + 1
DATO = COLA(FRENTE)
FRENTE = 1FINAL = 6MAX = 12
PARAR
COLA (K)K=1,12
ComenzarFRENTE = 1FINAL = 6MAX = 12Ingresar COLA
DATO = COLA(FINAL)FRENTE = FRENTE + 1
Parar
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.3 Colas
3.2.3.2 Operaciones: EjemploUna 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.
MAX
COLA
1
2
3
7
a) Quitar
5
SABADO 6FRENTE = FINAL
6
COLA COLA
1
2
3
b) Agregar y Quitar
5
SABADO 6
FINAL= MAX
4
FRENTE
7DOMINGO
1
2
3
C) Quitar
5
6
FRENTE=FINAL= MAX
4
7DOMINGO
JUEVES
MIERCOLES
MARTES
LUNES
COLA
1
2
3
7
VIERNES 5
SABADO 6
6
Cola Original
En el ejemplo representado las colas quedan de la siguiente manera:
Luego de eliminar los días lunes, martes, miércoles, jueves y viernes
Luego de agregar el día domingoLuego de quitar el día sábado
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 lineales3.2.3 Colas
3.2.3.3 Colas circularesUna 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.
FINAL
COLA CIRCULAR
1
2
3
7
a) Frente es menorque Final
5
6
FRENTE
6
COLA CIRCULAR
1
2
3
b) Frente es menorque Final
5
6
FRENTE 4
FINAL 7
COLA CIRCULAR
1
2
3
c) Frente es mayorque Final
5
6
FRENTE 4
FINAL
7
P3
B2
D4
Z1 Z1 Z1
F4 F4 F4
G6 G6 G6
A1 A1 A1
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.3 Colas
3.2.3.3 Colas circularesEsta 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.
FINAL
COLA CIRCULAR
1
2
3
7
a) Frente es menorque Final
5
6
FRENTE
6
COLA CIRCULAR
1
2
3
b) Frente es menorque Final
5
6
FRENTE 4
FINAL 7
COLA CIRCULAR
1
2
3
c) Frente es mayorque Final
5
6
FRENTE 4
FINAL
7
P3
B2
D4
Z1 Z1 Z1
F4 F4 F4
G6 G6 G6
A1 A1 A1
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.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
Z1X1Y6
1 2 3
F4
5
G6
64 7
A1
FRENTE FINAL
b) COLA CIRCULAR: Luego de insertar un elemento (Cola llena)
Z1X1Y6B4
1 2 3
F4
5
G6
64 7
A1
FRENTEFINAL
c) COLA CIRCULAR: Luego de eliminar elementos
B4
1 2 3 5 64 7
A1
FRENTEFINAL
d) COLA CIRCULAR: Luego de eliminar el primer elemento (frente), se actualizanlos punteros y FRENTE = FINAL
B4
1 2 3 5 64 7
FRENTE = FINAL
e) COLA CIRCULAR: Cola vacía luego de eliiminar el último elemento
1 2 3 5 64 7
frente = final = 0
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na.
3.2 Estructuras de datos lineales3.2.3 Colas
3.2.3.4 Doble colaExiste 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
1 2 3 MAX
FRENTE FINAL
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 lineales3.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
1 2 3 MAX
FRENTE FINAL
Doble Cola de salida restringuida
1 2 3 MAX
FRENTE FINAL