数据结构&算法基础01---两栈实现一队列,两队列实现一栈

本文详细介绍了使用两个栈实现一个队列的出队操作,以及利用两个队列实现一个栈的出栈操作。通过具体代码展示了数据结构转换的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 两栈实现一队列---s2实现出队

    思路: 入队时,直接压入stack1中

                出队时,判断stack2是否为空,如果stack2为空,则将stack1中的元素转移到stack2中,then再将stack2的栈顶元死弹出;

                                                                       如果stack2不为空,直接弹出stack2中的元素

                              s.pash()   s.top()    s.pop()

//入队操作
void   Enqueue( stack<int> &s1, stack<int> &s2, int m)
{
    s1.push(m);
}
//出队操作
void  Dequeue( stack<int> &s1, stack<int> &s2, &int m)
{
    if(s2.empty())
    {
        int len = s1.size();
        for(int i=0; i<len; i++)
        {
            s2.push(s1.top());
            s2.pop();
        }
    }

    m = s2.top()
    s2.pop();
}

2  两个队列实现一个栈---q1实现出栈

思路:将queue1用来做进栈 &出栈操作     queue2作为中转战

            入栈时, 直接压入queue1中

            出栈时,先将queue1中除去最后一个元素外的元素依次出队列,并压入队列queue2中,将留在queue1中的最后一个元素出队列(即出队列元素),最后把queue2中的元素再次压入queue1中。

//进栈操作
void stackpush( queue<int> &q1, queue<int> &q2, int m)
{
    q1.push(m);
}

//出栈操作
void stackpop( queue<int> &q1, queue<int> &q2, int &m)
{
    int len1=q1.size();
    for(int i=0;i<len1-1; i++)
    {
        q2.push(q1.front());
        q1.pop();
    }
    m = q1.front();
    q1.pop();
    
    int len2=q2.size();
    for(int j=0;j<len2;j++)
    {
        q1.push(q2.front());
        q2.pop();
    }
}

reference:  https://www.cnblogs.com/tracyhan/p/5490775.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值