Livro de Sedgewick e Wayne: sec.1.3, p.120. Website do livro: resumo sec.1.3, slides. Veja também a página algs4.cs.princeton.edu/code/, que tem o código fonte, a documentação, e dados de teste de todos os programas do livro.
Esta aula examina o conceito de fila (que o leitor já conhece muito bem) como exemplo de ADT.
Resumo:
Pré-requisitos:
public class Queue<Item> | ||
Queue() | construtor: cria uma fila de Items vazia | |
void | enqueue(Item item) | coloca item nesta fila |
Item | dequeue() | remove o item mais antigo desta fila |
boolean | isEmpty() | esta fila está vazia? |
int | size() | número de Items nesta fila |
circularcom redimensionamento. Faça isso sem olhar o código ResizingArrayQueue.java do livro.
public class QueueL<Item> { private Node first; // mais recente private Node last; // mais antigo private int N; private class Node { private Item item; private Node next; } public boolean isEmpty() { return first == null; } public int size() { return N; } public void enqueue(Item item) { Node oldlast = last; last = new Node(); last.item = item; last.next = null; if (isEmpty()) first = last; else oldlast.next = last; N++; } public Item dequeue() { Item item = first.item; first = first.next; N--; if (isEmpty()) last = null; return item; } public static void main(String[] args) { QueueL<String> q = new QueueL<String>(); while (!StdIn.isEmpty()) { String item = StdIn.readString(); if (!item.equals("-")) q.enqueue(item); else if (!q.isEmpty()) StdOut.print(q.dequeue() + " "); } StdOut.println("(" + q.size() + " left on queue)"); } }
% more tobe.txt to be or not to - be - - that - - - is % java QueueL < tobe.txt to be or not to be (2 left on queue)
profissional; veja a API correspondente.