//先进先出队列
package Algorithms;
import java.util.Iterator;
import java.util.NoSuchElementException;
import edu.princeton.cs.algs4.StdIn;
import edu.princeton.cs.algs4.StdOut;
public class P95_Queue<Item> implements Iterable<Item> {
private Node<Item> first; //指向最早添加的结点的链接
private Node<Item> last; //指向最近添加的结点的链接
private int n; //队列中的元素数量
private static class Node<Item>{
//定义了结点的嵌套类
private Item item;
private Node<Item> next;
}
public P95_Queue(){
first = null;
last = null;
n = 0;
}
public boolean isEmprty(){
return first == null;
}
public int size(){
return n;
}
public Item peek(){
if (isEmprty()){
throw new NoSuchElementException("Queue underflow");
}
return first.item;
}
public void enqueue(Item item){
//向表尾添加元素
Node<Item> oldlast = last;
last = new Node<Item>();
last.item = item;
last.next = null;
if (isEmprty()){
first = last;
}
else{
oldlast.next = last;
}
n++;
}
public Item dequeue(){
//从表头删除元素
if (isEmprty()){
throw new NoSuchElementException("Queue underflow");
}
Item item = first.item;
first = first.next;
n--;
if (isEmprty()){
last = null;
}
return item;
}
public String toString(){
StringBuilder s = new StringBuilder();
for (Item item : this){
s.append(item + " ");
}
return s.toString();
}
public Iterator<Item> iterator(){
return new ListIterator<Item>(first);
}
private class ListIterator<Item> implements Iterator<Item>{
private Node<Item> current;
public ListIterator(Node<Item> first){
current = first;
}
@Override
public boolean hasNext() {
// TODO Auto-generated method stub
return current != null;
}
@Override
public Item next() {
// TODO Auto-generated method stub
if (!hasNext()){
throw new NoSuchElementException();
}
Item item = current.item;
current = current.next;
return item;
}
@Override
public void remove() {
// TODO Auto-generated method stub
throw new UnsupportedOperationException();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
P95_Queue<String> queue = new P95_Queue<String>();
while (!StdIn.isEmpty()){
String item = StdIn.readString();
if (!item.equals("-")){
queue.enqueue(item);
}
else if (!queue.isEmprty()){
StdOut.print(queue.dequeue() + " ");
}
}
StdOut.println("(" + queue.size() + " left on queue)");
}
}
先进先出队列
最新推荐文章于 2023-08-24 20:48:43 发布