精华内容
下载资源
问答
  • 出栈顺序

    2020-06-07 17:56:17
    举例:求出abc的所有出栈结果。 这个问题描述有歧义,应该是分段入栈的顺序,也就是说,可能先入栈a,取出a,入栈b,取出b…… 因此,所有出栈结果为:abc,acd,bac,bca,cba. 不可能为cab,因为c出栈的前提是ab都...

    概念:

    举例:求出abc的所有出栈结果。

    这个问题描述有歧义,应该是分段入栈的顺序,也就是说,可能先入栈a,取出a,入栈b,取出b……

    因此,所有出栈结果为:abc,acd,bac,bca,cba. 不可能为cab,因为c出栈的前提是ab都已经入栈。

    例题:

    展开全文
  • Activity的入栈出栈

    2018-06-01 08:04:54
    模拟了Activity的入栈,出栈的操作,简洁明了易懂,可以直观的看到出栈,入栈的过程
  • 出栈序列

    2020-03-12 18:22:53
    给出一个正整数N,给出abc,…(n)个字母,依次出栈,进栈,有多少种序列。 输入:N 输出:第一行输出出栈序列个数,接下来每行输出一个序列 分析 深搜,模拟进栈,出栈过程。 void dfs(int index, int n, int l, int ...

    题意

    给出一个正整数N,给出abc,…(n)个字母,依次出栈,进栈,有多少种序列。
    输入:N
    输出:第一行输出出栈序列个数,接下来每行输出一个序列

    分析

    深搜,模拟进栈,出栈过程。

    void dfs(int index, int n, int l, int o, stack<char> in, queue<char> out) 
    

    index:第几次过程,从0开始
    n:n个字母
    l:进栈个数 初始0
    o:出栈个数 初始0
    in:进栈的元素
    out:出栈的元素
    当进栈个数l大于出栈个数o才能出栈,当进栈个数小于n才能进栈.
    当index = n * 2时停止,输出out中的元素。
    每次进出栈的过程,栈中元素和出栈元素初始都在参数中。所以当遇到既能出栈又能进栈的过程时,需要将放在后面函数还原回初始过程的参数。代码对应段中有解释。

    代码

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll a[30][30] = {0};
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    ll cal(ll n, ll m) {
    	if (m == 0 || m == n)
    		return 1;
    	if (a[n][m] != 0)
    		return a[n][m];
    	a[n][m] = cal(n - 1, m) + cal(n - 1, m - 1);
    		return a[n][m];
    }
    bool book[20];
    void dfs(int index, int n, int l, int o, stack<char> in, queue<char> out) {
    	if (index == 2 * n) {
    		while (!out.empty()) {
    			cout << out.front();
    			out.pop();
    		}
    		cout << endl;
    		return ;
    	}
    	if (l > o) { // 出栈 
    	// 若将出栈函数放进栈函数下面,会导致回溯时,如果当前参数既可以出栈又可以进栈的话,
    	// 会先执行进栈函数,进栈函数会将参数的in加入元素,只需要判断是否可以
        // 执行上面的入栈函数,若执行则还原参数的in	
    //		if (l < n)
    //			in.pop();
    		out.push(in.top());
    		in.pop();
    		dfs(index + 1, n, l, o + 1, in, out);
    	}
    	if (l < n) { // 进栈 
    	// 若将出栈函数放进栈函数下面,会导致回溯时,如果当前参数既可以出栈又可以进栈的话,
    	// 会先执行出栈函数,出栈会将参数的进栈in退出栈顶元素,只需要判断是否可以
        // 执行上面的出栈函数,若执行则还原参数的in栈 
    		if (l > o) { 
    			in.push(out.front());
    			out.pop();
    		}
    		in.push('a' + l);
    		dfs(index + 1, n, l + 1, o, in, out);
    	}	
    }
    int main(int argc, char** argv) {
    	int n;
    	cin >> n;
    	stack<char> in;
    	queue<char> out;
    	cout << cal(2 * n, n) / (n + 1) << endl;
    	dfs(0, n, 0, 0, in, out);
    	return 0;
    }
    
    展开全文
  • 进栈出栈

    2019-09-11 10:56:15
    进栈出栈情况1:全数字情况2:数字字母混合 参考 情况1:全数字 例如:已知入栈序列为:1 2 3 4 5,这5个数依次入栈,出栈顺序、时机任意。则下列可能的出栈序列不正确的是() A 1 2 3 4 5 B 3 2 1 5 4 C 1 5 4 3 ...


    参考

    情况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的顺序】。
    展开全文
  • 栈 - 关于出栈序列,判断合法的出栈序列

    万次阅读 多人点赞 2017-11-09 20:26:36
    (例)设栈的入栈序列是 1 2 3 4,则下列不可能是其出栈序列的是( )。 A. 1 2 4 3 B. 2 1 3 4 C. 1 4 3 2 D. 4 3 1 2 E. 3 2 1 4 一般人看到此类题目,都会拿起草稿纸,将各个选项都模拟一遍选出正确...

    1 引例

    (例)设栈的入栈序列是 1 2 3 4,则下列不可能是其出栈序列的是( )。
    A. 1 2 4 3
    B. 2 1 3 4
    C. 1 4 3 2
    D. 4 3 1 2
    E. 3 2 1 4

    一般人看到此类题目,都会拿起草稿纸,将各个选项都模拟一遍选出正确答案
    这当然可以得出正确的答案 (D
    但当元素个数过多的时候,这个方法不可取,而且,这种人工模拟过程浪费时间且容易出错,下面将介绍一种简单的做题方法。

    2 做题方法

    按顺序入栈的序列,任意元素 e ,比 e 先入栈的元素,并且比 e 后出栈的元素,一定是逆序的。

    读起来有点绕口,那么先记下 “ 后出先入逆序 ”

    1、以最上面的例题为例,若要写出所有以 1 2 3 4 为入栈顺序的出栈序列
    暴力求解:4个元素一共有 A44A_4^4A44 共24种排列(下表加粗斜体的排列为合法排列)

    1234 1243 1324 1342 1423 1432
    2134 2143 2314 2341 2413 2431
    3124 3142 3214 3241 3412 3421
    4123 4132 4213 4231 4312 4321

    表格中加粗斜体的排列为合法排列一共有 14
    现在可以随意选一个序列来理解一下什么是 “ 后出先入逆序 ”
    比如序列:3 1 2 4

    1. 选择任意元素 e ,这里选择 3
    2. 比 3 后出栈的有三个元素 1 2 4
    3. 其中比 3 先入栈的有两个元素 1 2
    4. 但是 1 2 是正序的,而不是逆序的
    5. 所以这个序列不是合法出栈序列

    (注:可以利用递归设计出相应的算法来判断所有合法序列)

    2、若只要求出一共有多少个合法出栈序列

    在这里插入图片描述

    将元素个数替换 n 计算即可,计算得 14
    该公式称为卡塔兰数(Catalan number)公式,了解更多 点这里

    注:上式中的括号上下两个数(2n和n)代表数学中排列组合公式中的C上下两个数,即用组合公式来求即可。

    3 原因

    3.1 选项D(4 3 1 2)的模拟

    1、将 1 2 3 4 顺序依次入栈:
    这里写图片描述
    2、弹出栈顶元素 4:
    这里写图片描述
    3、弹出栈顶元素 3:
    这里写图片描述

    接下来栈内只剩下元素 1 和 2 ,并且 2 在栈顶
    所以说 D (4 3 1 2) 选项的出栈顺序最后的 1 和 2 是无法完成的

    可以发现:
    如果把最后两个元素的顺序逆置一下,就可以完成了

    展开全文
  • 出栈序列程序

    2014-12-02 16:53:51
    判断序列是否为合法的出栈序列,利用C语言编写
  • 判断出栈序列

    2014-10-27 00:50:19
    判断出栈序列 【问题描述】 对于一个栈,已知元素的进栈序列,判断一个由栈中所有元素组成的排列是否是可能的出栈序列。 比如,进栈序列为1 2 3 4,则可能的出栈序列有4 3 2 1,1 4 3 2等。而1 4 2 3就不是。 ...
  • 入栈出栈顺序

    千次阅读 2019-04-09 15:35:09
    入栈出栈顺序。
  • 出栈序列判定

    2016-08-10 20:28:17
    给一个初始的入栈序列,其次序即为元素的入栈次序,栈顶元素可以随时出栈,每个元素只能入栈依次。输入一个入栈序列,后面依次输入多个序列,请判断这些序列是否为所给入栈序列合法的出栈序列。 例如序列1,2,3,4...
  • 出栈次序

    千次阅读 2018-03-26 15:58:29
    标题:出栈次序 X星球特别讲究秩序,所有道路都是单行线。 一个甲壳虫车队,共16辆车,按照编号先后发车,夹在其它车流中,缓缓前行。 路边有个死胡同,只能容一辆车通过,是临时的检查站,如图【p1.png】所示。 ...
  • 本文主要介绍了php线性表的入栈与出栈,实例分析了php操作线性表的入栈与出栈的相关技巧。希望对大家有所帮助。具体如下:$stack = array("Simon", "Elaine"); //定义数组array_push($stack, "Helen", "Peter"); //...
  • 栈的出栈顺序

    2016-11-11 12:09:00
    给定一个正整数n,输出1到n的所有出栈情况
  • 在栈大小不受限制和栈大小受限制两种情况下,分析在给定入栈序列(1 2 … n)的情况下,出栈序列应满足的性质,并据此给出基于穷举法和模拟入栈出栈过程的方法判断序列a1a2…an是否是出栈序列的算法及程序实现。...
  • 使用西门子实现出栈入栈功能
  • 正确出栈判断

    2020-04-08 22:52:08
    正确出栈判断 设问: 假设某个程序会进行一系列入栈和出栈的混合栈操作。入栈操作会将整数 0 到 9 按顺序压入栈; 出栈操作会打印除返回值。下面哪个序列是不可能产生的? a. 4 3 2 1 0 9 8 7 6 5 b. 4 6 8 7 5 3 2 ...
  • 本文分析了无重复入栈序列对应的出栈顺序的个数,给出解决出栈顺序的算法,并编程打印出所有出栈顺序
  • 问题描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不...2 遍历入栈序列,这之中判断,如果栈顶元素等于出栈序列当前元素,则出栈,直到不相...
  • 进栈出栈问题

    千次阅读 2019-05-28 11:43:43
    一个栈的输入序列为 1 2 3 4 5, 则下列序列中不可能是栈输出的序列的是 (A) A. 5 4 1 3 2 B. 2 3 4 1 5 C....D.... ...首先 1 进栈,2 进栈+出栈, 3 进栈+出栈 ,4 进栈+出栈 , 1出栈 ,5 进栈+出栈...
  • 顺序栈入栈出栈实现源码
  • 主要介绍了php线性表的入栈与出栈,实例分析了php操作线性表的入栈与出栈的相关技巧,需要的朋友可以参考下
  • 1.栈的建立和输出,入栈出栈。2.链栈的出栈和入栈。3.数组储存栈和结构体储存栈。4.动态栈和静态栈
  • 我们知道栈是一种先进后出的数据容器。当一个栈的输入序列是递增...在输入序列为递增序列的假设下,请编写一个算法判断输入的字符串表示的出栈序列是否为正确的出栈序列。例如:输入的字符序列为dcba,则返回值为tru...
  • 在充分分析出栈序列的形成规律的情况下,给出了出栈序列的生成算法。由于该算法所允许入栈的元素个数有限,又对该算法进行了改进,使得改进后的算法对任意长的入栈元素都适用。测试结果表明,该算法对出栈序列的生成具有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 191,647
精华内容 76,658
关键字:

出栈