顺序队列的表示与实现

顺序队列:用一组地址连续的存储单元依次存放从队头到队尾的元素,然后定义front和rear指针分别指示队头元素和队尾元素的位置,进行插入、删除等操作。
为防止假溢出,设计出了循环队列。
顺序队列的表示与实现_第1张图片
–>队列的初始化

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();
 }

执行结果
顺序队列的表示与实现_第2张图片

你可能感兴趣的:(顺序队列的表示与实现)