链表实现队列
/**
* 队列:先进先出
* 添加节点:在表尾添加
* 删除节点:在表头删除
* @param <Item>
*/
public class Queue<Item> {
private int N = 0; //队列的大小
private Node first = null;//表头
private Node last = null;//表尾
private class Node{
Item item;
Node next;
}
public boolean isEmpty(){
return first==null;
}
public int size(){
return N;
}
/**
* 添加到表尾
* @param item
*/
public void push(Item item){
Node temp = last;
last = new Node();
last.item=item;
last.next=null;
if(isEmpty()) first=last; //此时队列还没有节点,那么表头就是表尾
else temp.next=last; //此时队列存在其他节点,那么将之前的最后一个节点和新节点相连
N+=1;
}
/**
* 从表头删除
* @return
*/
public Item pop(){
Item item = first.item;
first = first.next;
N-=1;
if(isEmpty()) last=null;
return item;
}
}
如果要实现迭代,队列和栈完全一样,可参考:链表实现下压栈
队列是一种先进先出的数据结构。用链表实现队列,新添加的节点应该在链表的尾部,要使用(删除)的节点应该使用链表头部的节点。
其:
- 可以处理任何类型的数据
- 所需要的空间和栈的大小成正比
- 操作所需要的时间和栈的大小无关