栈和队列数据存储类型---队列(简单了解)

引言

    前面介绍了栈数据存储类型,下面接着介绍队列数据存储类型。队列和栈一样也被用作程序员的工具。队列也是一种数据结构,有点类似栈,只是在队列中第一个插入的数据项也会最先被移除,先进先出。队列的作用就像人们排队买东西,第一个排队的人对于后面的人来说就是队头,队伍最后一个人对于整个队伍来说就是队尾。

    现实排队中,当前一个人买完东西离开队伍后,其他人都向前移动。但是在计算机中,虽然也可以删除一个队头的数据项,后面的数据项都向前移动,但是这样效率很差。所以我们加入队头和队尾的坐标指针,是指针移动来保持所有的数据项位置不变,来区分队头和队尾。

    这样会出现,队尾的指针已经不能向后移动,但是队头的数据已经移除,队列不满但是不能插入新的数据项问题。所以为了避免队列不满去不能插入新数据项问题,可以让队头队尾指针环绕到数组开始的位置。这就是循环队列。

/**
 * 简单队列
 * @author whmAdmin
 *
 */
public class Queue {

	private int maxSize;	//最大元素数量
	private long[] queArray;// 队列数组
	private int front;//队头位置
	private int rear;//队尾位置
	private int nItems;// 当前数据项个数
	
	/**
	 * 初始化队列
	 * @param s 队列大小
	 */
	public Queue(int s) {
		maxSize = s;
		queArray = new long[maxSize];
		front = 0;
		rear = -1;
		nItems = 0;
	}
	
	/**
	 * 队列插入元素
	 * @param j 元素
	 */
	public void insert(long j){
		if(rear == maxSize - 1) {
			rear = -1;
		}
		queArray[++rear] = j;
		nItems++;
	}
	
	/**
	 * 删除元素
	 * @return
	 */
	public long remove() {
		long temp = queArray[front++];
		if(front == maxSize) {
			front = 0;
		}
		nItems--;
		return temp;
	}
	
	//获取当前头元素
	public long peekFront() {
		return queArray[front];
	}
	
	public boolean isEmpty() {
		return (nItems == 0);
	}
	
	public int size() {
		return nItems;
	}
	
	public static void main(String[] args) {
		Queue queue = new Queue(6);
		
		queue.insert(10);
		queue.insert(20);
		queue.insert(30);
		queue.insert(40);
		queue.insert(50);

		queue.remove();
		queue.remove();
		queue.remove();
		
		queue.insert(60);
		queue.insert(70);
		queue.insert(80);
		queue.insert(90);
		
		while (!queue.isEmpty()) {
			long n = queue.remove();
			System.out.print(n);
			System.out.print(" ");
		}
		System.out.println("");
	}
}

运行结果:

40 50 60 70 80 90 
    但是这样还会出现,当队列满的时候,front和rear指针取一定的位置,但是当队列为空时,也可能呈现相同的位置关系。于是在同一时间,队列似乎可能是满的,也可能是空的。所以需要让数组的容量比队列数据项个数的最大值还要大一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值