关于手动队列 (模板)

嗯....

 

关于队列,在c++中你直接可以用queue即可,这谁都会..

 

可为什么今天又要介绍手动队列呢???

 

因为手写队列比STL中的队列更灵活....

 

直奔主题,上模板代码:

 1 #include<cstdio>
 2 //手写队列比stl中的队列更灵活 
 3 using namespace std;
 4 
 5 int queue[12345],head=1,tail=0;
 6 /*queue数组模拟队列,head为头指针,tail为尾指针,注意head和tail的初始化,
 7 之所以head初始化为1.tail初始化为0.是因为在26行时,“return tail-head+1;”
 8 注意不能定义tail=1.head=0.如果一个队列中没有元素,那么“return tail-head+1;”
 9 仍为1,所以注意此处的初始化,虽然看起来别扭,但是这样可以避免上述情况*/ 
10 void push(int x)//此函数模拟队列中的入队,和栈中的入栈完全一样 
11 {
12     tail++;//尾指针后移,表示新入队的元素的下标 
13     queue[tail]=x;//将新元素入队 
14 }
15 
16 void pop()/*此函数模拟队列中的出队,和栈中的出栈有所不同,
17 栈中是将size(栈的大小)--,而队列中因为是先进先出,所以要从头部出,
18 头指针为head,所以将head++即将头元素弹出*/ 
19 {
20     head++;//头指针++表示头元素被弹出 
21 }
22 
23 int front()//此函数模拟队列中访问第一个元素 
24 {
25     return queue[head];//head为头指针,所以queue[head]即为头指针所对应的元素,将其返回即可 
26 }
27 
28 int size()/*此函数模拟队列大小,注意在栈中可以直接用size充当一个计数器,
29 而在队列中,知道了头指针和尾指针的位置,用tail-head+1即可求出队列长度 */ 
30 {
31     return tail-head+1;//注意返回时要加一 
32 }
33 //注意关于队列,pop、push操作无需返回值,而front、size操作需要返回值 

此代码中还牵扯到上一随笔中讲的栈的手动版...有兴趣的可以看一下....

 

批注很啰嗦,只是为了我自己看明白...相信你们肯定能看懂...........

猜你喜欢

转载自www.cnblogs.com/New-ljx/p/10341543.html