全真试题(三) 本试卷分两部分,第一部分为选择题,1页至3页,第二部分为非选择题,4页至12页,共12页; 选择题30分,非选择题70分,满分100分。考试时间150分钟。 第一部分选择题(共30分) 单项选择题(本大题共15小题,每小题2分,共30分)在每小题列出的四个选项中只有一个 是符合题目要求的,请将其代码填在题后的括号内。错选或未选均无分。 1.下面程序段的时间复杂度是() for(i=0; inext; B. p->next=p->next->next C. p->next=p: D p=p->next->next; 3在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p>next>next=head 则() Ap指向头结点B.p指向尾结点 C·*p的直接后继是头结点D.*p的直接后继是尾结点 4判定“带头结点的链队列为空”的条件是() A.Q. front==NULL B.Q. REARNULL C.Q. front=Q rear D.Q. front!=Qrear 5设有两个串T和P,求P在T中首次出现的位置的串运算称作() A.联接B求子串C字符定位D子串定位 6广义表A=(a(b),O(cd,e)的长度为() A.4B.5C.6D.7 7.一棵含18个结点的二叉树的高度至少为() A.3B.4C.5D6 8已知二叉树的先序序列为 ABDECF,中序序列为 DBEAFC,则后序序列为() A DEBAFC B DEFBCA C DEBCFA D. DEBFCA 9无向图中一个顶点的度是指图中() A通过该项点的简单路径数B与该顶点相邻接的顶点数 C通过该顶点的回路数 D.与该顶点连通的顶点数 10.已知一个图如下所示,从顶点a出发 进行广度优先遍历可能得到的序列为() A. fbd Bac bdf Dacd bfe 11在下列排序方法中,平均时间性能为 O(nologn)且空间性能最好的是() A快速排序B堆排序C归并排序D基数排序
全真试题(三) 本试卷分两部分,第一部分为选择题,1 页至 3 页,第二部分为非选择题,4 页至 12 页,共 12 页; 选择题 30 分,非选择题 70 分,满分 100 分。考试时间 150 分钟。 第一部分 选择题(共 30 分) 一、单项选择题(本大题共 15 小题,每小题 2 分,共 30 分)在每小题列出的四个选项中只有一个 是符合题目要求的,请将其代码填在题后的括号内。错选或未选均无分。 1.下面程序段的时间复杂度是( ) for (i=0; i<n; i++) for (j=1; j<m; j++) A[i][j]=0; A.O (n) B.O(m+n-1) C.O(m+n) D.O(m*n) 2.在单链表中,指针 p 指向元素为 x 的结点,实现“删除 x 的后继”的语句是( ) A.p=p->next; B.p->next =p->next ->next ; C.p->next =p; D.p=p->next->next; 3.在头指针为 head 且表长大于 1 的单循环链表中,指针 p 指向表中某个结点,若 p->next->next=head, 则( ) A.p 指向头结点 B.p 指向尾结点 C.*p 的直接后继是头结点 D.*p 的直接后继是尾结点 4.判定“带头结点的链队列为空”的条件是( ) A.Q.front ==NULL B.Q.REAR==NULL C.Q.front==Q.rear D.Q.front!=Q.rear 5.设有两个串 T 和 P,求 P 在 T 中首次出现的位置的串运算称作( ) A.联接 B.求子串 C.字符定位 D.子串定位 6.广义表 A=(a,(b),(),(c,d,e))的长度为( ) A.4 B.5 C.6 D.7 7.一棵含 18 个结点的二叉树的高度至少为( ) A.3 B.4 C.5 D.6 8.已知二叉树的先序序列为 ABDECF,中序序列为 DBEAFC,则后序序列为( ) A.DEBAFC B.DEFBCA C.DEBCFA D.DEBFCA 9.无向图中一个顶点的度是指图中( ) A.通过该项点的简单路径数 B.与该顶点相邻接的顶点数 C.通过该顶点的回路数 D.与该顶点连通的顶点数 10.已知一个图如下所示,从顶点 a 出发 进行广度优先遍历可能得到的序列为( ) A.a c e f b d B.a c b d f e C.a c b d e f D.a c d b f e 11.在下列排序方法中,平均时间性能为 O(nologn)且空间性能最好的是( ) A.快速排序 B.堆排序 C.归并排序 D.基数排序 a f b c d e
12.已知一组关键字为{25,48,36,72,79,82,23,40,16,35},其中每相邻两个为有序子序列。对这 些子序列进行一趟两两归并的结果是() A.{25,36,48,72,23,40,79,82,16,35} B{25,36,48,72,16,23,40,79,82,35} C.{25,36,48,72,16,23,35,40,79,82} D.{16,23,25,35,36,40,48,72,79,82} 13.设顺序存储的线性表共有123个元素,按分块査找的要求等分成3块。若对索引表采用顺序查找来确定 块,并在确定的块中进行顺序查找,则在查找概率相等的情况下,分块查找成功时的平均查找长度为() A.21B.23C.41D62 14索引非顺序文件的特点是() A.主文件无序,索引表有序B主文件有序,索引表无序 C.主文件有序,索引表有序D主文件无序,索引表无序 15倒排文件的主要优点是( A.便于进行插入和删除运算B便于进行文件的恢复 C便于进行多关键字查询D节省存储空间 第二部分非选择题(共70分) 、填空题(本大题共10小题,每小题2分,若有两个空格,每个空格1分,共20分)不写解答过程, 将正确的答案写在每小题的空格内。错填或不填均无分。 16抽象数据类型的特点是将 和 封装在一起,从而实现信息隐 17从顺序表中删除一个元素时,表中所有在被删元素之后的元素均需个位置。 18.在队列中,允许进行插入操作的一端称为 允许进行删除操作的一端称 为 19如图两个栈共享一个向量空间,topl和top2分别为指向两个栈顶元素的指针,则“栈满”的判定条件 top top2 栈2 20.设Sl=“good”,S2=“",S3=“book”,则Sl,S2和S3依次联接后的结果是 21假设三维数组A[098]按行优先顺序存储,若每个元素占3个存储单元,且首地址为100,则元素 A[9][8[的存储地址是 22已知在一棵含有n个结点的树中,只有度为k的分支结点和度为0的叶子结点,则该树中含有的叶子结 点的数目为 能够成功完成拓扑排序的图一定是一个 24如果在排序前,关键字序列已接近正序或逆序,则在堆排序和快速排序两者之中,选用 较为适当。 25假设哈希表的表长m,哈希函数为H(key),若用线性探查法解决冲突,则探查地址序列的形式表达 为 三、解答题(本大题共4小题,每小题5分,共20分) 26假设通信电文使用的字符集为{ab,cd,ef},各字符的在电文中出现的频度分别为:34,5,12,23,8, 18,试为这6个字符设计哈夫曼编码。请先画出你所构造的哈夫曼树(要求树中左孩子结点的权值小于右
12.已知一组关键字为{25,48,36,72,79,82,23,40,16,35},其中每相邻两个为有序子序列。对这 些子序列进行一趟两两归并的结果是( ) A.{25,36,48,72,23,40,79,82,16,35} B.{25,36,48,72,16,23,40,79,82,35} C.{25,36,48,72,16,23,35,40,79,82} D.{16,23,25,35,36,40,48,72,79,82} 13.设顺序存储的线性表共有 123 个元素,按分块查找的要求等分成 3 块。若对索引表采用顺序查找来确定 块,并在确定的块中进行顺序查找,则在查找概率相等的情况下,分块查找成功时的平均查找长度为( ) A.21 B.23 C.41 D.62 14.索引非顺序文件的特点是( ) A.主文件无序,索引表有序 B.主文件有序,索引表无序 C.主文件有序,索引表有序 D.主文件无序,索引表无序 15.倒排文件的主要优点是( ) A.便于进行插入和删除运算 B.便于进行文件的恢复 C.便于进行多关键字查询 D.节省存储空间 第二部分 非选择题(共 70 分) 二、填空题(本大题共 10 小题,每小题 2 分,若有两个空格,每个空格 1 分,共 20 分)不写解答过程, 将正确的答案写在每小题的空格内。错填或不填均无分。 16.抽象数据类型的特点是将 和 封装在一起,从而实现信息隐 藏。 17.从顺序表中删除一个元素时,表中所有在被删元素之后的元素均需 一个位置。 18. 在队列中,允许进行插入操作的一端称为 ,允许进行删除操作的一端称 为 。 19.如图两个栈共享一个向量空间,top1 和 top2 分别为指向两个栈顶元素的指针,则“栈满”的判定条件 是 。 20.设 S1=“good”,S2=“ ”,S3=“book”,则 S1,S2 和 S3 依次联接后的结果是 。 21.假设三维数组 A[10][9][8]按行优先顺序存储,若每个元素占 3 个存储单元,且首地址为 100,则元素 A[9][8][7]的存储地址是 。 22.已知在一棵含有 n 个结点的树中,只有度为 k 的分支结点和度为 0 的叶子结点,则该树中含有的叶子结 点的数目为 。 23.能够成功完成拓扑排序的图一定是一个 。 24.如果在排序前,关键字序列已接近正序或逆序,则在堆排序和快速排序两者之中,选用 较为适当。 25.假设哈希表的表长 m,哈希函数为 H(key),若用线性探查法解决冲突,则探查地址序列的形式表达 为 。 三、解答题(本大题共 4 小题,每小题 5 分,共 20 分) 26.假设通信电文使用的字符集为{a,b,c,d,e,f},各字符的在电文中出现的频度分别为:34,5,12,23,8, 18,试为这 6 个字符设计哈夫曼编码。请先画出你所构造的哈夫曼树(要求树中左孩子结点的权值小于右
孩子结点的权值),然后分别写出每个字符对应的编码。 27.已知一个图如下所示,其顶点按 a.b. c.d.e.f顺序 存放在邻接表的顶点表中,请画出该图的邻接表 使得按此邻接表进行深度优先遍历时得到的顶点 序列为 a.c. befd,进行广度优先遍历时得到的 顶点序列为 ac bdf 28已知两个4×5的稀疏矩阵的三元组表分别如下: 16 2 2 2 4242 25 28 01234 请画出这两个稀疏矩阵之和的三元组表 29从空树起,依次插入关键字40,8,90,15,62,95,12,23,56,32,构造一棵二叉排序树 (1)画出该二叉排序树 (2)画出删去该树中元素值为90的结点之后的二叉排序树 四、算法阅读题(本大题共4小题,每小题5分,共20分) 30如图所示,利用同一循环向量空间实现两个队列,其类型 Queue2定义如下: Data Type data MaxSize int front [2], length(21 对于i=0或1,fron]和 length[分别为第i个队列的头指针和长度域。请在空缺处填入合适的内容, Q front[1 Qlength[ Qfront[U 实现第ⅰ个循环队列的入队操作, int EnQueue(Queue2*Q, int 1, Data Type x) ∥若第i个队列不满,则元素x入队列,并返回1,否则返回0 if(i) return0 return
孩子结点的权值),然后分别写出每个字符对应的编码。 27.已知一个图如下所示,其顶点按 a.b.c.d.e.f 顺序 存放在邻接表的顶点表中,请画出该图的邻接表, 使得按此邻接表进行深度优先遍历时得到的顶点 序列为 a.c.b.e.f.d,进行广度优先遍历时得到的 顶点序列为 a c b d f e。 28.已知两个 4×5 的稀疏矩阵的三元组表分别如下: 0 1 4 16 1 2 2 18 2 3 4 -25 3 4 2 28 请画出这两个稀疏矩阵之和的三元组表。 29.从空树起,依次插入关键字 40,8,90,15,62,95,12,23,56,32,构造一棵二叉排序树。 (1)画出该二叉排序树 (2)画出删去该树中元素值为 90 的结点之后的二叉排序树。 四、算法阅读题(本大题共 4 小题,每小题 5 分,共 20 分) 30.如图所示,利用同一循环向量空间实现两个队列,其类型 Queue2 定义如下: typedef sturct{ DataType data[MaxSize]; int front [2],length[2]; } Queue2; 对于 i=0 或 1, front[i]和 length[i]分别为第 i 个队列的头指针和长度域。请在空缺处填入合适的内容, 实现第 i 个循环队列的入队操作。 int EnQueue (Queue2 *Q, int i, DataType x) { // 若第 i 个队列不满,则元素 x 入队列,并返回 1,否则返回 0 if (i<0 || i>1)return 0; if ( (1) ) return 0; 0 1 1 32 1 2 2 -22 2 2 5 69 3 3 4 25 4 4 2 51 f b a c d e
Q->datal Q-> length』(3)]+ 31某二叉树的线索链表存储结构如图(b)所示,其中p为指向根结点的指针,图(a)为结点结构。阅读下 列算法,并回答问题 Child ata rtag rchild 乙A|0 BO ACO E0 AF AHA (1)写出执行函数调用f(p)的输出结果 (2)简述函数f的功能 void f(BinThr Tree t while(t) printf(t->date) t=t->lchild t=t->rchild 32.下列函数 Findcycle(Gυ的功能是,对一个采用邻接表作存储结构的有向图G,利用深度优先搜索策略 寻找一条经过顶点V的简单回路。数据 cycle path用于保存搜索过程中形成的回路, cycle_path(k]j≥0) 表示在回路中顶点V的下一个顶点。请在空缺处填入合适的内容,使其成为一个完整的算法。 知邻接表的顶点表结点结构为 vertex firstedge 边表结点 Edgenode结构为 next nt cycle path MaxNurm
Q->data[ (2) ]=x; Q->length[ (3) ]++; return 1; } 31.某二叉树的线索链表存储结构如图(b)所示,其中 p 为指向根结点的指针,图(a)为结点结构。阅读下 列算法,并回答问题: (1)写出执行函数调用 f(p)的输出结果; (2)简述函数 f 的功能。 void f (BinThrTree t) { while (t) { printf(t->date); if (t->lchild) t=t->lchild; else t=t->rchild; } } (1) (2) 32.下列函数 FindCycle (G, i)的功能是,对一个采用邻接表作存储结构的有向图 G,利用深度优先搜索策略 寻找一条经过顶点 Vi 的简单回路。数据 cycle_path 用于保存搜索过程中形成的回路,cycle_path[k]=j(j≥0) 表示在回路中顶点 Vk 的下一个顶点 Vj。请在空缺处填入合适的内容,使其成为一个完整的算法。 已知邻接表的顶点表结点结构为: vertex firstedge 边表结点 EdgeNode 结构为: adjvex next int cycle_ path[MaxNurm]; lchild data rtag rchild (a) B A A P D A F A C A E A G A H A Λ Λ Λ Λ 1 Λ Λ Λ 1 Λ 0 Λ 0 Λ 0 Λ 0 Λ 10 Λ 10 Λ
int FindCycle(ALGraph*G, int 1) ∥若回路存在,则返回1,否则返回0 for(=0; jn;j++)cycle path[l=-1 return DFSPath(G,1,i) int DFSPath(ALGraph *G, int j, int i EdgeNode*p: Int cycled=0 for(p=G->adjlist[i]. firstedge; p&&! cycled; p=p->next) ycle path[l=p->adjvex; rcled=1;∥已找到回路 if(cycle pathp->adjvex]==-1)cycled=(2) return 33阅读下列函数algo,并回答问题 (1)假设整型数组A[1.8]中的元素依次为(3,8,9,1,7,4,2,6)。执行函数调用algo(A,8)时 外层 while的循环体执行多少次?函数的返回值是多少? (2)简述函数algo(L,n)的功能 int algo(int L int n) int i=0,j, s=l,t=n while(i!=(n+1)/2) while (i=x)j LO=LOI whle(i≤j&&L<=x)i++ LO=LO f(x<(n+1)/2)s=i+1; if(i=0)return O else return L可l;
int FindCycle (ALGraph * G, int i) { //若回路存在,则返回 1, 否则返回 0 int j; for (j=0; j<G->n; j++) cycle_path[j]=-1; return DFSPath (G, i, i ); } int DFSPath (ALGraph *G, int j, int i ) { EdgeNode * p; Int cycled=0; for (p=G->adjlist[j].firstedge; p &&! cycled; p=p->next) { cycle_path[j]=p->adjvex; if ( (1) )cycled=1; //已找到回路 else if (cycle_path[p->adjvex]==-1) cycled= (2) ; } return (3) ; } 33.阅读下列函数 algo,并回答问题。 (1)假设整型数组 A[1..8]中的元素依次为(3,8,9,1,7,4,2,6)。执行函数调用 algo(A,8)时, 外层 while 的循环体执行多少次?函数的返回值是多少? (2)简述函数 algo(L,n)的功能。 int algo (int L[ ], int n) { int i=0, j, s=1, t=n; while (i! =(n+1)/2) { int x =L[s]; i=s; j=t; while (i<j) { while (i<j &&L[j]>=x)j--; L[i]=L[j]; while (i<j &&L[i]<=x)i++; L[j]=L[i]; } L[i]=x; if (x<(n+1)/2) s=i+1; else t =i-1; } if (i ==0) return 0; else return L[i]; } (1) (2)
五、算法设计题(本题共10分) 34假设以带头结点的单循环链表作非递减有序线性表的存储结构。请设计一个时间复杂度为0(n)的算 法,删除表中所有数值相同的多余元素,并释放结点空间。例如: 经算法操作后变为(7,10,21,30,42,51,70)
五、算法设计题(本题共 10 分) 34.假设以带头结点的单循环链表作非递减有序线性表的存储结构。请设计一个时间复杂度为 0(n)的算 法,删除表中所有数值相同的多余元素,并释放结点空间。例如: (7,10,10,21,30,42,42,42,51,70) 经算法操作后变为(7,10,21,30,42,51,70)