顺序队列:用一组地址连续的存储单元依次存放从队头到队尾的元素,然后定义front和rear指针分别指示队头元素和队尾元素的位置,进行插入、删除等操作。
为防止假溢出,设计出了循环队列。
–>队列的初始化
sequenceQuence(){
front=rear=0;
quenceArray=(T[])new Object[MaxSize];
}
–>入队
void enQuence(T obj){
if((rear+1)%quenceArray.length==front){
T[] p=(T[])new Object[quenceArray.length*2];
if(rear==quenceArray.length-1){
for(int i=0;i<=rear;i++){
p[i]=quenceArray[i];
}
}else{
int i,j=1;
for(i=front;i<quenceArray.length;i++,j++){
p[j]=quenceArray[i];
}
for(i=0;i<=rear;i++,j++){
p[j]=quenceArray[i];
}
front=0;
rear=quenceArray.length-1;
}
quenceArray=p;
}
rear=(rear+1)%quenceArray.length;
quenceArray[rear]=obj;
}
–>取出头元素
T GetTop(){
if(isEmpty()){
System.out.println("队列已空,无法出队!");
return null;
}
return quenceArray[(front+1)%quenceArray.length];
}
–>判空
boolean isEmpty(){
return front==rear;
}
–>求队列的长度
int size(){
return (rear-front+quenceArray.length)%quenceArray.length;
}
–>遍历队列
void nextOrder(){
int j=front;
for(int i=1;i<=size();i++){
System.out.print((front+i)%quenceArray.length);
}
System.out.println();
}
–>清空队列
void clear(){
front=rear=0;
}
–>主函数
public static void main(String args[]){
sequenceQuence<Character> s=new sequenceQuence<Character>();
s.enQuence('A');
System.out.println("执行插入操作后队中的数据元素为");
s.nextOrder();
s.enQuence('B');
System.out.println("执行插入操作后队中的数据元素为");
s.nextOrder();
s.enQuence('C');
System.out.println("执行插入操作后队中的数据元素为");
s.nextOrder();
s.enQuence('D');
System.out.println("执行插入操作后队中的数据元素为");
s.nextOrder();
s.enQuence('E');
System.out.println("执行插入操作后队中的数据元素为");
s.nextOrder();
System.out.println("队中的数据元素为");
s.nextOrder();
s.Dequence();
System.out.println("执行删除操作后队中的数据元素为");
s.nextOrder();
s.Dequence();
System.out.println("执行删除操作后队中的数据元素为");
s.nextOrder();
s.Dequence();
System.out.println("执行删除操作后队中的数据元素为");
s.nextOrder();
System.out.println("队中的数据元素为");
s.nextOrder();
}
执行结果