加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c++ 统计出栈

发布时间:2020-12-16 10:40:31 所属栏目:百科 来源:网络整理
导读:题目描述 1~n依次入栈,统计不同的出栈的方式 栈是常用的一种数据结构,有n令元素在栈顶端一侧等待进栈,栈顶端另一侧是出栈序列。你已经知道栈的操作有两?种:push和pop,前者是将一个元素进栈,后者是将栈顶元素弹出。现在要使用这两种操作,由一个操作序

题目描述

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;
}

(注释待续)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读