永发信息网

火车进站出站后重新组合 编写c语言判断能否编排需要的顺序。c语言大神帮帮忙

答案:1  悬赏:0  手机版
解决时间 2021-03-27 07:17
  • 提问者网友:你给我的爱
  • 2021-03-26 06:56
火车进站出站后重新组合 编写c语言判断能否编排需要的顺序。c语言大神帮帮忙
最佳答案
  • 五星知识达人网友:woshuo
  • 2021-03-26 08:20
#include 
#define N 1000
struct stack {
int top;
int data[N];
};
int push(struct stack *s, int number)
{
if(s->top >= N-1)
return -1;
s->data[++s->top] = number;
return s->top;
}
int pop(struct stack *s)
{
if(s->top == -1)
return -1;
return(s->data[s->top--]);
}
void pushpop(int train[])
{
int i, j=1; // j代表从A轨道中的车厢,从1到N顺序排列
struct stack buffer; // 保存进入车站的车厢
buffer.top = -1; // 堆栈为空时,top=-1
for(i = 0; i < N && train[i] != 0; i++) {
if(buffer.top>=0 && buffer.data[buffer.top] == train[i]) {
pop(&buffer); // 如果车站中最上面的车厢号就是下一个要排在B轨道上的车厢,将其移到B轨道中
continue;
}
while(train[i] != j) {
push(&buffer, j++); // 如果A轨道中当前的第一个车厢不是进入B轨道上的下一个车厢,就将它移到车站里,继续比较A轨道中的下一个车厢
if(j >= N) // 如果A轨道中所有的车厢都空了,就结束
break;
}
if(j >= N) // 如果A轨道中所有的车厢都空了,就结束
break;
else if(train[i] == j) // 如果A轨道中当前的第一个车厢就是B轨道中的下一个车厢,就将它移到B轨道中
j++;
}
if(train[i] == 0 || buffer.top == -1) // 如果所有的车厢都比较过之后,buffer是空的,说明能排成需要的顺序
printf("Yes
");
else
printf("No
");
}

main()
{
int train[N], i; //train中保存的是B轨道上的车厢序列
printf("Input
");
// 问题中的第一行输入没有用,就去掉了
for(i=0; iscanf("%d", train+i);
if(train[i] == 0)
break;
}
pushpop(train);
}追问按示例输入后正好相反啊。。追答你把代码完整地复制粘贴过去,不要手敲。我运行没有问题。
输入的时候不用输入第一行N,我把它给去掉了,如果你需要的话就加一句scanf,但是后面也用不到这个数。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯