programación de sistemas - academia cartagena99 › ... › apuntes › pilasycolas.pdf · listas...
TRANSCRIPT
![Page 1: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/1.jpg)
Pilas y Colas
Programación de sistemas
Julio Villena Román <[email protected]>
MATERIALES BASADOS EN EL TRABAJO DE DIFERENTES AUTORES:
Carlos Delgado Kloos, Jesús Arias Fisteus, Carlos Alario Hoyos
1
![Page 2: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/2.jpg)
Pilas (stacks)
Colas (queues)
Colas dobles (deques – double-ended queues)
Contenidos
2
![Page 3: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/3.jpg)
• Estructura de datos lineal
• Inserción y extracción por un único extremo
LIFO (Last-In-First-Out)
Pilas
3
![Page 4: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/4.jpg)
• Insertar por un extremo: push(x)
• Extraer por el mismo extremo: pop()
Pilas
4
![Page 5: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/5.jpg)
• Correcto: o
o ()
o (()(()))
• Incorrecto: o )(
o (()
o ())
• Reglas: o Básica: apertura + cierre
o Secuenciación: ()()
o Anidamiento: (())
5
Ejemplo: Revisión de paréntesis
![Page 6: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/6.jpg)
Reglas: • Cada vez que encontremos un “(“ se añade a la pila • Cada vez que encontremos un “)” se extraerá el “(“ de
arriba de la pila • La expresión con paréntesis es correcta si la pila está
vacía al acabar la expresión y siempre hemos encontrado un “)” correspondiente a un “(”
6
Ejemplo: Revisión de paréntesis
![Page 7: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/7.jpg)
(()(()())())
7
Ejemplo: (()(()())())
![Page 8: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/8.jpg)
(()(()())())
(
8
Ejemplo: (()(()())())
![Page 9: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/9.jpg)
(()(()())())
( (
Ejemplo: (()(()())())
9
![Page 10: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/10.jpg)
(()(()())())
(
Ejemplo: (()(()())())
10
![Page 11: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/11.jpg)
(()(()())())
( (
Ejemplo: (()(()())())
11
![Page 12: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/12.jpg)
(()(()())())
( ( (
Ejemplo: (()(()())())
12
![Page 13: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/13.jpg)
(()(()())())
( (
Ejemplo: (()(()())())
13
![Page 14: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/14.jpg)
(()(()())())
( ( (
Ejemplo: (()(()())())
14
![Page 15: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/15.jpg)
(()(()())())
( (
Ejemplo: (()(()())())
15
![Page 16: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/16.jpg)
(()(()())())
(
Ejemplo: (()(()())())
16
![Page 17: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/17.jpg)
(()(()())())
( (
Ejemplo: (()(()())())
17
![Page 18: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/18.jpg)
(()(()())())
(
Ejemplo: (()(()())())
18
![Page 19: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/19.jpg)
(()(()())())
Correcto: Expresión completa y pila vacía!!
Ejemplo: (()(()())())
19
![Page 20: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/20.jpg)
([]{()<>}())
Correcto: Expresión completa y pila vacía!!
20
Ejemplo: ([]{()<>}())
![Page 21: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/21.jpg)
<b><i>hello</b></i> • Correcto en HTML 1.0-4.0
• Incorrecto en XHTML
<b><i>hello</i></b> • Correcto en ambos
21
Ejemplo: HTML
![Page 22: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/22.jpg)
Interfaz para pilas
public interface Stack<E> {
boolean isEmpty();
int size();
E top();
void push(E info);
E pop();
}
22
![Page 23: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/23.jpg)
Interfaz para pilas (con excepciones)
public interface Stack<E> {
boolean isEmpty();
int size();
E top() throws
EmptyStackException;
void push(E info) throws
StackOverflowException;
E pop() throws
EmptyStackException;
}
23
![Page 24: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/24.jpg)
Una interfaz dos implementaciones
• Implementación basada en arrays:
ArrayStack
• Implementación basada en listas enlazadas:
LinkedStack
24
![Page 25: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/25.jpg)
ArrayStack
top
0 1 2 3 4 5 6 … … N-1
top
1
0 1 2 3 4 5 6 … … N-1
top
1 2 3 4
0 1 2 3 4 5 6 … … N-1
Pila vacía
Pila con 1 elemento
Pila con 4 elementos
25
![Page 26: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/26.jpg)
public class ArrayStack<T> implements Stack<E> {
public static final int DEFAULT_CAPACITY = 1000;
private int capacity;
private E data[];
private int top = -1;
public ArrayStack() {
this(DEFAULT_CAPACITY);
}
public ArrayStack(int capacity) {
this.capacity = capacity;
data = new E[capacity];
}
… 26
ArrayStack (I)
![Page 27: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/27.jpg)
…
public int size() {
return (top + 1);
}
public boolean isEmpty() {
return (top < 0);
}
public E top() throws EmptyStackException {
if (isEmpty())
throw new EmptyStackException(“Empty");
return data[top];
}
…
27
ArrayStack (II)
![Page 28: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/28.jpg)
…
public void push(E o)
throws StackOverflowException {
if (size == capacity)
throw new StackOverflowException();
data[++top] = o;
}
…
28
ArrayStack (III)
![Page 29: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/29.jpg)
…
public E pop() throws StackEmptyException {
E o;
if (top == -1)
throw new EmptyStackException();
o = data[top];
data[top--] = null;
return o;
}
}
29
ArrayStack (IV)
![Page 30: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/30.jpg)
LinkedStack
Pila vacía
Pila con 1 elemento
Pila con 4 elementos
Extremo de inserción y extracción
30
![Page 31: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/31.jpg)
Recordando la clase Node
public class Node<E> {
private E info;
private Node<E> next;
public Node() {…}
public Node(E info) {…}
public Node(E info, Node<E> next) {…}
public Node<E> getNext() {…}
public void setNext(Node<E> next) {…}
public E getInfo() {…}
public void setInfo(E info) {…}
}
31
![Page 32: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/32.jpg)
LinkedStack (I)
public class LinkedStack<E> implements Stack<E> {
private Node<E> top;
private int size;
public LinkedStack() {
top = null;
size = 0;
}
public boolean isEmpty() {
return (top == null);
}
public int size() {
return size;
}
public E top() {
if(isEmpty()){
return null;
}
return top.getInfo();
}
…
Constructor
Atributos
Métodos de la interfaz
Stack a implementar (I)
32
![Page 33: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/33.jpg)
Moscú
Madrid Miami Múnich
top
33
Inserción (push)
![Page 34: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/34.jpg)
Madrid Miami Múnich Moscú
top
34
Extracción (pop)
![Page 35: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/35.jpg)
LinkedStack (II)
…
public void push(E info){
Node<E> n = new Node<E>(info, top);
top = n;
size++;
}
public E pop() {
E info;
if(isEmpty()){
return null;
} else{
info = top.getInfo();
top = top.getNext();
size--;
return info;
}
}
}
Métodos de la interfaz
Stack a implementar (II)
35
![Page 36: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/36.jpg)
• Estructura de datos lineal
• Inserción por un extremo y extracción por el
exremo opuesto
FIFO (First-In-First-Out)
Colas
36
![Page 37: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/37.jpg)
• Insertar por un extremo: enqueue(x)
• Extraer por el extremo opuesto: dequeue()
Colas
37
![Page 38: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/38.jpg)
Interfaz para colas
public interface Queue<E> {
boolean isEmpty();
int size();
E front();
void enqueue (E info);
E dequeue();
}
38
![Page 39: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/39.jpg)
Interfaz para colas (con excepciones)
public interface Queue<E> {
boolean isEmpty();
int size();
E front() throws
EmptyQueueException;
void enqueue (E info) throws
QueueOverflowException;
E dequeue() throws
EmptyQueueException;
}
39
![Page 40: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/40.jpg)
Una interfaz dos implementaciones
• Implementación basada en arrays:
ArrayQueue
• Implementación basada en listas enlazadas:
LinkedQueue
40
![Page 41: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/41.jpg)
ArrayQueue
top
0 1 2 3 4 5 6 … … N-1
1
0 1 2 3 4 5 6 … … N-1
tail
1 2 5 9 3
0 1 2 3 4
4
5 6 … … N-1
Cola vacía
Insertamos 1 elemento
Insertamos 5 elementos más
tail
top
tail
top
tail
5 9 3
0 1 2 3 4
4
5 6 … … N-1
Extraemos dos elementos
top
41
![Page 42: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/42.jpg)
LinkedQueue
Cola vacía
Cola con 1 elemento
Cola con 4 elementos
Extremo de extracción Extremo de
inserción
42
![Page 43: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/43.jpg)
LinkedQueue (I)
public class LinkedQueue<E> implements Queue<E> {
private Node<E> top = null;
private Node<E> tail = null;
private int size = 0;
public LinkedQueue(){
top = null;
tail = null;
size = 0;
}
public boolean isEmpty() {
return (top == null);
}
public int size() {
return size;
}
public E front() {
if (isEmpty()){
return null;
} else {
return top.getInfo();
}
}
…
Constructor
Atributos
Métodos de la interfaz
Queue a implementar (I)
43
![Page 44: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/44.jpg)
Moscú Madrid Miami Múnich
top tail
n
44
Inserción (enqueue)
![Page 45: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/45.jpg)
LinkedQueue (II)
…
public void enqueue (E info){
Node<E> n = new Node<E>(info, null);
if (isEmpty()){
top = n;
} else{
tail.setNext(n);
}
tail = n;
size++;
}
…
Métodos de la interfaz
Queue a implementar (II)
45
![Page 46: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/46.jpg)
Moscú Madrid Miami Múnich
top tail
46
Extracción (dequeue)
![Page 47: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/47.jpg)
LinkedQueue (III)
…
public E dequeue(){
E info;
if (isEmpty()){
info = null;
} else{
info = top.getInfo();
top = top.getNext();
size--;
if (isEmpty()){
tail = null;
}
}
return info;
}
}
Métodos de la interfaz
Queue a implementar (III)
47
![Page 48: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/48.jpg)
Actividad
48
http://courses.cs.vt.edu/csonline/DataStr
uctures/Lessons/QueuesImplementationView/
applet.html
DepthBreadth.java en http://www.faqs.org/docs/javap/c11/s3.html
![Page 49: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/49.jpg)
• Estructura de datos lineal
o Deque (double-ended queue)
• Inserción y extracción por cualquiera de los extremos
Colas dobles (deques)
49
![Page 50: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/50.jpg)
Interfaz para colas dobles
public interface Deque<E> {
public boolean isEmpty();
public int size();
public E first();
public E last();
public void insertFirst(E info);
public void insertLast(E info);
public E removeFirst();
public E removeLast();
}
50
![Page 51: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/51.jpg)
Interfaz para colas dobles
Stack Deque size() size()
isEmpty() isEmpty()
top() last()
push(x) insertLast(x)
pop() removeLast()
Queue Deque size() size()
isEmpty() isEmpty()
front() first()
enqueue(x) insertLast(x)
dequeue() removeFirst()
51
![Page 52: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/52.jpg)
Implementación de colas dobles
• Las listas enlazadas no son apropiadas porque
removeLast necesita recorrer la lista
completa para obtener la referencia del
penúltimo
• Solución: listas doblemente enlazadas
52
![Page 53: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/53.jpg)
Listas doblemente enlazadas
• Listas enlazadas en que cada nodo, además de
almacenar el dato y la referencia del siguiente nodo,
almacena también la referencia del nodo anterior
o Permiten recorrer la lista en ambos sentidos
o Reducen el coste de extracción del último nodo
top
info info info
prev
next
prev
next
prev
next null null
tail
53
![Page 54: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/54.jpg)
La clase DLNode
public class DLNode<E> {
private E info;
private DLNode<E> prev;
private DLNode<E> next;
public DLNode() {…}
public DLNode(E info) {…}
public DLNode(E info, DLNode<E> prev, DLNode<E> next){…}
public DLNode<E> getNext(){…}
public void setNext(DLNode<E> next){…}
public DLNode<E> getPrev(){…}
public void setPrev(DLNode<E> prev){…}
public E getInfo(){…}
public void setInfo(E info){…}
}
54
![Page 55: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/55.jpg)
• Completa el código de la clase DLNode. Incluye
tres constructores: uno que no recibe información
para inicializar ningún atributo; otro que permite
inicializar el atributo info, y otro que permite
inicializar los tres atributos
55
Ejercicio 1
![Page 56: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/56.jpg)
Listas doblemente enlazadas
• La implementación de colas dobles basada en listas enlazadas se
complica debido a la necesidad de comprobar siempre que existen
los nodos anterior y posterior
• Simplificación: Crear dos nodos especiales, sin datos, de tal forma
que uno esté siempre al principio y el otro siempre al final:
o Una lista vacía sólo contiene estos dos nodos.
o Está garantizado en cualquier operación de inserción o extracción que
siempre existen el nodo anterior y siguiente.
o Las referencias top y tail no cambian nunca de valor.
56
![Page 57: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/57.jpg)
La clase cola doble (DLDeque) con listas
doblemente enlazadas
public class DLDeque<E> implements Deque<E>{
private DLNode<E> top;
private DLNode<E> tail;
private int size;
public DLDeque(){
top = new DLNode<E>();
tail = new DLNode<E>();
tail.setPrev(top);
top.setNext(tail);
size = 0;
}
…
Constructor
Atributos
57
![Page 58: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/58.jpg)
• Implementa los siguientes métodos de la clase
DLDeque:
o boolean isEmpty()
o int size()
o E first()
o E last()
58
Ejercicio 2
![Page 59: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/59.jpg)
public void insertFirst(E info) {
DLNode<E> second = top.getNext();
DLNode<E> first = new DLNode<E>(info, top, second);
second.setPrev(first);
top.setNext(first);
size++;
}
La clase cola doble (DLDeque) con listas
doblemente enlazadas: Inserción por el principio
59
![Page 60: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/60.jpg)
public E removeFirst() { E info;
if (top.getNext() == tail){
info = null;
} else {
DLNode<E> first = top.getNext();
info = first.getInfo();
DLNode<E> second = first.getNext();
top.setNext(second);
second.setPrev(top);
size--;
}
return info;
}
La clase cola doble (DLDeque) con listas
doblemente enlazadas: Extracción por el principio
Madrid Miami Múnich Moscú
first top
second tail
60
![Page 61: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/61.jpg)
• Implementa los siguientes métodos de la clase
DLDeque:
o void insertLast (E info)
• Para casa:
o E removeLast()
61
Ejercicio 3
![Page 62: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/62.jpg)
top
node
DLNode<E> node = new DLNode<E>(data);
prev
null
null null
null
tail
62
Inserción (sin nodos dummy)
![Page 63: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/63.jpg)
top
node
node.setPrev(prev);
if (prev != null) {
node.setNext(prev.getNext());
prev.setNext(node);
}
prev
null null
tail
63
Inserción (sin nodos dummy)
![Page 64: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas](https://reader033.vdocuments.pub/reader033/viewer/2022052310/5f1a8883709d8948ae6586e6/html5/thumbnails/64.jpg)
top
node if (prev == null) {
node.setNext(top);
top = node;
}
if (node.getNext() != null) {
node.getNext().setPrev(node);
} else {
tail = node;
}
prev
null null
tail
64
Inserción (sin nodos dummy)