队列:
队列也是一种线性结构,相比与其他线性结构,队列结构有其独特的运算规则,队列结构的逻辑特点就像是现实生活的排队,后来的站在队尾,先来的从队首离开,也就说队列是一种FIFO(先进先出)的数据结构。队列的存储结构也有两种(1)顺序存储结构,一维数组实现(2)链式存储结构,链表实现
队列的实现的关键:
队列相对于堆栈来说多了一个位置标志,那么对于双位置标志来说,怎样判断队列为空就是关键点。队首为front,队尾为rear,那么front==rear就是队列为空了么,并不是。此时front和rear都指向同一个元素,并不是队列为空。所以要引入队列长度,当队列长度为0,队列为空。
用java实现队列:
成员变量:
public class Queue {
int length=50;//顺序结构数组长度
int []array;//存储数组
int front;//队首
int rear;//队尾
int queueLength;//队列长度}
构造函数:
rear=-1的原因:保证当从队尾添加第一个元素时,rear=0.
public Queue(){
array=new int[length];
front=0;//队首为0
rear=-1;//队尾为-1
queueLength=0;//
}
判断是否为空:
public boolean isEmpty(){
if(queueLength==0)return true;
else return false;
}
判断是否已满:
public boolean isFull(){
if(rear==(length-1)) return true;
else return false;
}
还原标志位:
public void clear(){
rear=-1;
front=0;
}
释放队列空间:
public void free(){
array=null;
}
进队列:
public int inQueue(int data){
if (isFull()) {
System.out.println("队列已满,不能入队");
return 0;
}//元素已满,入队失败。
else{
rear++;
array[rear]=data;
queueLength++;
return 1;
}
}
出队列:
public int outQueue(){
if(isEmpty()) {
System.out.println("队列已空,不能出队");
return 0;}
else{
int data=array[front];
front++;
queueLength--;
return data;
}
}
打印队列中的数据:
public void traversal(){
if(isEmpty()){
System.out.println("这是一个空队列");
}
else{
for(int i=front;i<=rear;i++){
System.out.print(array[i]+" ");
}
System.out.println();}
}