什么是队列呢?对于老手可能很简单,对于新手也不难,但是你是否遇到过一学就会,一做就废的经历呢?
哈哈,废话不多说,上飞机。
队列很好理解。
想象有一队小朋友,他们都看着前前一个小朋友的后脑勺排成一列,当然除了第一个小朋友。
那么这列小朋友就组成的一个队列。是不是很简单。
在编程中队列可以用多种数据结构实现,例如数组,链表等。
那么如何去操作队列呢?
假设只能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这样的操作系统中,指令队列都是必不可少的部分。其他有趣的应用还有很多。队列的变体也有很多,充满活力的探索吧!