判断一个栈的出栈序列的合法性

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/lishanleilixin/article/details/89433774

规则是

出栈序列中的每个数后面的比它小的数,是按递减排列的。

简化规则描述:

1、假设入栈顺序为1234。

1)若出栈序列为4123,显然不满足上述要求,因为对于4,它后面比它小的数字序列为123,而123是一个递加系列即不是递减排列,所以不是合法出栈序列。

2)若出栈系列为3142,也不合法,因为3后面比它小的1和2不是递减排列的。

3)若出栈系列为1234,则合法,因为对于每一个数字它后面没有比它小的数字。

2、假设入栈顺序为123456789abcdef。

1)若出栈系列为67d51f94e2ba83c,因为对于d,它后面比它小的19或123或ac等等都不是递减的,所以不合法。

2)若出栈系列为379a8b65c4ed21f,可以证明是合法的出栈顺序。因为对于每一个数字它后面没有比它小的数字而且是按递减排列的。

证明:

  • 假设入栈顺序为1234…n,可知在栈中的元素从栈顶到栈底一定是按严格递减排列的,而且每个数i进栈之前,比i小的数一定已经进栈了。

  • 所以比i小的数要不然已经出栈,要不然在栈中,如果还在栈中则一定在i的下面,按严格递减排列,如此可见如果比i小的数还在栈中则一定在i之后输出,所以输出序列中在i后面的比i小的数一定按严格递减排列.否则出栈系列不合法。

展开阅读全文

没有更多推荐了,返回首页