是学校实验课的内容,本人已上网验证过,已经有很多人发过了。
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<number)
{
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