Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas...

64
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

Transcript of Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas...

Page 1: Programación de sistemas - Academia Cartagena99 › ... › apuntes › PilasYColas.pdf · Listas doblemente enlazadas • La implementación de colas dobles basada en listas enlazadas

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

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

• 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

• 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

• 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

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

(()(()())())

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

(()(()())())

(

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

(()(()())())

( (

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

(()(()())())

(

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

(()(()())())

( (

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

(()(()())())

( ( (

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

(()(()())())

( (

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

(()(()())())

( ( (

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

(()(()())())

( (

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

(()(()())())

(

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

(()(()())())

( (

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

(()(()())())

(

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

(()(()())())

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

([]{()<>}())

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

<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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

• 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

• 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

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

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

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

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

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

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

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

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

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

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

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

• 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

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

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

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

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

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

• 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

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

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

• 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

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

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

• 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

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

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

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)