阅读以下说明和C程序,将应填入 (n) 处的字句写在答题纸的对应栏内。 【说明】 现有n(n

admin2010-05-08  21

问题 阅读以下说明和C程序,将应填入  (n)  处的字句写在答题纸的对应栏内。
【说明】
现有n(n<1000)节火车车厢,顺序编号为1,2,3…,11,按编号连续依次从A方向的铁轨驶入,从B方向铁轨驶出,一旦车厢进入车站(Station)就不能再回到A方向的铁轨上;一旦车厢驶入B方向铁轨就不能再回到车站,如图6—9所示,其中Station为栈结构,初始为空且最多能停放1000节车厢。

下面的c程序判断能否从B方向驶出预先指定的车厢序列,程序中使用了栈类型sTACK,关于栈基本操作的函数原型说明如下:
void InitStack(STACK*s):初始化栈。
void Push(STACK*s,int e):将一个整数压栈,栈中元素数目增1。
void Pop(STACK*S):栈顶元素出栈,栈中元素数目减1。
int Top(STACK s):返回非空栈的栈顶元素值,栈中元素数目不变。
int IsEmpty(STACK s):若是空栈则返回1,否则返回0。
【C程序】
#include
/*此处为栈类型及其基本操作的定义,省略*/
int main(){
STACK station;
int state[1000];
int n;    /*车厢数*/
int begin,i,j,maxNo;   /*maxNo为A端正待入栈的车厢编号*/
printf(”请输入车厢数:”);
scanf(“%d”,&n);
printf(“请输入需要判断的车厢编号序列(以空格分隔):”);
if(n<1)return-1;
for(i=0;iscanf(“%d”,&state);(1)  ,/*初始化栈*/
maxNo=1;
for(i = 0;i是否能从栈中获取*/
if(  (2)  )(/*当栈不为空时*/
if(state==Top(station)){/*栈顶车厢号等于被检查车厢号*/
printf(“%d”,Top(station));
Pop(&station);i++;
}
else
if(    (3)    )  {
printf(“error\n”);
return 1;
}
else(
begin=  (4)  ;
for(j=begin+1,j<=state;J++){
Push(&station,j);
}
}
}
else{/*当栈为空时*/
begin=maxNo;
for(j=begin;j<=state; j++){
Push(&station,J);
}
maxNo= (5)  ;
}
}
printf(“OK”);
return 0;
}

选项

答案(1)InitStack(&station)(2)IsEmpty(station)(3)state[i]
解析 从本题来看,程序首先要求用户输入车厢数,然后初始化栈,给出的操作原型voidInitStack=(STACK*s)用于初始化栈,而Main函数已经定义Stackstation,故应填Init-Stack(&station)。根据输入n的值遍历栈,当栈不为空时,需要添加判断函数IsEmpty(sTACKs),如栈顶车厢号等于被检查车厢号时,则输出车厢号;如栈顶车厢号小于被检查车厢号时,输出错误。根据函数原型,填state
转载请注明原文地址:https://jikaoti.com/ti/zCi7FFFM
0

相关试题推荐
最新回复(0)