programaci£³n de sistemas - academia ¢â‚¬› ......

Download Programaci£³n de sistemas - Academia ¢â‚¬› ... ¢â‚¬› apuntes ¢â‚¬›  ¢  Listas doblemente enlazadas

Post on 03-Jul-2020

4 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Pilas y Colas

    Programación de sistemas

    Julio Villena Román

    MATERIALES BASADOS EN EL TRABAJO DE DIFERENTES AUTORES:

    Carlos Delgado Kloos, Jesús Arias Fisteus, Carlos Alario Hoyos

    1

  •  Pilas (stacks)

     Colas (queues)

     Colas dobles (deques – double-ended queues)

    Contenidos

    2

  • • Estructura de datos lineal

    • Inserción y extracción por un único extremo

     LIFO (Last-In-First-Out)

    Pilas

    3

  • • Insertar por un extremo: push(x)

    • Extraer por el mismo extremo: pop()

    Pilas

    4

  • • 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

  • 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

  • (()(()())())

    7

    Ejemplo: (()(()())())

  • (()(()())())

    (

    8

    Ejemplo: (()(()())())

  • (()(()())())

    ( (

    Ejemplo: (()(()())())

    9

  • (()(()())())

    (

    Ejemplo: (()(()())())

    10

  • (()(()())())

    ( (

    Ejemplo: (()(()())())

    11

  • (()(()())())

    ( ( (

    Ejemplo: (()(()())())

    12

  • (()(()())())

    ( (

    Ejemplo: (()(()())())

    13

  • (()(()())())

    ( ( (

    Ejemplo: (()(()())())

    14

  • (()(()())())

    ( (

    Ejemplo: (()(()())())

    15

  • (()(()())())

    (

    Ejemplo: (()(()())())

    16

  • (()(()())())

    ( (

    Ejemplo: (()(()())())

    17

  • (()(()())())

    (

    Ejemplo: (()(()())())

    18

  • (()(()())())

    Correcto: Expresión completa y pila vacía!!

    Ejemplo: (()(()())())

    19

  • ([]{()}())

    Correcto: Expresión completa y pila vacía!!

    20

    Ejemplo: ([]{()}())

  • hello • Correcto en HTML 1.0-4.0

    • Incorrecto en XHTML

    hello • Correcto en ambos

    21

    Ejemplo: HTML

  • Interfaz para pilas

    public interface Stack {

    boolean isEmpty();

    int size();

    E top();

    void push(E info);

    E pop();

    }

    22

  • Interfaz para pilas (con excepciones)

    public interface Stack {

    boolean isEmpty();

    int size();

    E top() throws

    EmptyStackException;

    void push(E info) throws

    StackOverflowException;

    E pop() throws

    EmptyStackException;

    }

    23

  • Una interfaz dos implementaciones

    • Implementación basada en arrays:

     ArrayStack

    • Implementación basada en listas enlazadas:

     LinkedStack

    24

  • 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

  • public class ArrayStack implements Stack {

    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)

  • 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)

  • public void push(E o)

    throws StackOverflowException {

    if (size == capacity)

    throw new StackOverflowException();

    data[++top] = o;

    }

    28

    ArrayStack (III)

  • public E pop() throws StackEmptyException {

    E o;

    if (top == -1)

    throw new EmptyStackException();

    o = data[top];

    data[top--] = null;

    return o;

    }

    }

    29

    ArrayStack (IV)

  • LinkedStack

    Pila vacía

    Pila con 1 elemento

    Pila con 4 elementos

    Extremo de inserción y extracción

    30

  • Recordando la clase Node

    public class Node {

    private E info;

    private Node next;

    public Node() {…}

    public Node(E info) {…}

    public Node(E info, Node next) {…}

    public Node getNext() {…}

    public void setNext(Node next) {…}

    public E getInfo() {…}

    public void setInfo(E info) {…}

    }

    31

  • LinkedStack (I)

    public class LinkedStack implements Stack {

    private Node 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

  • Moscú

    Madrid Miami Múnich

    top

    33

    Inserción (push)

  • Madrid Miami Múnich Moscú

    top

    34

    Extracción (pop)

  • LinkedStack (II)

    public void push(E info){

    Node n = new Node(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

  • • Estructura de datos lineal

    • Inserción por un extremo y extracción por el

    exremo opuesto

     FIFO (First-In-First-Out)

    Colas

    36

  • • Insertar por un extremo: enqueue(x)

    • Extraer por el extremo opuesto: dequeue()

    Colas

    37

  • Interfaz para colas

    public interface Queue {

    boolean isEmpty();

    int size();

    E front();

    void enqueue (E info);

    E dequeue();

    }

    38

  • Interfaz para colas (con excepciones)

    public interface Queue {

    boolean isEmpty();

    int size();

    E front() throws

    EmptyQueueException;

    void enqueue (E info) throws

    QueueOverflowException;

    E dequeue() throws

    EmptyQueueException;

    }

    39

  • Una interfaz dos implementaciones

    • Implementación basada en arrays:

     ArrayQueue

    • Implementación basada en listas enlazadas:

     LinkedQueue

    40

  • 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

  • LinkedQueue

    Cola vacía

    Cola con 1 elemento

    Cola con 4 elementos

    Extremo de extracción Extremo de

    inserción

    42

  • LinkedQueue (I)

    public class L

Recommended

View more >