嗯....
关于队列,在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操作需要返回值
此代码中还牵扯到上一随笔中讲的栈的手动版...有兴趣的可以看一下....
批注很啰嗦,只是为了我自己看明白...相信你们肯定能看懂...........