jueves, 4 de noviembre de 2010

COLAS CIRCULARES Y DOBLES

Cola Circular: Represntación lógica de una cola simple en un arreglo.
Estas tienen un grave problema, como las extracciones sólo pueden realizarse por un extremo, puede llegar un momento en que el apuntador A sea igual al máximo número de elementos en la cola, siendo que al frente de la misma existan lugares vacíos, y al insertar un nuevo elemento nos mandará un error de overflow (cola llena).
Para solucionar el problema de desperdicio de memoria se implementaron las colas circulares, en las cuales existe un apuntador desde el último elemento al primero de la cola.
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

1 comentario: