数据结构问题!!
顺序入栈 四个字母 a b c d 入栈一个字母后可以出栈一个或多个字母 接着 继续入栈
出栈后的字母有哪些顺序呢?
例如 push(a) push(b) push(c) push(d) pop(d) pop (c) pop(b) pop(a)
或 push(a) pop(a) push(b) push(c) pop(c) pop(b) push(d) pop(d)
谢谢!!
请给出算法
问题点数:0、回复次数:4Top
1 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2005-04-01 22:27:55 得分 0
这里面只有一条规则
若p,q,r是顺序进栈的三个元素,那么出来的顺序不可能是r,p,q.
记住,是顺序进,而不是连续进
例子:进1234
那么,所有出现312,412,413,423的序列都是不可能出现的
Top
2 楼answerooo()回复于 2005-04-01 22:43:02 得分 0
我记得楼上说的那个叫做什么 负互数 ??
结论是正确的 谁可以给出证明么??
而且这样子 是已经知道了结果 要做的只是让计算机去打印就好了
说可以给出一个 更一般的算法Top
3 楼szws(克米帅)回复于 2005-04-02 08:23:59 得分 0
我给一个一般的算法,自己研究吧!
const int N=4;
char stack[N],outstack[N];
char ss[N]={'a','b','c','d'};
void go(int N,int intop,int outtop,int in)
{
if(intop==0 && outtop==N)
{
for(int i=0;i<N;i++)
cout<<outstack[i]<<' ';
cout<<endl;
return;
}
if(intop<N && in<N)
{
stack[intop]=ss[in];
go(N,intop+1,outtop,in+1);
}
if(intop>0)
{
outstack[outtop]=stack[intop-1];
int t=stack[intop-1];
go(N,intop-1,outtop+1,in);
stack[intop-1]=t;
}
}Top
4 楼tianhxk(c++<>_JAVA(拒绝回答中文作为字段的问题))回复于 2005-04-02 08:27:56 得分 0
递归回朔就好了Top




