JZ-C-22

剑指offer第二十二题:栈的压入、弹出序列

  1 //============================================================================
  2 // Name        : JZ-C-22.cpp
  3 // Author      : Laughing_Lz
  4 // Version     :
  5 // Copyright   : All Right Reserved
  6 // Description : 栈的压入、弹出序列
  7 //============================================================================
  8
  9 #include <iostream>
 10 #include <stdio.h>
 11 #include <stack>
 12 using namespace std;
 13 /**
 14  *给定两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列是否会是该栈的弹出顺序
 15  */
 16 bool IsPopOrder(const int* pPush, const int* pPop, int nLength) {
 17     std::stack<int> StackData; //辅助栈
 18     if (pPush != NULL && pPop != NULL && nLength != 0) {
 19         int pLength = nLength-1;//pLength指的是压入栈剩余未进辅助栈的数目
 20         StackData.push(*pPush);
 21         while (!StackData.empty()) { //每次将辅助栈的栈顶元素和弹出栈序列第一个数比较,直至全部比较完毕
 22             if (StackData.top() != *pPop && pLength > 0) {
 23                 pPush++;
 24                 StackData.push(*pPush);
 25                 pLength--;
 26             } else if (StackData.top() != *pPop && pLength <= 0) {
 27                 return false; //弹出栈序列有错误,直接退出循环
 28             } else {
 29                 StackData.pop();
 30                 pPop++;
 31                 if(StackData.empty() && pLength > 0){//出栈后若辅助栈为空,继续压入‘压入栈序列’后续元素
 32                     StackData.push(*pPush);
 33                 }
 34             }
 35         }
 36     } else {
 37         return false;
 38     }
 39     return true;
 40 }
 41
 42 // ====================测试代码====================
 43 void Test(char* testName, const int* pPush, const int* pPop, int nLength,
 44         bool expected) {
 45     if (testName != NULL)
 46         printf("%s begins: ", testName);
 47
 48     if (IsPopOrder(pPush, pPop, nLength) == expected)
 49         printf("Passed.\n");
 50     else
 51         printf("failed.\n");
 52 }
 53
 54 void Test1() {
 55     const int nLength = 5;
 56     int push[nLength] = { 1, 2, 3, 4, 5 };
 57     int pop[nLength] = { 4, 5, 3, 2, 1 };
 58
 59     Test("Test1", push, pop, nLength, true);
 60 }
 61
 62 void Test2() {
 63     const int nLength = 5;
 64     int push[nLength] = { 1, 2, 3, 4, 5 };
 65     int pop[nLength] = { 3, 5, 4, 2, 1 };
 66
 67     Test("Test2", push, pop, nLength, true);
 68 }
 69
 70 void Test3() {
 71     const int nLength = 5;
 72     int push[nLength] = { 1, 2, 3, 4, 5 };
 73     int pop[nLength] = { 4, 3, 5, 1, 2 };
 74
 75     Test("Test3", push, pop, nLength, false);
 76 }
 77
 78 void Test4() {
 79     const int nLength = 5;
 80     int push[nLength] = { 1, 2, 3, 4, 5 };
 81     int pop[nLength] = { 3, 5, 4, 1, 2 };
 82
 83     Test("Test4", push, pop, nLength, false);
 84 }
 85
 86 // push和pop序列只有一个数字
 87 void Test5() {
 88     const int nLength = 1;
 89     int push[nLength] = { 1 };
 90     int pop[nLength] = { 2 };
 91
 92     Test("Test5", push, pop, nLength, false);
 93 }
 94
 95 void Test6() {
 96     const int nLength = 1;
 97     int push[nLength] = { 1 };
 98     int pop[nLength] = { 1 };
 99
100     Test("Test6", push, pop, nLength, true);
101 }
102
103 void Test7() {
104     Test("Test7", NULL, NULL, 0, false); //这里若两栈均为空,判断为false
105 }
106
107 void Test8() {
108     const int nLength = 5;
109     int push[nLength] = { 1, 2, 3, 4, 5 };
110     int pop[nLength] = { 1, 5, 4, 3, 2 };
111
112     Test("Test8", push, pop, nLength, true);
113 }
114 int main(int argc, char** argv) {
115     Test1();
116     Test2();
117     Test3();
118     Test4();
119     Test5();
120     Test6();
121     Test7();
122     Test8();
123
124     return 0;
125 }
时间: 2024-10-10 02:49:03

JZ-C-22的相关文章

矩阵乘法快速幂 cojs 1717. 数学序列

矩阵乘法模板: 1 #define N 801 2 #include<iostream> 3 using namespace std; 4 #include<cstdio> 5 int a[N][N],b[N][N],c[N][N]; 6 int n,m,p; 7 int read() 8 { 9 int ans=0,ff=1;char s; 10 s=getchar(); 11 while(s<'0'||s>'9') 12 { 13 if(s=='-') ff=-1;

Up to 8% free bonus for runescape 2007 gp on Rsorder as july best gift&Enjoy Telos During 7.1-7.22

Now, a small band of freedom fighters struggle to end the osrs gold  long, dark night of Daein's oppression. The big blog news of the day is that Vox Media has acquired Curbed Network. As an amulet you should be wearing an amulet of glory and if you

2016/2/22 三级导航

1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <meta http-equiv="

22.Android 十分方便的滑动标签页

22.Android 十分方便的滑动标签页 Android 十分方便的滑动标签页 前言 EasySlidingTabs属性 EasySlidingTabs布局 FragmentPagerAdapter EasySlidingTabs设置Tab背景 Github传送门 效果图 前言 其实滑动标签页是很常见的,网上搜也是一大堆.但是好用.简单.少bug.可扩展的库实在不多.很多想在做滑动标签页的时候也是经常想到各种不靠谱的库,虽然不难,但是容易坑自己. 原三星底层App大神JiangEcho提供技术

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三)

Solr4.8.0源码分析(22)之 SolrCloud的Recovery策略(三) 本文是SolrCloud的Recovery策略系列的第三篇文章,前面两篇主要介绍了Recovery的总体流程,以及PeerSync策略.本文以及后续的文章将重点介绍Replication策略.Replication策略不但可以在SolrCloud中起到leader到replica的数据同步,也可以在用多个单独的Solr来实现主从同步.本文先介绍在SolrCloud的leader到replica的数据同步,下一篇

2014年4月23日 10:22:08

step 1 : 做tcp网络编程,要解析一批批的数据,可是数据是通过Socket连接的InputStream一次次读取的,读取到的不是需要转换的对象,而是要直接根据字节流和协议来生成自己的数据对象. 按照之前的编程思维,总是请求然后响应,当然Socket也是请求和响应,不过与单纯的请求响应是不同的. 这里Socket连接往往是要保持住的,也就是长连接,然后设置一个缓冲区,网络流不断的追加到缓冲区.然后后台去解析缓冲区的字节流. http://cuisuqiang.iteye.com/blog/

22岁的这一年

时间流逝,昨日的22仿佛就像幻想般消失,再也回不去,只留下这记述的文字和慢慢模糊不清的记忆,给予追悔的冲动,奋发的思想.   三年前到佛山,为了那崇拜已久的神奇,为了那心中充满的兴趣踏上学习路,那时间可谓充实,真正把时间安排的井井有条,白天要工作,晚上要学习,要敲代码,有付出有收获,苦过,累过..人生就是这样一点一点起步的,没有完美,途中总有跌倒.失败.成功的时候, 往往在跌倒.失败的时候才有刻骨铭心的教诲,成功只是证明自己在失败中真正学到的东西,活着总要学会不断的失败,从失败中学习成长;在某一

横向受荷桩的设计软件 Oasys Alp 19.2.0.22

Oasys Alp 19.2.0.22 1CD 分析横向受力桩的土-结构相互作用的简易方法 当谈到横向受荷桩的设计软件,ALP使事情简单.这种横向受力桩分析软件模型的土壤剪切破坏和非线性的土壤行为,计算挠度下降的桩一起弯矩和剪力桩内. 选择选项,以适应任何打桩工程 桩的位移和位移 Acme CAD Converter 2016 8.7.5.1456 Portable 1CD  Bentley HAMMER CONNECT Edition 10.00.00.49 1CD  Bentley Wate

益计算Shprotification.v6.8.15.22+Heat.Balance.v6.12.27.36+Cold.Balance.v2.6.14.18

热增益计算Shprotification.v6.8.15.22+Heat.Balance.v6.12.27.36+Cold.Balance.v2.6.14.18 Andrey.Shirshov.Shprotification.v6.8.15.22 Andrey.Shirshov.Heat.Balance.v6.12.27.36 Andrey.Shirshov.Cold.Balance.v2.6.14.18   "现代ASHRAE标准参考数据用于从人.设备.确定热输入的人工照明,半透明的击剑系数(

[051] 微信公众平台开发教程第22篇-如何保证access_token长期有效

为了使第三方开发者能够为用户提供更多更有价值的个性化服务,微信公众平台开放了许多接口,包括自定义菜单接口.客服接口.获取用户信息接口.用户分组接口.群发接口等,开发者在调用这些接口时,都需要传入一个相同的参数access_token,它是公众账号的全局唯一票据,它是接口访问凭证. access_token的有效期是7200秒(两小时),在有效期内,可以一直使用,只有当access_token过期时,才需要再次调用接口获取access_token.在理想情况下,一个7x24小时运行的系统,每天只需