基于visual Studio2013解决面试题之0409判断一个栈是否另外一个栈的弹出序列

来源:互联网 发布:mysql的left方法 编辑:程序博客网 时间:2024/06/06 01:30



题目



解决代码及点评

/*判断某个序列是否出栈序列,比如 4 3 5 2 1,是1,2,3,4,5的出栈序列解决方法:使用栈数据结构,第一个栈存原始数据1,2,3,4,5,第二个栈是活动栈第三个栈保存 4,3,5,2,1做法是通过将原始数据栈往活动栈丢,没丢一次判断活动栈顶和第三个栈顶数据是否相同,如果相同则都弹出当第三个栈空了时,说明成功当第一个栈空了,依旧没能匹配到和第三个栈顶相同的元素时,说明失败*/#include <iostream>#include <stack>using namespace std;// 栈类class Stack{public:int* _data;  // 数据int _size;   // 数据大小int _top;    // 栈顶元素// 构造函数,初始化成员变量Stack(int size = 10) :_data(NULL), _size(size), _top(0){if (_size > 0){_data = new int[_size];}}// 析构函数,释放内存~Stack(){if (_data) delete[]_data;}// 弹出void pop(){if (_top > 0) --_top;}// 压栈void push(int data){_data[_top++] = data;}// 获取栈顶元素int top(){return _data[_top - 1];}// 判断栈是否为空bool empty(){return _top == 0;}};Stack readyToPush;  // 第一个栈,保存 1,2,3,4,5数据Stack Push;// 第二个活动栈Stack Pop;// 第三个待判断序列int main(){// 构造第一个栈for (int i = 1; i <= 5; i++){readyToPush.push(6 - i);  /* push 5, 4, 3, 2, 1 to Stack */}// 构造第三个栈Pop.push(1);Pop.push(2);Pop.push(3);Pop.push(5);Pop.push(4);// 判断算法for (;;){// 将数据送一个到活动栈if (!readyToPush.empty()){Push.push(readyToPush.top());readyToPush.pop();}// 如果没数据可送,那么说明失败了else{cout << "Error" << endl;break;}// 看活动栈顶,是否等于第三个栈栈顶if (Push.top() == Pop.top()){// 如果相等,则以其弹出Push.pop();Pop.pop();// 如果第三个栈弹空了,说明判断结束,并且结果是对的if (Pop.empty()){cout << "OK" << endl;break;}}}system("pause");return 0;}


代码下载及其运行

代码下载地址:http://download.csdn.net/detail/yincheng01/6704519

解压密码:c.itcast.cn


下载代码并解压后,用VC2013打开interview.sln,并设置对应的启动项目后,点击运行即可,具体步骤如下:

1)设置启动项目:右键点击解决方案,在弹出菜单中选择“设置启动项目”


2)在下拉框中选择相应项目,项目名和博客编号一致

3)点击“本地Windows调试器”运行


程序运行结果








0 0
原创粉丝点击