数据结构之队列(java)

队列

先进先出 FIFO,在非空队列中,队首指针指向队头元素,队尾指针指向队尾元素的下一个位置。

顺序队列中的假溢出现象:(front:头指针,rear:尾指针)

循环队列:

循环队列充分利用了系统分配的空间,克服了“假溢出”现象。方法:将队列看成是一个首尾相接的圆环。

约定:rear所指的位置始终为空

队列为空时:front == rear;

队列满时:(rear+1) % size == front;(size:队列的空间大小)

class CQue{
	//循环队列
	
	private int size = 5;
	private int[] array;
	int front,rear;
	
	public CQue() {
		array = new int[this.size];
		front = rear =0;
	}
	
	/**
	 * 入队
	 * @param data
	 * @throws Exception 
	 */
	public int insert(int data) throws Exception {
		if (isFull()) {
			throw new Exception("queue is full !");
		}
		this.array[rear] = data;
		this.rear = (this.rear+1)%this.size;//移动队尾指针
		return this.rear;//返回队尾指针的位置
	}
	
	/**
	 * 出队
	 * @return 
	 * @throws Exception 
	 */
	public int remove() throws Exception {
		if (isEmpty()) {
			throw new Exception("queue is empty !");
		}
		int data =array[front]; //获取队首元素
		this.front = (this.front+1)%this.size;//移动队首指针
		return data;
		
	}
	
	/**
	 * 判断是否为空
	 * @return
	 */
	public boolean isEmpty() {
		return this.front == this.rear;
	}
	
	/**
	 * 判断队列是否满了
	 * @return
	 */
	public boolean isFull() {
		return ((this.rear + 1) % this.size) == this.front;
	}
	
	public int getSize() {
		return size;
	}
	public void setSize(int size) {
		this.size = size;
	}	
}

public class MyQueue {

	public static void main(String[] args) throws Exception {
		CQue queue = new CQue();
		System.out.println(queue.getSize() + "--"+queue.isEmpty() +"--"+queue.isFull());
		System.out.println(queue.insert(0));
		System.out.println(queue.insert(1));
		System.out.println(queue.insert(2));
		System.out.println(queue.insert(3));
		System.out.println(queue.isFull());
		//queue.insert(4);
		//System.out.println(queue.isFull());
		System.out.println(queue.remove());
		System.out.println(queue.remove());
		System.out.println(queue.remove());
		System.out.println(queue.remove());
		System.out.println(queue.remove());

	}

}


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值