zoukankan      html  css  js  c++  java
  • 栈的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;
    }
    

  • 相关阅读:
    rals gb2312编码
    义乌给力电子商务有限公司招聘网络推广专员
    [PHP]APACHE模块化安装PHP以及MySQL 配置@Windows(PHP5)
    wordpress将远程数据下载一份到本地20110228操作过程记录
    百万邮件群发业务
    Ruby 读写文件
    万网备案专题
    新ubuntu配置过程记录
    wordpress将远程数据下载一份到本地20110228操作过程记录
    万网备案专题
  • 原文地址:https://www.cnblogs.com/aLittleBitCool/p/1971689.html
Copyright © 2011-2022 走看看