白话数据结构之队列

什么是队列呢?对于老手可能很简单,对于新手也不难,但是你是否遇到过一学就会,一做就废的经历呢?

哈哈,废话不多说,上飞机。

队列很好理解。

想象有一队小朋友,他们都看着前前一个小朋友的后脑勺排成一列,当然除了第一个小朋友。

那么这列小朋友就组成的一个队列。是不是很简单。

在编程中队列可以用多种数据结构实现,例如数组,链表等。

那么如何去操作队列呢?

假设只能10个小朋友排成一列。

取队列头元素

队列是一种先进先出的数据结构,只能第一个小朋友出来。
此时,第一个小朋友从队列头移走了,现在队列有9位小朋友。

为队列添加元素

为队列添加元素只能从队尾添加,此时有另一位小朋友从队尾补上那一位空缺,此时还剩10位小朋友。

获取队列元素数量

让小朋友从头到位以此报数,最后一位小朋友报的数就是队列内元素的总数。

判断队列是否满

看一下最后一位小朋友报的数是否等于10就可以判断队列是否满。

当然,这只是理论理解,接下来让我们动手实现一个队列吧!


编程语言:java
接下来就是实现代码了。
队列代码:

public class Queue {
	//队列长度
	private int MAX_QUEUE_NUM=10;
	//定义队列,使用数组实现
	private	int [] queue=new int[MAX_QUEUE_NUM];
	//队列头
	private int head=-1;
	//队列尾
	private int end=-1;
	//队列中元素的个数
	private int ElementNum=0;
	
	//插入元素
	public boolean offer(int num) {
		
		if(ElementNum==10) 
		{
			System.out.println("队列已满");
			return false;
		}
		if(head==-1&&end==-1)
		{
			head=0;
			end=0;
			queue[0]=num;
			ElementNum++;
			return true;
		}
		if(end==9)
		{
			end=0;
			queue[end]=num;
			ElementNum++;
			return true;
		}else
		{
			end++;
			queue[end]=num;
			ElementNum++;
			return true;
		}
	}
	

	//取出第一个元素并移出队列
	public boolean poll() {
		
		if(head==-1)
		{
			System.out.println("队列为空");
			return false;
		}
		if(ElementNum==1)
		{
			System.out.println("取出数:"+queue[head]);
			head=-1;
			end=-1;
			ElementNum--;
			return true;
		}else
		{
			System.out.println("取出数:"+queue[head]);
			if(head==9)
			{
				head=0;
				ElementNum--;
				return true;
			}
			head++;
			ElementNum--;
			return true;
		}
		
		
	}
	

	//获取队列大小
	
	public int size() {
		System.out.println("队列中的数总数为:"+ElementNum);
		return 0;
	}

	

}

测试代码:

public static void main(String[] args) {
		// TODO Auto-generated method stub
		Queue q=new Queue();
		for(int i=0;i<11;i++)
		{
			q.offer(i);
			q.size();
		}
		for(int i=0;i<12;i++)
		{
			q.poll();
			q.size();
		}
	}

测试结果:

队列中的数总数为:1
队列中的数总数为:2
队列中的数总数为:3
队列中的数总数为:4
队列中的数总数为:5
队列中的数总数为:6
队列中的数总数为:7
队列中的数总数为:8
队列中的数总数为:9
队列中的数总数为:10
队列已满
队列中的数总数为:10
取出数:0
队列中的数总数为:9
取出数:1
队列中的数总数为:8
取出数:2
队列中的数总数为:7
取出数:3
队列中的数总数为:6
取出数:4
队列中的数总数为:5
取出数:5
队列中的数总数为:4
取出数:6
队列中的数总数为:3
取出数:7
队列中的数总数为:2
取出数:8
队列中的数总数为:1
取出数:9
队列中的数总数为:0
队列为空
队列中的数总数为:0
队列为空
队列中的数总数为:0

当然,这只是最简单的用一个数组实现队列,使用C语言,你还可以尝试用链表实现。
另外队列的应用也很广发,如消息队列,指令队列就是一个很广泛的应用,无论是在微处理器系统中还是在Windows这样的操作系统中,指令队列都是必不可少的部分。其他有趣的应用还有很多。队列的变体也有很多,充满活力的探索吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值