Queue ADT
首先我们需要了解队列是一种在一端插入另一端删除的结构。
他的基本操作是进队enqueue和出队dequeue,而且我们得知道它是一种先进先出的模型。
他也是一种表,是一种特殊的表,所以表的实现方式对他都是有用的。
单链表实现
public class MyQueue<AnyType> {
int theSize;
Node<AnyType> Bottom; //bottom是底部的一个空节点,永远的底部,相当于一个平台
public MyQueue(){doClear();}
public void clear(){doClear();}
public void doClear(){
Bottom=new Node<>(null,null);
theSize=0;
}
public class Node<AnyType>{
Node<AnyType> next;
AnyType data;
public Node(Node<AnyType> next,AnyType data){
this.next=next;
this.data=data;
}
}
public int size(){return theSize;}
public boolean isEmpty(){return size()==0;}
public Node<AnyType> getNode(int idx){
Node<AnyType> node=Bottom;
if(idx>size())
throw new IndexOutOfBoundsException();
for (int i = 0; i < idx; i++)
node=node.next;
return node;
}
//provide a interface for user to enqueue
public void enqueue(AnyType data){enqueue(size(),data);}
public void enqueue(int idx,AnyType data){enqueue(getNode(idx),data);}
public boolean enqueue(Node<AnyType> node,AnyType data){
Node<AnyType> newNode=new Node<>(null,data);
node.next=newNode;
theSize++;
return true;
}
//provide a interface for user to dequeue
public AnyType dequeue(){ return dequeue(1);}
public AnyType dequeue(int idx){return dequeue(getNode(idx));}
public AnyType dequeue(Node<AnyType> node){
Node<AnyType> nextNode=node.next;
Bottom.next=nextNode;
node.next=null;
theSize--;
return node.data;
}
}