算法1.3先进先出队列API
public class Queue<Item> implements Iterable<Item> | ||||||
private Node first 指向最早添加的节点的链接 private Node last 指向最近添加的节点的链接 private int N
| ||||||
public boolean isEmpty() public int size() public void enqueue (Item item) 入队,尾插法。 public Item dequeue() 出队,同出栈。特别的,队为空时要把last指向null @Override public Iterator<Item> iterator() 返回一个迭代器 |
入队
出队
package _1_3linkedList;
import java.util.Iterator;
/*算法1.3 先进先出队列
*/
public class Queue<Item> implements Iterable<Item>
{
private Node first; /*指向最早添加的节点的链接*/
private Node last; /*指向最近添加的节点的链接*/
private int N; /*队列中的元素数量*/
private class Node
{
Item item;
Node next;
}
public boolean isEmpty()
{
return N==0; /*or first==null*/
}
public int size()
{
return N;
}
public void enqueue (Item item) /*入队,尾插法。*/
{
Node oldlast=last;
last=new Node(); /*创建一个节点,准备入队*/
last.item=item;
if(isEmpty()) /*进行判断*/
first=last; /*第一个元素入队之前,first和last指向同一个节点*/
else
oldlast.next=last;
N++;
}
public Item dequeue() /*出队,同出栈。特别的,队为空时要把last指向null*/
{
Item item=first.item;
first=first.next;
N--;
if(isEmpty()) /*进行判断*/
last=null; /*避免游离(覆盖掉无用的引用并回收无用的对象的内存)*/
return item;
}
@Override
public Iterator<Item> iterator()
{
return new ListIterator(); /*返回一个迭代器*/
}
private class ListIterator implements Iterator<Item>
{
private Node current=first;
@Override
public boolean hasNext()
{
return current!=null;
}
@Override
public Item next()
{
Item item=current.item;
current=current.next;
return item;
}
}
}
package _1_3linkedList;
import java.util.Scanner;
/*算法1.3 先进先出队列-测试用例
*/
public class TestQueue
{
public static void main(String[] args)
{
Queue<String> queue=new Queue<String>();
Scanner sc=new Scanner(System.in);
while(true)
{
String s=sc.nextLine();
if(s.equals("eof"))
break;
if(!s.equals("-"))
queue.enqueue(s);
else if(!queue.isEmpty()) /*是“-”且非空时出队*/
System.out.println(queue.dequeue());
}
for(String s:queue)
System.out.println(s);
sc.close();
}
}
q
wer
t
y
u
-
q
-
wer
wdc
sd
eof
t
y
u
wdc
sd