如何判断出栈序列的合法性?

引用网址:https://sa93g4.smartapps.baidu.com/pages/squestion/squestion?qid=570739723&rid=3007281690&eid=11048&_swebfr=1&_swebFromHost=mibrowser

规则是:出栈序列中的每个数后面的比它小的数,是按递减排列的。简化规则描述:1、假设入栈顺序为1234。1)若出栈序列为4123,显然不满足上述要求,因为对于4,它后面比它小的数字序列为123,而123是一个递加系列即不是递减排列,所以不是合法出栈序列。    2)若出栈系列为3142,也不合法,因为3后面比它小的1和2不是递减排列的。    3)若出栈系列为1234,则合法,因为对于每一个数字它后面没有比它小的数字。  2、假设入栈顺序为123456789abcdef。    1)若出栈系列为67d51f94e2ba83c,因为对于d,它后面比它小的19或123或ac等等都不是递减的,所以不合法。    2)若出栈系列为379a8b65c4ed21f,可以证明是合法的出栈顺序。因为对于每一个数字它后面没有比它小的数字而且是按递减排列的。3、证明:假设入栈顺序为1234......n,可知在栈中的元素从栈顶到栈底一定是按严格递减排列的,而且每个数i进栈之前,比i小的数一定已经进栈了。所以比i小的数要不然已经出栈,要不然在栈中,如果还在栈中则一定在i的下面,按严格递减排列,如此可见如果比i小的数还在栈中则一定在i之后输出,所以输出序列中在i后面的比i小的数一定按严格递减排列.否则出栈系列不合法。

 

 

 
扩展资料:1.进栈(PUSH)算法①若TOP≥n时,则给出溢出信息,作出错处理(进栈前首先检查栈是否已满,满则溢出;不满则作②);②置TOP=TOP+1(栈指针加1,指向进栈地址);③S(TOP)=X,结束(X为新进栈的元素);2.退栈(POP)算法①若TOP≤0,则给出下溢信息,作出错处理(退栈前先检查是否已为空栈, 空则下溢;不空则作②);②X=S(TOP),(退栈后的元素赋给X):③TOP=TOP-1,结束(栈指针减1,指向栈顶)。
posted @   MaxBruce  阅读(3279)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-06-28 Tcp三次握手中细节
2021-06-28 C# 获得文件的执行路径的方法
2021-06-28 vs2019 Com组件初探-简单的COM编写以及实现跨语言调用
2021-06-28 TCP和UDP的区别
2021-06-28 C++ com 组件的使用
点击右上角即可分享
微信分享提示