写一个算法判断出栈顺序是否正确

入栈的数据:1234567

解决思路:

简单的模拟出栈入栈操作,将元素依次入栈。然后根据输入的次序依次出栈。比如给出的出栈次序是 1 4 3 7 6 2 5,首先将1入栈,发现输入数据 中的第一个正好是1。将1出栈,下面是4,由于栈是空,并且刚才只把1入栈,接下来将2 3 4依次入栈,些时栈顶元素是4,与输入数据的第二个元素相 等,将4出栈。然后3出栈,接下来处理7,由于此时栈顶元素是2,7大于2所以接下来将5 6 7依次入栈(栈中元素为7 6 5 2)。然后栈顶元素与 输入数据的7比较相等,7出栈,然后6也相等,6出栈。此时栈中元素(5 2),待判断的输入数据为2 5。2与栈顶元素比较2<5,所以这个序列 是不可能出栈顺序。

时间: 2024-08-01 08:00:32

写一个算法判断出栈顺序是否正确的相关文章

给定入栈顺序,判断出栈顺序是否正确。

1 var ins = [1, 2, 3, 4, 5]; 2 var outs = [3, 4, 5, 2, 1]; 3 var temp = ins; 4 var num, i = 0, len; 5 6 /** 7 * ins 入栈顺序 8 * outs 出栈顺序 9 * temp 临时数组,保存入栈顺序 10 * num 是临时数组中 当前出栈节点的下标 11 * len 临时数组的长度-1 12 * 13 */ 14 (function (temp, outs) { 15 if(ins

判断出栈顺序是否正确(栈的压入、弹出序列)

输入两个整数序列.其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序.为了简单起见,我们假设push序列的任意两个整数都是不相等的. 比如输入的push序列是1.2.3.4.5,那么4.5.3.2.1就有可能是一个pop系列.因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的pop序列就是4.5.3.2.1.但序列4.3.5.1.2就不可能是push序列1.2.3

给定入栈顺序,判断出栈顺序是否合法

题目描述:给定一个入栈序列,给定一个出栈序列,判断该出栈序列是否合法. 分析:假如入栈序列为1 2 3 4 5,判断4 5 3 2 1 是否是合法的出栈顺序. 两个序列均以数组的形式给出 从两个数组的第一个元素开始,如果栈为空,或者,栈顶元素不等于当前出栈数组当前下标对应的元素时,将当前入栈数组中下标所指向的元素进行压栈 初始状态如下: 步骤1:把 1 进行压栈,并将下标后移,如下图所示, 步骤2:依次进行判断并压栈,当4进栈后,此时栈顶元素等于出栈数组下标所指向的元素,将4出栈,如下图所示 步

判断出栈顺序

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 typedef int status; type

判断栈的出栈顺序合法性

栈的出栈顺序合法性是指给定一系列元素,如1 - N,按照从小到大的方式入栈,每个元素的出栈时机不定.题目给定一个出栈顺序,我们来判断这个出栈顺序有没有可能发生. 比如对[1,2,3,4,5,6,7,8,9]: [1,2,3,4,5,6,7,8,9]是一个合法出栈序列 [9,8,7,6,5,4,3,2,1]也是一个合法序列 [4,5,3,2,7,6,1,8,9]也是一个合法序列 [3,4,5,1,2,9,8,7,6]就是一个非法序列 判断方法有两种,一种是对每一个值,其后所有小于它的值的数是一个降

出栈顺序问题的一般解决方法

方案 设有一个栈为s 设有一队列q,q存储了要求的s中元素出栈的顺序 设有一队列q_push,其中存储了元素的入栈顺序 判断栈顶元素是否可以出栈,若为空,或者不为空但是栈顶元素不是q中当前数据,则不可以出栈.否则可以出栈 若栈顶元素可以出栈,则将其进行出栈,并将q队首元素出队 若栈顶元素不可以出栈,则在队列q_push中元素不为空且不等于q的队首元素的情况下,将q_push持续出队,并将弹出的队首元素都入栈到s中. 当循环结束时,q_push只有空与非空两种可能.空说明没找到这样一个符合要求的元

全是套路——出栈顺序

实习终于结束了,好久没有总结编程问题了,因为最近真是没怎么写程序. 今天做华为的火车进站问题,这是一道看似像全排列,其实是栈的问题. 看了一些网上的写法,掌握了一种思路,也是种投机取巧的方法: 先产生序列的全排列,然后再全排列里面去除不可能的出栈顺序. 1.全排列很好产生,用stl里面的next_permutation(begin,end) 2.判断这个排列是不是正确的出栈顺序. 就第2点: 1.给一种进栈顺序加上序号,比如4,2,8这么进栈,则4为0,2为1,8为2,以此类推.只是想表明一个顺

n个元素进栈,共有多少种出栈顺序?

原文:http://blog.csdn.net/zyearn/article/details/7758716 近日在复习数据结构,看到栈的时候,发现1个元素进栈,有1种出栈顺序:2个元素进栈,有2种出栈顺序:3个元素进栈,有5种出栈顺序,那么一个很自然地问题就是n个元素进栈,共有多少种出栈顺序? 说来惭愧,以前学数据结构的时候竟然没有考虑过这个问题.最近在看动态规划,所以“子问题”这3个字一直在我脑中徘徊,于是解决这个问题的时候我也是用类似“子问题”的方法,说白了就是递推公式. 我们把n个元素的

数据结构经典问题——出栈顺序 转载至:canlynet微博

对于数据结构的问题,如果思路稍有不对,就容易陷入逻辑混乱.我希望自己对数据结构的理解,能够给大家一点帮助.我会将所有我有过心得的问题在我的博客上写出来,欢迎大家浏览,如果有什么不对的地方,还请大家指正,有问题可以给我留言,我会尽量解决,谢谢. 声明一下我写博客的初衷:不是炫耀,而是回报.因为我在计算机方面的知识好多都从网上找到答案,因此我也 将自己搜寻整理的材料,自己写的材料,展示到网上,算是尽一份力吧. 一个经典问题如下(不愿意看思路的可以直接看红色字体部分): 一个栈的入栈序列是a,b,c,