栈的理解(出、入栈)

简答题中有这么一道题:

SX分别表示入栈和出栈的操作,则初态和终态均为栈空的入栈和出栈的操作序列可以表示为仅由SX组成的序列。可以操作的序列为合法,如(SXSX为合法序列,先进后出满足要求,SXXS为非法序列,先进后出,然后再出后进不符合逻辑,所以是非法序列。)

试给出区分给定序列为合法序列或非法序列的一般准则,并证明:两个不同的合法序列(对同一输入序列,栈操作)不可能得到相同的输出元素序列

问题分析:好像知道这么个道理,但是不知道怎么说

解:一般准则是:任何前n个序列中S的个数一定大于X的个数。

证明:设两个合法序列A,B,假设前n个操作都相同,栈顶元素设为a,第n+1个操作不同,

A的第n+1个操作为人栈操作,b入栈,则此序列的输出顺序一定是先ba,而B是先将a出栈,再将b入栈,那么此序列的输出顺序一定是先ab,所以两个不同的合法操作的输出序列一定不同。

 

下面这道题体现了 理解题意的重要性(记得高中的英语老师说:一个人的理解能力是非常重要的,这个能力可以说是一个人的综合能力,也能说明一个人发展的潜力,确实是的,提高自己的理解能力很重要)

问题描述:

证明:若借助栈由输入序列1,2,3,。。。N得到的输出序列为p1,p2...pn(它是输入序列的一个排列),则在输出序列不可能有,i<j<k使pj<pk<pi.

问题分析:刚开始真不知该怎么理解这个题目,自己开始理解,以为题目有问题,认为输出序列可以有这个情况,因为 i<j<k,输出序列当然可以先把pj输出,然后将k入栈,并出栈,然后再将i出栈,所以就会有pj<pk<pi这样的顺序。是不是理解得不够呢?

看了后有了些理解,有一点我没弄清楚,也没抓住这个关键,还有输入的元素肯定和输出元素是相同的,我刚刚的理解是把这两个给拆分了,也没很理解括号里面的那句话,以为i,j,k是输入,pj,pk,pi为输出,所以才会有上述错误的理解。题目的意思是输入序列是有序的,由pj<pk<pi可知,输入序列pj,pk,pi又因为i<j<k,根据题意,输出的序列应为pi,pj,pk而这就相当于由123要得到312

 

原文地址:https://www.cnblogs.com/wj204/p/3044313.html