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

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

Q:给定一个入栈序列in和出栈序列out,判断out是否是in的一个可行(合法)的出栈序列。

思路:将入栈序列in入栈,若当前栈顶的元素与当前out的元素相同,那么继续判断out的下一个元素。

            若当前栈顶的元素与当前out的元素不同,且还有未入栈的in元素,那么继续入栈新元素,否则

            就表明,所有的入栈in元素都入栈了,该出栈的元素就是没在栈顶出现,说明被“埋没”了,是个错误的出栈顺序。

bool IsPopOrdder(const int *pPush, const int *pPop, int nlength){	stack
stackData; bool bPossible = false; const int maxvalue = 0x7fffffff; stackData.push(maxvalue); const int *pcPop = pPop; const int *pcPush = pPush; if(NULL != pcPop && NULL != pcPush && nlength > 0) { while (1) { //相同,则pop if(stackData.top() == *pcPop) { stackData.pop(); ++pcPop; } //否则判断下一个入栈的值的情况,这里会有两种情况: //1)没有元素可以入栈,那么就停止。 else if(pcPush - pPush == nlength) break; //2)有元素可以入栈,就继续 else { stackData.push(*pcPush); ++pcPush; } } //表示该入栈的都入了,判断该出的是否都出了。 if(stackData.top() == maxvalue) bPossible = true; } return bPossible;}

转载地址:http://hrlji.baihongyu.com/

你可能感兴趣的文章
优先级队列-数据结构和算法
查看>>
链接点--数据结构和算法
查看>>
servlet中请求转发(forword)与重定向(sendredirect)的区别
查看>>
Spring4的IoC和DI的区别
查看>>
springcloud 的eureka服务注册demo
查看>>
eureka-client.properties文件配置
查看>>
MODULE_DEVICE_TABLE的理解
查看>>
platform_device与platform_driver
查看>>
platform_driver平台驱动注册和注销过程(下)
查看>>
.net强制退出主窗口的方法——Application.Exit()方法和Environment.Exit(0)方法
查看>>
c# 如何调用win8自带的屏幕键盘(非osk.exe)
查看>>
build/envsetup.sh 简介
查看>>
C++后继有人——D语言
查看>>
Android framework中修改或者添加资源无变化或编译不通过问题详解
查看>>
linux怎么切换到root里面?
查看>>
linux串口操作及设置详解
查看>>
安装alien,DEB与RPM互换
查看>>
linux系统下怎么安装.deb文件?
查看>>
编译Android4.0源码时常见错误及解决办法
查看>>
Android 源码编译make的错误处理
查看>>