Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos...

35
J.T.P. Maria Eugenia Valesani - Programacion 1 - Fa.Ce.Na. Estructura de datos lineales Tema 3

Transcript of Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos...

Page 1: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Estructura de datos lineales

Tema 3

Page 2: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 3: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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.

Page 4: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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.

Page 5: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 6: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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.

Page 7: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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.-

Page 8: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 9: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 10: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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.

Page 11: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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)

Page 12: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 13: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 14: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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).

Page 15: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 16: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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.

Page 17: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 18: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 19: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 20: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 21: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 22: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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.

Page 23: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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.

Page 24: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 25: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 26: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 27: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

.....

Page 28: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 29: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 30: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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.

Page 31: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 32: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 33: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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

Page 34: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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.

Page 35: Tema 3 - Facultad de Ciencias Exactas y Naturales y ... · PDF fileEn este Tema analizaremos las tres estructuras dinámicas lineales de datos pilas, colas y listas. ... Una estructura

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