試題七
閱讀以下說(shuō)明和C程序,將應(yīng)填入 (n) 處的字句寫(xiě)在答題紙的對(duì)應(yīng)欄內(nèi)。
[說(shuō)明]
現(xiàn)有n(n<1000)節(jié)火車(chē)車(chē)廂,順序編號(hào)為1,2,3,…,n,按編號(hào)連續(xù)依次從A方向的鐵軌駛?cè)?,從B方向鐵軌駛出,一旦車(chē)廂進(jìn)入車(chē)站(Station)就不能再回到A方向的鐵軌上:一旦車(chē)廂駛?cè)隑方向鐵軌就不能再回到車(chē)站,如下圖所示,其中Station為棧結(jié)構(gòu),初始為空且最多能停放1000節(jié)車(chē)廂。
下面的C程序判斷能否從B方向駛出預(yù)先指定的車(chē)廂序列,程序中使用了棧類(lèi)型 STACK,關(guān)于棧基本操作的函數(shù)原型說(shuō)明如下:
void InitStack(STACK*s):初始化棧
void Push(STACK *s,int e):將一個(gè)整數(shù)壓棧,棧中元素?cái)?shù)目增1
void Pop(STACK *s):棧頂元素出棧,棧中元素?cái)?shù)目減1
int Top(STACK s):返回非空棧的棧頂元素值,棧中元素?cái)?shù)目不變
int IsEmpty(STACK s):若是空棧則返回1,否則返回0
[C程序]
#include<stdio.h>
/*此處為棧類(lèi)型及其基本操作的定義,省略*/
int main29{
STACK station;
int state[1000];
int n; /*車(chē)廂數(shù)*/
int begin,i,j,maxNo; /*maxNo為A端正待入棧的車(chē)廂編號(hào)*/
printf("請(qǐng)輸入車(chē)廂數(shù):");
scanf("%d",&n);
printf("請(qǐng)輸入需要判斷的車(chē)廂編號(hào)序列(以空格分隔):");
if (n<1) return-1;
for(i=0;i<n;i++) /*讀入需要駛出的車(chē)廂編號(hào)序列,存入數(shù)組state[]*/
scanf("%d",&state[i]);
(1);/*初始化棧*/
maxNo=1;
for(i=0;i<n;){/*檢查輸出序列中的每個(gè)車(chē)廂號(hào)state[i]是否能從棧中獲取*/
if( (2) ){/*當(dāng)棧不為空時(shí)*/
if(state[i]= =Top(station)){/*棧頂車(chē)廂號(hào)等于被檢查車(chē)廂號(hào)*/
printf("%d",Top(station));
Pop(&station); i++;
}
else
if( (3) ){
printf("error\n");
return 1;
}
else {
begin= (4) ;
for(j=begin+1;j<=state[i];j++) {
Push(&station,j);
}
}
}
else{ /*當(dāng)棧為空時(shí)*/
begin=maxNo;
for(j=begin;j<=state[i];j++){
Push(&station,j);
}
maxNo=(5) ;
}
}
printf("OK");
return 0;
}