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