| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4533 人关注过本帖
标题:[求助]数字1,2,3,4顺序入栈,问有多少种出栈方式。
只看楼主 加入收藏
Powerqy
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-3-30
收藏
 问题点数:0 回复次数:8 
[求助]数字1,2,3,4顺序入栈,问有多少种出栈方式。

用的是Thinging in C++上的Stack类


这是头文件
//: C06:Stack3.h
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// With constructors/destructors
#ifndef STACK3_H
#define STACK3_H

class Stack {
struct Link {
void* data;
Link* next;
Link(void* dat, Link* nxt);
~Link();
}* head;
public:
Stack();
~Stack();
void push(void* dat);
void* peek();
void* pop();
};
#endif // STACK3_H ///:~


这是Stack的定义
//: C06:Stack3.cpp {O}
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Constructors/destructors
#include "Stack3.h"
#include "../require.h"
using namespace std;

Stack::Link::Link(void* dat, Link* nxt) {
data = dat;
next = nxt;
}

Stack::Link::~Link() { }

Stack::Stack() { head = 0; }

void Stack::push(void* dat) {
head = new Link(dat,head);
}

void* Stack::peek() {
require(head != 0, "Stack empty");
return head->data;
}

void* Stack::pop() {
if(head == 0) return 0;
void* result = head->data;
Link* oldHead = head;
head = head->next;
delete oldHead;
return result;
}

Stack::~Stack() {
require(head == 0, "Stack not empty");
} ///:~


这是测试Stack的一个例子,实现倒序输出,我现在就死用上面的资源文件实现“数字1,2,3,4顺序入栈,问有多少种出栈方式?”
//: C06:Stack3Test.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
//{L} Stack3
//{T} Stack3Test.cpp
// Constructors/destructors
#include "Stack3.h"
#include "../require.h"
#include <fstream>
#include <iostream>
#include <string>
using namespace std;

int main(int argc, char* argv[]) {
requireArgs(argc, 1); // File name is argument
ifstream in(argv[1]);
assure(in, argv[1]);
Stack textlines;
string line;
// Read file and store lines in the stack:
while(getline(in, line))
textlines.push(new string(line));
// Pop the lines from the stack and print them:
string* s;
while((s = (string*)textlines.pop()) != 0) {
cout << *s << endl;
delete s;
}
} ///:~



谢谢!!!!!!

搜索更多相关主题的帖子: 顺序 数字 Link Stack 
2007-05-01 15:37
Powerqy
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-3-30
收藏
得分:0 

比如说是1,2先进栈,2出栈,然后3, 4进栈.那么输出的结果就是2431

倒序,后进先出

但我不能用程序把它表述完全,听老师说要用两重递归会比较简单一点?不解?请大家指教!

2007-05-01 17:08
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
以前用C写过一个,后来给弄掉了.
应该和全排列差不多,只是多了个条件.

倚天照海花无数,流水高山心自知。
2007-05-01 19:39
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
这个不是火车进站出站的问题吗?

小规律,多试几个就总结到规律了!

Fight  to win  or  die...
2007-05-03 00:05
未入流小菜鸟
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2007-5-1
收藏
得分:0 

//如果只为算有多少种方式,那就纯粹是个数学问题,都不需要真的定义出一个栈。
int Fn(int n)
{
if(n<=1) return 1; //一个数时,只有一种输出
else return n*Fn(n-1); //n个数时,第n个数可以出现在(n-1)个数的间隙中(包括两头,共n个间隙)。
}
void main()
{
int cout;
printf("个数:"); //几个数,如楼主的题则为4
scanf("%d",&cout);
int num = Fn(cout);
printf("共%d种\n",num);
}
//如果要将相应的入栈和出栈显示出来,那就要另想办法了,呵呵。

2007-05-03 21:05
宇智波斑
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-5-4
收藏
得分:0 
可以用这个计算公式:Xn=(2n)!/[n!*(n+1)!],有四个数的话就有14种可能的出栈方式
2007-05-04 11:01
Powerqy
Rank: 1
等 级:新手上路
帖 子:20
专家分:0
注 册:2007-3-30
收藏
得分:0 
还是解决了,用的是二叉树,我是想输出每一种可能。而不是仅仅知道它的个数
2007-05-08 10:33
潇湘夜雨
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2007-5-1
收藏
得分:0 
用二叉树?不解,能不能把你的思路说一下

长风破浪会有时, 直挂云帆济沧海。 C++ing!
2007-05-11 21:35
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 

如果要解就DFS,如果要值就Catalan数

2007-05-14 23:36
快速回复:[求助]数字1,2,3,4顺序入栈,问有多少种出栈方式。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012786 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved