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