Page 1

Universidad Fermín Toro Núcleo Araure -portuguesa Estructura de Datos I -2017/04- SAIA A - Elvia Sanchez Ricardo J. Diaz Briceño CI-25.697.610.

,

Ricardo J. Diaz Briceño CI-25.697.610

Febr. 2018


Las colas al igual que las pilas, son una estructuras de datos lineales y condicionadas, para el caso de las colas las inserciones y eliminaciones se realizan por extremos diferentes. en este apartado se abordan los temas relacionados con los conceptos básicos de las colas, las operaciones que se pueden realizar con programas de aplicación, implementados con apuntadores haciendo uso de la gestión dinámica de memoria. El menú de opciones es el ingrediente principal para cada programa, lo que permite la interacción del usuario con las funciones para la inserción, visualización, eliminación y búsqueda de datos en la cola. Una lista circular es una lista lineal en la que el último nodo a punta al primero. Las listas circulares evitan excepciones en la operaciones que se realicen sobre ellas.Cada nodo siempre tiene uno anterior y uno siguiente. ¿Por qué utilizar una estructura Circular? En una lista simplemente enlazada, el movimiento siempre fluirá desde la

cabeza en dirección hacia el final de la lista, pero ¿qué ocurre cuando desde el último nodo se necesita operar con el primero?, este es el punto diferencial de una estructura abierta y una cerrada. En una lista circular: No existe algún elemento que apunte a NULL Se integra una estructura tipo anillo Solo hay una cabeza La cabeza siempre será el siguiente enlace para algún nodo Se pueden llegar a crear recorridos en bucles infinitos

Cola circular Es otra forma de una cola lineal en la que está conectada la última posición a la primera posición de la lista. Cola simple: El primer elemento que entra es el primero que sale. Cola Doble: El primer valor insertado se realiza partiendo la lista a la mitad y de ahi se le sigue por cualquiera de sus lados.

Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir. Utilización Las colas se utilizan en sistemas informáticos, transporte y operaciones de investigación (entre otros), dónde 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.


Definición de una cola Una cola, se puede definir como una estructura lineal de datos condicionada, en la que las eliminaciones se realizan al principio de la lista, es decir, al frente, y las inserciones se realizan en el extremo opuesto de la lista, es decir, al final. En las colas el elemento que entró de primero sale también de primero; por ello se conocen como listas FIFO, en ingles (first-in, first-out), primero en entrar, primero en salir. Una representación gráfica de las estructuras de datos tipo cola puede visualizarse en la imagen 1, que se muestra a continuación. Aplicación de las estructuras de datos tipo colas En la vida real se impresora para todos tiene ejemplos los equipos conectados numerosos de colas: la a la red; de tal manera cola de un autobuses, que se imprimirán los cola para ingresar al documentos en el orden cine, caravana de en que se hace la coches en una calle, petición de impresión etc. En todas ellas el de cada usuario. primer elemento Formando así una cola (pasajero, coche, etc) de impresión. que llega es el primero Una muy buena que sale. implementación de las Las colas se usan colas como solución a para almacenar datos una situación del que necesitan ser entorno podría procesados según el realizarse un programa orden de llegada. Una para manejar un aplicabilidad de las planificador de citas en colas puede realizarse un consultorio médico, en un sistema de de tal manera que cada informático manejado a solicitud de una cita se través de una red de va almacenando en la computadoras donde se cola, los datos comparte una sola requeridos podrían ser:

el nombre del paciente y la fecha y hora de la cita, la atención por parte del medico será en el mismo orden de fecha y hora en que se registró la cita. En general, en una cola es una situación que vivimos a diario, el primero que llega será atendido de primero, pasando a continuación el segundo de la cola al frente, y cada que llega un nuevo usuario este se colocará al final de la cola. De aquí que el extremo por donde se insertan los elementos se llamará “final” y por donde se retiran se llama “frente”.


Cola Circular

:

Se inserta como en cola simple, solo que

cuando

se

llena

pasa

el

posicionador al inicio de la cola, es por eso que se llama circula ya que hace circulo.

Si la siguiente posición de la parte trasera es delantera, la cola se dice que está totalmente ocupado. Más allá de esto no se puede introducir ningún dato.

La cola circular es similar a la cola

Sin embargo, si elimina todos los

de lineales tiene dos extremos, la parte

datos, puede insertar los datos en

delantera y la parte trasera.

consecuencia.

La parte trasera es donde se inserta

Al eliminar los elementos que el

elementos y tren delantero es donde

puntero se mueve delante de uno en uno

eliminar elementos.

hasta que el puntero trasera se alcanza.

Se puede recorrer en una cola circular en una sola dirección.

puntero trasera, ambas posiciones se

Inicialmente los extremos delantero y

trasero

están

en

las

-1. Si el puntero delante llega el

mismas

posiciones. Al insertar elementos el puntero trasera se mueve uno por uno hasta el extremo delantero es llegar a ed.

inicializan a -1. And the queue is said to be empty. Y la cola se dice que está vacío.


COLA LINEAL En las colas lineales el elemento se inserta en la cola (parte final) de la lista y se suprime o elimina por la frente (parte inicial, cabeza) de la lista. Las aplicaciones utilizan una cola para almacenar elementos en su orden de aparición o concurrencia. Se debe tomar en cuenta que este tipo de estructura es limitada ya que una vez llenada la cola no podrรก reutilizar ese espacio hasta reiniciar la cola. Operaciones Básicas Cola circular Una cola circular o anillo es una estructura de datos en la que los elementos están de forma circular y cada elemento tiene un sucesor y un predecesor. Los elementos pueden consultarse, añadirse y eliminarse únicamente desde la cabeza del anillo que es una posición distinguida. Esta avanza en el sentido

de las agujas del reloj. Para la creación de una cola circular se usan dos punteros que llamaremos frente y final. El puntero frente se declarará en -1 y el puntero final en 0, una vez se inserte un elemento en la cola el puntero final será el que se moverá y al eliminarlo es el puntero frente quien se mueve. Esta estructura elimina las limitaciones de la cola lineal ya que los espacios de memoria se pueden volver a usar una vez el puntero frente avance es decir extraer un registro. Para que esto pueda suceder se debe tomar en cuenta que el registro máximo de posiciones a llenar será n-1 ya que debe existir un espacio en la cola que se utilizara como un espacio de control para que los punteros frente y final no estén en la misma posición en ningún momento.


COLA LINEAL, COLA CIRCULAR


Una cola es una estructura de datos, caracterizada por ser una secuencia de elementos en la que la operación de inserción push se realiza por un extremo y la operación de extracción pop por el otro. También se le llama estructura FIFO (del inglés First In First Out), debido a que el primer elemento en entrar será también el primero en salir. El tipo cola representa la idea que tenemos de cola en la vida real. La cola para subir al autobús está compuesta de elementos (personas), que dispone de dos extremos comienzo y fin. Por el comienzo se extraerá un elemento cuando haya comprado el billete para su viaje, y si llega una nueva persona con intención de usar el autobús, tendrá que colocarse al final y esperar que todos los elementos situados antes que él abandonen la cola. 2.3.2 TIPOS 2.3.2.1 COLAS SIMPLES En las colas el elemento que entro en primer lugar también es el primero en salir por ello se conocen como listas FIFO (First in First out). Así pues la diferencia con las pilas recibe en el modo de entrada y salida de datos. En las colas las inserciones se realizan al final de la lista no al principio por ello las colas se usan para almacenar datos que necesiten ser procesados según el orden de llegada. Nodo I M F En la informática muchas aplicaciones para las

colas (colas de aplicación) etc. . Por ejemplo un sistema de tiempo compartido suele tener un procesador central y una serie de periféricos compartidos: discos, impresoras, etc. Los recursos se comparten con diferentes usuarios y se utiliza una cola para almacenar el programa por los diferentes usuarios que esperan su turno de ejecución. El procesador atiende por riguroso orden de llamado de usuario. 2.3.2.2 COLAS CIRCULARES • Colas circulares (anillos): en las que el último elemento y el primero están unidos. • Colas de prioridad: En ellas, los elementos se atienden en el orden indicado por una prioridad asociada a cada uno. Si varios elementos tienen la misma prioridad, se atenderán de modo convencional según la posición que ocupen. Hay 2 formas de implementación: 1. Añadir un campo a cada nodo con su prioridad. Resulta conveniente mantener la cola ordenada por orden de prioridad. 2. Crear tantas colas como prioridades haya, y almacenar cada elemento en su cola. • Bicolas: son colas en donde los nodos

se pueden añadir y quitar por ambos extremos; se les llama DEQUE (Double Ended QUEue). Para representar las bicolas lo podemos hacer con un array circular con Inicio y Fin que apunten a cada uno de los extremos. Hay variantes: • Bicolas de entrada restringida: Son aquellas donde la inserción sólo se hace por el final, aunque podemos eliminar al inicio ó al final. • Bicolas de salida restringida: Son aquellas donde sólo se elimina por el final, aunque se puede insertar al inicio y al final. 2.3.2.3 COLAS DOBLES Existe una variable de la cola simple que es la bicola (doble cola). Es una cola bidimensional en la que las inscripciones y eliminaciones se pueden realizar en cualquiera de los dos extremos de la cola. Inserción Eliminación Inicio

Final

Eliminación Inserción Existen dos variantes de la bicola (cola doble): Cola doble con entrada restringida: Acepta valor, inserciones solo al final de la columna. Cola doble con salida restringida: Acepta eliminaciones solo al inicio de la cola.


Indica Memoria Dinámica Crear I I=NULL Crear M M=NULL Crear F F=NULL Mientras si (Quiere dar de alta) Si I=Null Entonces Crear Nodo I I sig=NULL M=I F=I Si no Crear nodo F Fsig =M M=F 2.3.3 OPERACIONES CON COLAS La definición de la estructura de datos tipo cola queda completa al incluir las operaciones que se pueden realizar en ella. Las operaciones básicas que pueden efectuarse son: Insertar un elemento en la cola Eliminar un elemento de la cola Las inserciones se llevaran a cabo por el FINAL de la cola, mientras que las eliminaciones se

harán por el FRENTE — recuerde que el primero en entrar es el primero en salir. Considerando que una cola puede almacenar un máximo número de elementos y que además FRENTE indica la posición del primer elemento y FINAL la posición del último, se presentan a continuación los algoritmos correspondientes a las operaciones mencionadas. 2.3.4 CLASES PARA IMPLEMENTACION DE COLAS Mediante Vectores Esta realización se caracteriza por : Es sencilla e intuitiva, ya que se basa en un vector. fin apunta al último dato. ini apunta a la posición anterior a la que contiene al primer dato. Declaración del tipo de dato unit cola1; interface; const Maxcola = 100; {tamaño del vector}

COLA LINEAL

nulo = 0; type tDato = integer ; tPos = nulo..Maxcola ; tCola = record Datos : array [1..Maxcola] of tDato ; ini,fin : tPos ; end ; Al añadir los elementos vamos incrementando fin , y al borrarlos decrementamos ini . Para evitar que el índice final se salga del vector podemos usar un vector circular mediante una función que dada una posición, devuelva la siguiente : function Siguiente (p : integer):integer; begin Siguiente:=p mod MaxE l+1 { Esto equivale a: if p=MaxEl then p:=1 els e inc (i)} end ; En las colas circulares debe prestarse atención a que los índices no se crucen.


COLA CIRCULAR

Represntación lógica de una cola simple en un arreglo. Estas tienen un grave problema, como las extracciones sólo pueden

insertar

un

nuevo

elemento

nos

mandará un error de overflow (cola llena). Para solucionar el problema de

realizarse por un extremo, puede llegar

desperdicio

un momento en que el apuntador A sea

implementaron las colas circulares, en

igual al máximo número de elementos

las cuales existe un apuntador desde el

en la cola, siendo que al frente de la

último elemento al primero de la cola.

misma existan lugares vacíos, y al

de

memoria

se


La representación gráfica de esta estructura es la siguiente:

La condición de vacío en este tipo de cola es que el apuntador F sea igual a cero. Las condiciones que debemos tener presentes al trabajar con este tipo de estructura son las siguientes: Over flow, cuando se realice una inserción. Under flow, cuando se requiera de una extracción en la cola. Vacio ***Algoritmo de inicialización: F<=0 A<=0 ***Algoritmo de insertar: Si (F+1=A) ó (F=1 y A=máximo) entonces mensaje (overflow) en caso contrario inicio si A=máximo entonces A<=1 cola[A]<= valor en caso contrario A <=A+1 cola[A]<=valor si F=0 entonces F <=1 fin ***Algoritmo a extraer:Si F=0 entonces mensaje (underflow) en caso contrario x <= cola[F] si F=A entonces F <= 0 A<= 0 en caso contrario si F=máximo entonces F <=1 en caso contrario F <= F+1

Colas Dobles (Bicolas): Estructura lineal en la que los elementos se pueden añadir o quitar por cualquier extremo de la cola (cola bidireccional). Esta estructura es una cola bidimensional en que las inserciones y eliminaciones se pueden realizar en cualquiera de los dos extremos de la bicola. Gráficamente representamos una bicola de la siguiente manera:

Existen dos variantes de la doble cola: Doble cola de entrada restringida: sólo acepta inserciones al final de la cola Doble cola de salida restringida: acepta eliminaciones sólo al frente de la cola **Algoritmos de entrada restringida** ***Algoritmos de inicialización: f<=1 A<=0 ***Algoritmo para insertar: Si A=máximo entonces mensaje (overflow) en caso contrario A <=A+1 cola[A]<= valor ***Algoritmo para extraer: Si F&gtA entonces mensaje (underflow) en caso contrario mensaje (frente/atrás) si frente entonces x <=cola[F] F <= F+1 en caso contrario x <= cola[A] A <=A-1 **Algoritmos de salida restringida** ***Algoritmo de inicialización: f<=1 A<=0 **Algoritmo para insertar: Si F&gtA entonces mensaje (overflow) en caso contrario mensaje (Frente/Atrás) si Frente entonces cola[F] <=valor en caso contrario A <= A+1 cola[A] <=valor ***Algoritmo para extraer: Si F=0 entonces mensaje (underflow) en caso contrario x <=cola[F] F <= F+1


¿Cuáles son las diferencias entre una cola circular y una cola lineal? Mientras que el código puede cubrir cualquier sistema de fluidos, colas, circular y lineal son más a menudo asociados con los sistemas de software y computación. Entre estos dos tipos de colas no son tanto las diferencias estructurales y desempeño. Por ejemplo, en el diseño de un conjunto de servidores Web, un arquitecto de la red puede tener que decidir si el acceso debe ser manejado en una cola circular o lineal cola. Esto afecta la forma en que se dirige al servidor de acceso, y el servidor debe estar conectado como estructuralmente. Ejemplos de la vida real

Comparación de cola

Para comprender rápidamente la

Una cola es lineal como una línea

principal diferencia entre una cola cola

recta en la que todos los elementos o las

circular lineal y, considere un ejemplo

instrucciones son uno detrás del otro.

de la vida real. Si un grupo de personas

Hay un comienzo definido y un final

que están esperando en la cola para

definitivo de la cola. Tareas alineados

sentarse en un restaurante, cuando una

en esta cola formato se ejecutan en el

mesa está lista, la gente en la parte

orden de su colocación en un FIFO

delantera de la línea se sientan y los

(First In First Out) base. Una cola

recién llegados ocupan su lugar en la

circular tiene una estructura circular. El

parte posterior de la línea. Una cola

último elemento de esta cola está

circular es más como un juego de sillas

conectada con el primer elemento,

musicales. Los recién llegados pueden

completando así el círculo. Las tareas

entrar donde haya el espacio, siempre

en este formato no se ejecutan

hay una silla vacía.

básicamente en el orden en que fueron

Estructuras

enviados.


inserción y eliminación

posición en la cola y no necesariamente

En una cola lineal, una nueva

en orden secuencial.

actividad se inserta al final de la lista, mientras que una deleción se hace en la

los costes de mantenimiento y el tiempo

parte frontal de la lista. Los extremos

En una cola lineal para un nuevo

delantero y trasero son responsables de

mensaje al final, tiene que haber un

supervisar el estado de la cola. Una cola

espacio vacío en la parte delantera y

puede tener un número finito de

todos los elementos intermedios deben

elementos, que es el predeterminado.

mover un espacio para crear un día de

Cada nueva entrada debe pasar una

fiesta para la nueva entrada. Cada vez

prueba de "cola llena", y del mismo

que

modo, antes de la cancelación, una

procedimiento

prueba de la "cola vacía" hay que

Inserción y eliminación son, por tanto,

superar. "Cola llena" controles para ver

dos fases diferentes. Este enfoque

si hay espacio para la inserción y la

consume

"cola vacía" asegura que no hay

computacionalmente caro. Por otro

elementos en espera de ser eliminado y

lado, en una cola circular, inserción y

la cola no está vacía ya. En una cola

supresión

circular,

inserciones

y

deleciones

simultáneamente.

pueden

producirse

en

cualquier

hay

una

nueva debe

tiempo

puede

entrada, ser

el

repetido.

y

es

ocurrir


Las colas se utilizan en sistemas Una cola (también llamada fila) es una

estructura

de

informáticos,

transportes

y

datos,

operaciones de investigación (entre

caracterizada por ser una secuencia

otros), dónde los objetos, personas o

de elementos en la que la operación

eventos son tomados como datos que

de inserción push se realiza por un

se almacenan y se guardan mediante

extremo y la operación de extracción

colas

para

su

pop por el otro. También se le llama

procesamiento.

Este

estructura FIFO (del inglés First In

estructura de datos abstracta se

First Out), debido a que el primer

implementa en lenguajes orientados

elemento en entrar será también el

a objetos mediante clases, en forma

primero en salir.

de listas enlazadas.

posterior tipo

de

Declaraciones de tipos para manejar listas circulares Los tipos que definiremos normalmente para manejar listas cerradas son los mismos que para para manejar listas abiertas: typedef struct _nodo \{ int dato; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *Lista; tipoNodo es el tipo para declarar nodos, evidentemente. pNodo es el tipo para declarar punteros a un nodo. Lista es el tipo para declarar listas, tanto abiertas como circulares. En el caso de las circulares, apuntará a un nodo cualquiera de la lista.


Pueden existir Listas Circulares Simplemente Enlazadas y Doblemente Enlazadas. Gráficamente se tendría: Simplemente Enlazadas

-

• • •

Doblemente enlazadas

Nótese que con simple o doble referencia, siempre se tendrá solo una cabeza

Operaciones básicas con listas circulares A todos los efectos, las listas circulares son como las listas abiertas en cuanto a las operaciones que se pueden realizar sobre ellas: Añadir o insertar elementos. Borrar elementos. Moverse a través de la lista, siguiente. Añadir elemento en una lista circular. Partiremos de un nodo a insertar.

El proceso es muy sencillo: 1. Hacemos que nodo->siguiente apunte a lista->siguiente. 2. Después que lista->siguiente apunte a nodo.

Eliminar un nodo en una lista circular con más de un elemento


Lista con más de un elemento 1. El primer paso es conseguir que lista apunte al nodo anterior al que queremos eliminar. Esto se consigue haciendo que lista valga lista->siguiente mientras lista>siguiente sea distinto de nodo. 2. Hacemos que lista->siguiente apunte a nodo->siguiente. 3. Eliminamos el nodo.

• • • • • •

Operaciones que se pueden realizar con Colas Las operaciones básica que se pueden realizar con una cola son: Insertar un elemento al final en una cola no vacía. Visualizar: muestra los elementos insertados en la cola Eliminar un elemento del principio de la cola Buscar un elemento en la cola Vaciar la cola. Verificar el estado de la cola: vacía, llena. Implementación de las Colas por medio de Punteros La implementación de las estructura de datos lineales tipo cola se puede realizar a través de listas enlazadas con apuntadores, al igual que a través de arreglos unidimensionales. Para nuestro caso profundizaremos en la primera opción. Se requiere implementar un programa codificado en C++, que permita mediante un menú de opciones gestionar los de turnos de llegada y salida de los usuarios como aplicabilidad a las estructuras de datos tipo cola, el programa contará con las opciones de ingresar turnos a la cola, visualizar los turnos asignados y eliminar turno de la cola una vez hayan sido atendidos. El programa se renombra como Turno.cpp


Veamos la salida en pantalla del menĂş de opciones del programa Turno.cpp tal como se visualiza en la imagen 1. que se muestra a continuaciĂłn.


Cola lineal, cola circular ricardo  

Cola lineal, cola circula

Cola lineal, cola circular ricardo  

Cola lineal, cola circula

Advertisement