数据结构之循环队列

1.循环队列是什么?

为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。这种循环队列可以以单链表的方式来在实际编程应用中来实现。(来自百度百科)

怎么理解上面这段话呢?

就是说在现实生活的数个人排队办理业务,办完业务的人自然就走了,后边的人会往前顶。但是在程序设计中,代码是死的,他不会自动往前顶。因而循环队列就出现了。

2.循环队列存在的意义?

其实就是像上段话说的解决代码中数据不会自动往前顶,会出现前边已经空了,但是插不进数据的问题。

怎么解决的呢?

数据不会往前顶,但是尾部指针可以放到最前端,这样根据队列真是的长度判断数据队列是否为满。

3.代码实现

package 队列;
//循环队列
public class Queue {
	private int size;
	private int [] queArray;
	private int head; //队头
	private int tail; //队尾
	private int length; //长度
	
	//实例化类
	public Queue(int size) {
		this.size = size;
		this.head = 0;
		this.tail = -1;
		this.length = 0;
	}
	
	//入队列
	public void push(int value) {
		if(isfull()) {
			System.out.println("队列已满!!");
		}else {
			if(tail == size - 1) {
				tail = -1;
				queArray[++tail] = value;
			}else {
				queArray[++tail] = value;
			}
		}
	}
	//出队列
	public void out() {
		if(isnull()) {
			System.out.println("队列已空!!");
		}else {
			if(head == size - 1) {
				System.out.println(queArray[head]);
				head = 0;
			}else {
				System.out.println(queArray[head]);
				head ++;
			}
		}
	}
	//判断是否为空
	public boolean isnull() {
		if(length == 0) {
			return true; 
		}else {
			return false;
		}
	}
	//判断是否为满
	public boolean isfull() {
		if(length == size) {
			return true;
		}else {
			return false;
		}
	}
	//获取队头元素
	public int gethead() throws Exception {
		if(isnull()) {
			throw new Exception("队列为空!!");
		}else {
			return queArray[head];
		}
	}
}

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值