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.