使用栈判断括号串是否匹配,当读入左括号时应(),算法结束时,若栈(),则括号串是匹配的。
A.出栈、为空
B.出栈、非空
C.入栈、为空
D.入栈、非空
A.出栈、为空
B.出栈、非空
C.入栈、为空
D.入栈、非空
阅读下列说明和算法,回答问题1和问题2。
【说明】
算法2-1是用来检查文本文件中的圆括号是否匹配。若文件中存在圆括号没有对应的左括号或者右括号,则给出相应的提示信息,如下所示:
文件 提示信息
(1+2)
abc) 缺少对应左括号:第2行,第4列
((def)gx) 缺少对应左括号:第3行,第10列
(((h)
ij)(k
(1ml) 缺少对应右括号:第5行,第4列;第4行,第1列
在算法2-1中,stack为一整数栈。算法中各函数的说明见表4。
【算法2-1】将栈stack 置空,置EOF为false ch < - nextch(); while(not EOF) k < - kind(CH); if(k== (1) ) push((2) );push((3) ); elseif(k== (4) ) if(not empty()) pop() ;pop(); else 显示错误信息(缺少对应左括号或右括号); 显示行号row;显示列号col; endif endif ch < - nextch(); endwhile if(not empty()) 显示错误信息(缺少对应左括号或右括号); while(not empty()) row < - pop() ; col <- pop(); 显示行号row; 显示列号col; endwhile endif 为了识别更多种类的括号,对算法2-1加以改进后得到算法2-2。算法2-2能够识别圆括号、方括号和花括号(不同类型的括号不能互相匹配)。改进后,函数kind(char ch)的参数及其对应的返回值见表5。
【算法2-2】
将栈stack置空,置EOF为false
ch< -nextch();
while(not EOF)
k <-kind(ch);
if(k >0)
if(判断条件1 )
push((5));push((6));push((7));
elseif(判断条件2 and 判断条件3 )
pop() ;pop() ;pop();
else
显示行号row; 显示列号col;
endif
endif
ch < - nextch();
endwhile
if(not empty() )
显示错误信息(缺少对应左括号或右括号);
while(not empty() )
pop(); row←pop(); col←pop();
显示行号row;显示列号col;
endwhile
endif
请将【算法2-1】和【算法2-2】中(1)~(7)处补充完整。
B.栈顶元素表示的是与当前字符匹配的右括号
C.字符是左括号
D.字符是右括号
E.栈不空F.栈空G.字符是括号
设计一个“判别在表达式中左、右括号是否配对出现”的算法,采用______数据结构最佳。
A.线性表的顺序存储结构
B.栈
C.队列
D.线性表的链式存储结构
【C程序】
#include<stdio.h>
/*此处为栈类型及其基本操作的定义,省略*/
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; i<n; i++) /*读入需要驶出的车厢编号序列,存入数组state[]*/
scanf("%d",&state[i]);
(1) ; /*初始化栈*/
maxNo=1;
for(i=0; i<n; ){ /*检查输出序列中的每个车厢号state[i]是否能从栈中获取*/
if((2) ){ /*当栈不为空时*/
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{ /*当栈为空时*/
begin=maxNo;
for(j=begin; j<=state[i];j++) {
Push(&station, j);
}
maxNo= (5) ;
}
}
printf("OK");
return 0;
}
● 需编译运行的程序,其 (12) 错误在编译时不能发现。
(12)A. 逻辑 B. 语法 C. 括号不匹配 D. 关键字拼写
●算术表达式采用逆波兰式表示时不用括号,可以利用(20)进行求值。与逆波
兰式ab-cd+*对应的中缀表达式是 (21) 。
(20)
A.数组
B.栈
C.队列
D.散列表
(21)
A. a-b+c*d
B.(a-b)*c+d
C.(a-b)*(c+d)
D. a-b*c+d
● 算术表达式采用逆波兰式表示时不用括号,可以利用 (20) 进行求值。与逆波兰式 ab-cd+* 对应的中缀表达式是 (21) 。
(20)
A .数组
B .栈
C .队列
D .散列表
(21)
A.a-b+c*d
B.(a_b)*c+d
C.(a-b)*(c+d)
D.a-b*c+d
●对于高级语言源程序,若(19),则可断定程序中出现语法错误。
(19)A.编译时发现表达式中操作数的类型不匹配
B.编译时发现表达式中的括号不匹配
C.运行时出现数组下标越界的情况
D.运行时出现除数为0的情况