![]()
/*循环队列 我们用数组实现
特点 :先进先出 我们设置一个队头front和队尾rear
当队列为空时front=rear,入队列时把数据放到rear的位置,然后rear向下移动一个
* 当rear再向下移动一位就和front指向同一块区域时(即rear+1=front),队列就已经装满了
* 出队列时,获取并返回front指向的区域所存的数据,front向下移动一个,当front=rear时队列为空
*
*/
package com.tulun;
public class TestMl {
public static void main(String[] args) {
// TODO Auto-generated method stub
QueueLink q1=new QueueLink();
for(int i=0;i<10;i++){
q1.push(i);
}
q1.show();
q1.pop();
q1.show();
int n=q1.getTop();
System.out.println(n);
}
}
class QueueLink{
int elem[];
int front;
int rear;
public QueueLink(){
this(10);
}
public QueueLink(int size){
this.elem=new int[size];
this.front=0;
this.rear=0;
}
int usedSize=0;
int allSize=10;
//判断是否为满
public boolean isFull(){
if((this.rear+1)%this.allSize==this.front){
return true;
}
return false;
}
//入队
public void push(int val){
if(isFull()){
return;
}
this.elem[this.rear]=val;
this.rear=(this.rear+1)%this.allSize;//后移一位
usedSize++;
}
public boolean isEmpty(){
//return this.front=this.rear;
if(this.front==this.rear){
return true;
}
return false;
}
public void pop(){
if(isEmpty()){
return;
}
this.elem[this.front]=-1;
this.front=(this.front+1)%this.allSize;
usedSize--;
}
public int getTop(){
if(isEmpty()){
return -1;
}
return this.elem[this.front];
}
public void show(){
for(int i=this.front;i<rear;i=(i+1)%this.allSize){
System.out.print(this.elem[i]+" ");
}
System.out.println();
}
}