Saltar al contenido

Modelo por capas

Una cola de dos puntas

Un deque (double-ended queue, cola de dos extremos) es una interfaz con:

  • agregar_frente(x), agregar_final(x);
  • quitar_frente(), quitar_final();
  • frente(), final().

Sirve como pila (usando un extremo) y como cola (metiendo por uno y sacando por el otro).

Con el buffer circular, agregar_frente retrocede inicio una posición, dando la vuelta hacia atrás:

Texto
agregar_frente(x):    inicio ← (inicio − 1 + capacidad) mod capacidad    datos[inicio] ← x    longitud ← longitud + 1

Se suma la capacidad antes del mod para que el resultado no sea negativo cuando inicio es 0.

agregar_frente en un buffer circularDos estados de un array de capacidad 4. Antes: A y B en las posiciones 0 y 1, inicio 0, longitud 2. Después de agregar_frente(Z): inicio retrocede de 0 a 3, dando la vuelta hacia atrás, y Z se escribe en la posición 3; longitud 3. El orden desde inicio es Z, A, B.Antes: capacidad 4, inicio 0, longitud 2A0B123iniciofrente = ADespués de agregar_frente(Z)A0B12Z*3inicioda la vuelta hacia atráslongitud = 3inicio = (0 − 1 + 4) mod 4 = 3Orden lógico desde inicio: Z, A, B
Retroceder inicio desde 0 da la vuelta hasta la última posición: Z queda delante de A sin mover ningún valor.
Un deque circular tiene capacidad 6, inicio 1 y longitud 2. Llamas tres veces a agregar_frente. ¿Cuánto valen inicio y longitud al final?