第3章 栈和队列
一、选择题:
1.设一数列的输入顺序为1,2,3,4,5,6,通过栈操作不可能排成的输出序列为( ) (A)3,2,5,6,4,1 (B)l,5,4,6,2,3
(C)2,4,3,5,1,6 (D)4,5,3,6,2,1
2.设循环队列Q[l„n—1]的首尾指针为f和r,当插入元素时尾指针r加1,首指针f总是指在队列中第一个元素的前一个位置,则队列中元素计数为( )。 (A)r一f (B)n一(r一f) (C)(r—f十n)%n (D)(f一r十n)%n
3.若有一个栈的输入序列是l,2,„,n,输出序列的第一个元素是n,则第i个输出元素是( )。
(A) n-i (B) n-i-1 (C) n-i+1 (D) 不确定
4.设有一个栈,元素的进栈次序为A,B,C,D,E,下列( )是不可能的出栈序列 (A)A,B,C,D,E (B)B,C,D,E,A (C)E,A,B,C,D (D)E,D,C,B,A 5.队列操作的原则是( )。 (A)先进先出 (B)后进先出 (c)只能进行插入 (D)只能进行删除 二.程序填空:
己知STACK表示栈的数据结构,push为将一个值为e的元素进栈,若成功返回1,否则返回0。完成以下程序。 typedef struct { int data[100];
int top; /* 栈顶元素的下标 */ }STACK;
int push(STACK *s, int e) {
if(___ __) return 0; s->top++; ___ _____=e; return 1; }
三、编程题:
判断一个算术表达式的圆括号是否正确配对。
提示:对表达式进行扫描,凡遇到“(”就进栈,遇到“)”就退掉栈顶的“(”,表达式被扫描完毕,栈应为空。