博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
栈的压入、弹出序列
阅读量:5007 次
发布时间:2019-06-12

本文共 1246 字,大约阅读时间需要 4 分钟。

问题

判断一数字序列是否为这些数字入栈的一种出栈方式(前提:栈中的数字不重复)

例如

假设入栈的序列为:1 2 3 4 5

那么4 5 3 2 1为一种弹出序列, 4 3 5 1 2不是

思路

开辟一个辅助栈,模拟入栈出战过程(假设pa为入栈序列,pb为出战序列)

  • pa中的元素依次压入辅助栈
  • 新压入的元素与弹出序列的栈底相同,辅助栈弹出,同时pb向上移动
  • 不相同了pa中的元素继续入辅助栈

参考代码

#include 
#include
using namespace std;bool IsPopOrder(const int *a, const int *b, int lena, int lenb){ if(lena != lenb || lena == 0) return false; bool rev = false; int pa = 0; int pb = 0; int *newa = new int[lena]; int top = -1; for(pa = 0; pa < lena; ++pa) { ++top; newa[top] = a[pa]; while(newa[top] == b[pb]) { --top; ++pb; } } if(top == -1) rev = true; delete []newa; return rev;}int main(){ int a[] = {
1, 2, 3, 4, 5}; int b[] = {
4, 5, 3, 2, 1}; int c[] = {
4, 3, 5, 1, 2}; int d[] = {
4, 5, 9, 2, 1}; int lena = sizeof(a) / sizeof(int); int lenb = sizeof(b) / sizeof(int); int lenc = sizeof(c) / sizeof(int); int lend = sizeof(d) / sizeof(int); cout << IsPopOrder(a, b, lena, lenb) << endl; cout << IsPopOrder(a, c, lena, lenc) << endl; cout << IsPopOrder(a, d, lena, lend) << endl;}

结果

1

0

0

转载于:https://www.cnblogs.com/kaituorensheng/p/3618339.html

你可能感兴趣的文章
C# 万年历 农历 节气 节日 星座 星宿 属相 生肖 闰年月 时辰(转)
查看>>
A Simple Tree Problem
查看>>
Modular Inverse [ZOJ 3609]
查看>>
mybatis 返回值类型是Map
查看>>
构造函数
查看>>
OkHttp 3.4入门
查看>>
生成Makefile文件全过程
查看>>
[nghttp2]压测工具,源码编译并进行deb打包过程
查看>>
MySQL性能测试工具之mysqlslap使用详解
查看>>
深入理解jsonp跨域请求原理
查看>>
regsvr32注册COM组件失败
查看>>
Vue.js笔记(一)
查看>>
oracle_PLSQL 快捷键使用技巧
查看>>
【前端】【javascript】es6中的遍历器接口Iterator
查看>>
初探c++11之常数表达式
查看>>
jmeter,CSV数据加载、数据库连接、正则
查看>>
(独孤九剑)--正则表达式
查看>>
MySQL学习点滴 --分区表
查看>>
4.6.1 测试基础
查看>>
洛谷 P2486 [SDOI2011]染色
查看>>