是学校实验课的内容,本人已上网验证过,已经有很多人发过了。

1.火车乱序输入输出

名字不太好起,内容是这样的: 输入: 4//火车数 1 2 3 4//火车进站的顺序 4 1 2 3//希望的火车出栈的顺序 如果能实现,输出可以;不能,提示不能按照上面的顺序输出。

火车可以在岔道口等着,但根据生活常理,后进的火车必须先走了,先进的火车才能走。(这和啥一样?)

我这里采用的方式是记录输出的火车数目,退出循环的条件是输出数目和输入的火车数相同。

用两个下标遍历进站出栈的顺序,如果是同一个火车,就直接出栈就行了, 但如果不一样,先看栈顶元素,一样就出栈,然后输出队列后移一位;不一样就把当前输入元素压栈,同时输入数组后移。 当输入数组结束了,将栈内元素全部弹出并和输出序列对比,如果不一样说明不能按给出的顺序输出,如果相同则可以。

代码:

int work(int in[],int out[],int number)

{

int *pi=in,*po=out;

int count=0;

struct link* head=(struct link* )malloc(sizeof(struct link));

head->next=NULL;

while(count

{

if(*pi!=*po)//

{

if(head->next&&head->next->data==*po)//栈顶元素与之相同

{

output(head);

po++;

}

else//压入栈等着

{

input(head,*pi);

pi++;

count++;

}

}

else//一样,往后走

{

pi++;

count++;

po++;

}

}

while(head->next)//栈非空。清空栈

{

if(output(head)!=*po)//清空一半对不上了,impossi,并清除剩下的元素

{

while(head->next)

output(head);

free(head);

return