java实现循环队列

队列

       队列是只允许在一端进行插入操作,在另一端进行删除操作的线性表。允许插入的一端称为队尾,允许删除的一端称为对头 (先进先出的特性)

     【1.顺序存储的队列应该把队列的所有元素都存储在数组的前n个单元,此时入队的操作相当于追加,不需要移动元素;但是出队操作的时间开销为O(n)---------->2.放宽队列的所有元素必须存储在前n个单元这一条件,只要求存储在数组中的连续的位置,就可以得到一种更为有效的存储方法,此时入队和出队的操作的时间开销都是O(1),因此需要设置对头、队尾指针,并且约定:对头指针front指向队头元素的前一个位置,队尾指针rear指向队尾元素--------->3.由2的单移动性产生的假溢出,解决办法:将存储队列的数组看成是头尾相接的循环结构,即允许队列直接从数组中下标最大的位置延续到下标最小的位置,队列的这种头尾相接的顺序存储结构称为循环队列】


循环队列类:

package edu.tcu.soft;

public class CirQueue<E> {
	// 声明一个对象数组
	private Object[] objects=new Object[5];
	// 声明队头指针、队尾指针
	private int front, rear;
    
	public CirQueue() {
		this.front =objects.length-1;
		this.rear = objects.length-1;
	}
    //入队操作
	public void enQueue(E e) {
      //先判断对列是否满
	  if(front==(rear+1)%objects.length){
		  System.out.println("队空间已满");
	  }else{
		  rear=(rear+1)%objects.length;//队尾指针在循环意义下加1
		  objects[rear]=e;
	  }
	}
	//出对操作
	@SuppressWarnings("unchecked")
	public E deQueue(){
		//先判断对列内是否有元素
		if(front==rear){
			System.out.println("队列内没有元素");
		}else{
			front=(front+1)%objects.length;//对头指针在循环意义下加1
			return (E)objects[front];//读取并返回出队前的对头元素
		}
		return null;
	}
	//获取对头的元素
	@SuppressWarnings("unchecked")
	public E getQueueTop(){
		if(front==rear){
			System.out.println("队列内没有元素");
		}else{
			int i=(front+1)%objects.length;//对头指针在循环意义下加1
			return (E) objects[i];//读取并返回出队前的对头元素
		}
		return null;
	}
}


测试类:

package edu.tcu.soft;

public class Test {
   public static void main(String[] args) {
	CirQueue<Integer> queue=new CirQueue<Integer>();
	queue.enQueue(1);
	queue.enQueue(2);
	queue.enQueue(3);
	queue.enQueue(4);
	queue.deQueue();
	queue.deQueue();
	queue.enQueue(5);
	queue.enQueue(6);
	queue.deQueue();
	queue.deQueue();
	queue.enQueue(7);
	queue.enQueue(8);
	
	System.out.println(queue.getQueueTop()+"---");
}
} 


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值