当前位置:   article > 正文

第十九天 队列的逻辑 队列栈区别_q[++rear]

q[++rear]

        队列就像排队一样,先进先出。元素从队尾入队,rear+1。要从队首弹出元素,front+1。要注意不论是rear还是front都只是一个数组的下标(手工栈)。比如进一个元素x入队,q[++rear]假如rear是0,等于把x的值赋给q1了,再把y的值赋给q2,这样一个q1=x,q2=y的队列就形成了,把元素弹出队列的时候只需++front就行了,因为front和rear共用一个下标。

比如下面这个,push是写一个数入队,pop是弹一个数出队,query是查询队首第k个元素。

#include<bits/stdc++.h>

using namespace std;

int x,k,q[100001],front=1,rear=0;

char str[100001];

int main()

{  

    scanf("%d",&m);

    for(int i=1;i<=m;i++)

    {

        scanf("%s",str);

        if(str[2]=='s')   //就是push

        {   scanf("%d",x)

            q[++rear]=x;   //从队尾进队

        }

        else if(str[1]=='o')//就是pop删除

        {

            ++front;/*队首元素出队,我觉得其实不是不存在了,用str[1]还是能调出来,只不过不在队首和队尾之间了。*/

        }

        else//就是查询队首第几个元素

        {

            scanf("%d",k);

            printf("%d\n",q[front+x-1]);  //想不清楚可以用第一个元素来验证

        }

    }

}

这个是先把x入队,再把2x和2x+1入队,显示x,然后弹出x。这样进行k次。

#include<bits/stdc++.h>

using namespace std;

int x,k,q[200002],front=1,rear=0;

int main()

{  

    scanf("%d%d",&x,&k);

    q[++rear]=x;   //x入队

    for(int i=1;i<=k;i++)

    {

        q[++rear]=2*q[front];

        q[++rear]=2*q[front]+1;  //2x和2x+1分别入队

        printf("%d",q[front]);

        ++front;  //弹出队首元素

    }

}

      队列和操作方法的不同的实现我觉得是因为,变量像水,栈像一个有底的杯子,只用一个变量top表示从杯口取出就行了,而队列像一个管子,需要用一个变量front表示进水口,另一个rear表示出水口。 

感觉好像找到了学习编程一点方法,不知道感觉对不对,反正一直走下去不会错。只要一直向前,世上就没有弯路。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/928345
推荐阅读
相关标签
  

闽ICP备14008679号