本资料提供了C语言数据结构课程第三章作业的答案和解析,帮助学生理解并掌握相关概念与算法实现。
1. 经过以下栈运算后,x的值是(A)。InitStack(s); Push(s,a); Push(s,b); Pop(s,x); Gettop(s,x);
2.循环队列存储在数组A[0..m]中,则入队时的操作为(C)。
3. 栈和队列的共同点是(C)。
4. 若用一个大小为6的数组来实现循环队列,且当rear 和 front 的值分别为 0 和 3。当从队列中删除一个元素,再插入两个元素后,rear 和 front 的值分别为:(B)。
5.程序填顺序循环队列的类型定义如下:
typedef int ET;
typedef struct{
ET *base;
int Front;
int Rear;
int Size;
}Queue;
Queue Q; 队列Q是否“满”的条件判断为(C)。
6. 若进栈序列为1,2,3,4,进栈过程中可以出栈,则(C)不可能是一个出栈序列。
7.向顺序存储的循环队列Q中插入新元素的过程分为三步:(B)。
8. 关于栈和队列,说法不妥的是(D)。
9. 若用数组S[0..m]作为两个栈S1和S2的共同存储结构,对任何一个栈,只有当S全满时才不能作入栈操作。为这两个栈分配空间的最佳方案是(A)。
二、程序填空题(没特别标注分数的空的为3分,共 23 分)。
1. 下面的算法是将一个整数e压入堆栈S,请在空格处填上适当的语句实现该操作:
typedef struct{
int *base;
int *top;
int stacksize;
}SqStack;
int Push(SqStack S,int e) {
if ( S.top- S.base>= S.stacksize ) {
S.base=(int *) realloc(S.base,(S.stacksize+1)*sizeof(int));
if( !S.base ) { printf(Not Enough Memory!\n); return(0); }
S.top= S.base+ S.stacksize ;
S.stacksize= S.stacksize+1 ;
}
*S.top++=e;
return 1;
}
2. 在表达式:6+5+3*7/(4+9/3-2)求值过程中,处理到2时刻,运算符栈的状态为: + / ( - ,操作数栈的内容为11,21,7,2。
3.递调用时,处理参数及返回地址,要用一种称为 栈 的数据结构。
4. 设循环队列中数组的下标范围是1-n,其头尾指针分别为f和r,则其元素个数为(r-f+n) mod n。