进栈出栈


参考

情况1:全数字

  • 例如:已知入栈序列为:1 2 3 4 5,这5个数依次入栈,出栈顺序、时机任意。则下列可能的出栈序列不正确的是()
    A 1 2 3 4 5
    B 3 2 1 5 4
    C 1 5 4 3 2
    D 4 3 5 1 2
  • 规律如下:
    已知栈的输入序列是1,2,3,…,n,输出序列是a1,a2,…ai,…,an。
    然后我们任选一个数ai,并筛选ai到an之间所有<=ai的元素,则它们一定是按照从大到小的顺序排列的。*
    (“从大到小“不一定紧紧相邻,只代表相对位置关系,比如(…,10,…,7,…,3,…,1,…)
    举例:
    入栈顺序:1 2 3 4 5 【n=5】
    出栈顺序:3 2 1 5 4
    验证:
    让i=1,那么ai=3,后面小于3的有2,1。刚好3,2,1是按照从大到小的顺序排列的
    让i=2,那么ai=2,后面小于2的有1。刚好2,1是按照从大到小的顺序排列的
    让i=3,那么ai=1,后面小于1的有NULL,满足。
    让i=4,那么ai=5,后面小于5的有4。刚好5,4是按照从大到小的顺序排列的
    让i=5,那么ai=4,后面小于4的有NULL,满足。

情况2:数字字母混合

  • 例如:n,n-1,…3,2,1
  • 解决方法:你先给它们每个元素(不管是数字还是字符串)标个序号,后面直接对序号操作就OK了【按照1,2,3,…,n的顺序】。
发布了89 篇原创文章 · 获赞 36 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40234695/article/details/100729989