队列之双队列

双队列指的是两个队列,不是双端队列,2333。

如果题目要求你用队列实现DFS,你是否会高呼amazing,unbelievable!其实,用队列实现DFS的本质就是问用队列实现栈结构,因为DFS本身就是基于栈实现的。

我们知道,基础队列是先进先出的,而栈是先进后出的,两个完全相反的结构,但是正因为相反,才有相互转换的可能。

假设我们有两个队列data、help,用他们两个实现一个栈。

push:将数据打进data队列

pop:将队列中的元素在保留队尾的情况下,将其他的数据全部打入help,输出data的元素,清空data,再将help与data交换即可。

因为栈的pop要的只是最后一个入栈的元素,对于队列来说,这个元素一定在队尾,所以只要将前面的元素按照顺序维持在另一个结构里【自然是help队列】,将队尾元素pop后,交换两个队列即可。

top:将队列中的元素在保留队尾的情况下,将其他的数据全部打入help,输出data的元素,但不清空data。

代码:

#include<queue>
#include<cstdio>
using namespace std;
typedef struct{
    queue<int>data,help;
    void push(int val){
        data.push(val);
    }
    void pop(){
        while(data.size()>1){
            help.push(data.front());
            data.pop();
        }
        data.pop();
        swap(help,data);
    }
    int top(){
        while(data.size()>1){
            help.push(data.front());
            data.pop();
        }
        return data.front();
    }
}Stack;

int main(){
    Stack V;
    V.push(1);
    V.push(2);
    V.push(3);        
    V.push(4);
    printf("1234入栈后,栈顶:%d\n",V.top());
    V.pop();
    printf("出栈一个后,栈顶:%d\n",V.top());
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值