栈的push、pop序列

题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。 

比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的pop序列就是4、5、3、2、1。但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。

模拟解之~判断栈顶元素与pop元素是否相等,不等则push,相等则出栈,继续比较栈顶元素与pop元素。代码如下:

//栈的push、pop序列
#include<iostream>
#include<stack>
const int SIZE=5;                  //定义长度
using namespace std;
bool judge(int Spush[],int Spop[]){
    stack<int> my_stack;
    int iPush=0,iPop=0;
    while(iPush<SIZE){                //当栈顶和pop相等时,将pop后的栈顶与pop之后的元素相比,直到不等
        cout<<"push "<<Spush[iPush]<<endl;         //测试
        my_stack.push(Spush[iPush]);
        while(!my_stack.empty()&&iPop!=5&&my_stack.top()==Spop[iPop]){  //小心数组越界
            cout<<"pop "<<Spop[iPop]<<endl;      //测试
            iPop++;
            my_stack.pop();
        }
        iPush++;
    }
    if(iPop==SIZE) return true;
    else return false;
}
int main(void){
    int Spush[SIZE],Spop[SIZE];
    for(int i=0;i<SIZE;i++)
        cin>>Spush[i];
    for(int i=0;i<SIZE;i++)
        cin>>Spop[i];
    if(judge(Spush,Spop)) cout<<"Yes"<<endl;
    else cout<<"No"<<endl;
    system("pause");
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值