• c++ 统计出栈


    题目描述

    1~n依次入栈,统计不同的出栈的方式

    栈是常用的一种数据结构,有n令元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两•种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序列可以得到一系列的输出序列。请你编程求出对于给定的n,计算并输出由操作数序列1,2,…,n,经过一系列操作可能得到的输出序列总数。

    输入

    一个整数n(1<=n<=15)

    输出

    一个整数,即可能输出序列的总数目。

    样例输入

    3
    

    样例输出

    5
    

    Source Code

    #include <iostream>
    #include <stdio.h>
    using namespace std;
    int n;
    int t;
    int s[20],top;
    int opt[20];
    int l = 0;
    int ans = 0;
    void dfs(int u)
    {
        if (l == n)
        {
            ans ++;
            return ;
        }
        if (t <= n)//判断是否所有数据都已经入栈 如果有数据没有入栈,则执行
        {
            top ++;//栈顶指针向上移
            s[top] = t;//把t入栈
            t ++;//栈里面的数量 +1   或者已使用的数量 +1
            dfs(u + 1);//递归找下一个数字
            top --;//出栈
            t --;//栈里面的数量 -1
        }
        if (top >= 1)
        {
            int tmp = s[top];
            l ++;
            opt[l] = s[top];
            top --;
            dfs(u + 1);
            top ++;
            s[top] = tmp;
            l --;
        }
    }
    int main()
    {
        cin >> n;
        t = 1;
        top = 0;
        dfs(1);
        cout << ans << endl;
    }
    

    (注释待续)

  • 相关阅读:
    IE10 下兼容性问题
    前端面试题十九
    前端面试题十八
    前端面试题十七
    前端面试题十六
    前端面试题十五
    前端面试题十四
    前端面试题十三(兼容)
    前端面试题十二
    前端面试题十一
  • 原文地址:https://www.cnblogs.com/LJA001162/p/11334914.html
Copyright © 2020-2023  润新知