有n个元素1,2,3......n依次进栈,允许任何时候出栈,编写一个算法,给出所有可能的出栈序列
答案:2 悬赏:20 手机版
解决时间 2021-03-19 03:29
- 提问者网友:眉目添风霜
- 2021-03-18 07:42
有n个元素1,2,3......n依次进栈,允许任何时候出栈,编写一个算法,给出所有可能的出栈序列
最佳答案
- 五星知识达人网友:老鼠爱大米
- 2021-03-18 08:39
测试的时候n不要输入太大数。c-free测试通过。
#include
typedef struct{
int *stk;
int top;
int size;
}stack;
void initstack(stack *s, int n) {
s-> stk = (int*)malloc((s-> size=n) * sizeof(int));
s-> top = 0;
}
void copystack(stack *ss, stack *s) {
int i;
if(ss-> stk) free(ss-> stk);
ss-> stk = (int*)malloc((ss-> size=s-> size) * sizeof(int));
ss-> top = s-> top;
for(i=s->top-1;i>=0;i--)
ss->stk[i]=s->stk[i];
}
void outputstack(stack* s) {
int i;
for(i=0;i top;i++) printf("%2d",s-> stk[i]);
printf("\n");
}
int stackempty(stack* s) {
return !s-> top;
}
void push(stack* s, int x) {
s-> stk[s-> top++] = x;
}
int pop(stack* s) {
return s-> stk[--s-> top];
}
void stackseq(stack *input, stack *s, stack *output) {
stack ii, ss, oo;
if(stackempty(input)) {
if(stackempty(s)) outputstack(output);
else {
push(output, pop(s));
stackseq(input, s, output);
}
}
else {
if(!stackempty(s)) {
initstack(&ii, 1); copystack(&ii, input);
initstack(&ss, 1); copystack(&ss, s);
initstack(&oo, 1); copystack(&oo, output);
push(&oo, pop(&ss));
stackseq(&ii, &ss, &oo);
}
push(s,pop(input));
stackseq(input, s, output);
}
}
void main()
{
int i,n;
stack input,s,output;
initstack(&input,20);
initstack(&s,20);
initstack(&output,20);
printf("Input n:\n");
scanf("%d",&n);
for(i=n;i> 0;i--)
push(&input,i);
stackseq(&input,&s,&output);
}
#include
typedef struct{
int *stk;
int top;
int size;
}stack;
void initstack(stack *s, int n) {
s-> stk = (int*)malloc((s-> size=n) * sizeof(int));
s-> top = 0;
}
void copystack(stack *ss, stack *s) {
int i;
if(ss-> stk) free(ss-> stk);
ss-> stk = (int*)malloc((ss-> size=s-> size) * sizeof(int));
ss-> top = s-> top;
for(i=s->top-1;i>=0;i--)
ss->stk[i]=s->stk[i];
}
void outputstack(stack* s) {
int i;
for(i=0;i
printf("\n");
}
int stackempty(stack* s) {
return !s-> top;
}
void push(stack* s, int x) {
s-> stk[s-> top++] = x;
}
int pop(stack* s) {
return s-> stk[--s-> top];
}
void stackseq(stack *input, stack *s, stack *output) {
stack ii, ss, oo;
if(stackempty(input)) {
if(stackempty(s)) outputstack(output);
else {
push(output, pop(s));
stackseq(input, s, output);
}
}
else {
if(!stackempty(s)) {
initstack(&ii, 1); copystack(&ii, input);
initstack(&ss, 1); copystack(&ss, s);
initstack(&oo, 1); copystack(&oo, output);
push(&oo, pop(&ss));
stackseq(&ii, &ss, &oo);
}
push(s,pop(input));
stackseq(input, s, output);
}
}
void main()
{
int i,n;
stack input,s,output;
initstack(&input,20);
initstack(&s,20);
initstack(&output,20);
printf("Input n:\n");
scanf("%d",&n);
for(i=n;i> 0;i--)
push(&input,i);
stackseq(&input,&s,&output);
}
全部回答
- 1楼网友:西岸风
- 2021-03-18 09:18
搜一下:有n个元素1,2,3......n依次进栈,允许任何时候出栈,编写一个算法,给出所有可能的出栈序列
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯