[求助]数字1,2,3,4顺序入栈,问有多少种出栈方式。

xgdrjxy 2007-05-03 12:48:14
用的是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;
}
} ///:~



谢谢!!!!!!
...全文
1986 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ImJaden 2010-04-30
  • 打赏
  • 举报
回复
有一个数列(23,45,3,7,3,945)
  我们先对其进行进栈操作,则进栈顺序为:23,45,3,7,3,945
  我们在对其进行出栈操作,则出栈顺序为:945,3,7,3,45,23
  为了方便,我们通常做到:出栈后不再进栈
  进栈出栈就像一个盒子,先一个个放入盒内,而拿出的时候只有先从上面拿,才能在那下面拿
FoxMessire 2010-04-30
  • 打赏
  • 举报
回复
先进后出原则
gaosilong 2010-04-30
  • 打赏
  • 举报
回复
不知道这个为什么这么长 我写的输出合法序列的没有这么麻烦
gaosilong 2010-04-30
  • 打赏
  • 举报
回复
14种
finalwei 2007-05-03
  • 打赏
  • 举报
回复
出栈方式很多么?

还是没看懂你 要表达的是什么
szwx855 2007-05-03
  • 打赏
  • 举报
回复
push(1)->pop(1)->push(2)->pop(2)->push(3)->pop(3)-push(4)->pop(4)
1->null->2->null->3->null->4->null
.
.
.
.
push(1)->push(2)->pop(2)-push(3)->push(4)-pop(4)-pop(3)-pop(1)
12->1->13->134->13->1->null
楼上说的对,应该记住先进后出就行.
Obsidianhom 2007-05-03
  • 打赏
  • 举报
回复
记住先进后出原则,可以一个一个数,
如:
4321
3421
3241
3214
...
记住先进后出原则就可以了
holmesyj 2007-05-03
  • 打赏
  • 举报
回复
这是个卡特兰数 C(2n, n)/(n+1) 这里n = 4。
所以有14种方式。具体解释看数据结构书吧!
celftj 2007-05-03
  • 打赏
  • 举报
回复
楼主的意思是:
进栈时,严格按1, 2 ,3, 4的顺序,可以有多少种出栈的顺序。
比如: 第一种:1进栈,2进栈,3进栈,4进栈,4出栈,3出栈,2出栈,1出栈,则出栈顺序为4, 3, 2, 1
第二种:1进栈,1出栈,2进栈,2出栈,3进栈,3出栈,4进栈,4出栈,则出栈顺序为1, 2, 3, 4。...
问像这样,一共有多少种多栈方式
Jedimaster 2007-05-03
  • 打赏
  • 举报
回复
难道楼主想把stack当list用?
believefym 2007-05-03
  • 打赏
  • 举报
回复
1-2-3-4入栈
4-3-2-1出栈

a-b-c-d入栈
d-c-b-a出栈

楼主想表达什么?排列组合?
dazzae 2007-05-03
  • 打赏
  • 举报
回复
我对holmesyj所讲的卡特兰数非常有兴趣,从前都是自己穷举出来计算的,看到holmesyj的回帖后茅塞顿开。但是仍旧不是很清楚卡特兰数的具体特性,希望大家不吝赐教。
jixingzhong 2007-05-03
  • 打赏
  • 举报
回复
出栈顺序:
4321
3421
3241
3214
2341
2134
2143
1234
1243
1342
1324
...
唐巧 2007-05-03
  • 打赏
  • 举报
回复
holmesyj() 的数据结构知识掌握的不错嘛~ 赞~
JoeryLew 2007-05-03
  • 打赏
  • 举报
回复
holmesyj() 所说正确
xgdrjxy 2007-05-03
  • 打赏
  • 举报
回复
谢谢大家,应该用二叉树。
coldplay968 2007-05-03
  • 打赏
  • 举报
回复
看下数据结构的书

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧