1、广东工业大学考试试卷 ( B ) 课程名称: 数据结构 试卷满分 100 分 考试时间: 年 月 日 (第 周 星期 ) 题 号 一 二 三 四 五 总分 评卷得分 评卷签名 复核得分 复核签名 一.单项选择题(共16分,每题2分) 1.设某数据结构的二元组形式表示为A=(D,S),D={a,b,c,d,e,f}, S ={,,,,
2、
3、 [C] c [D] d 4.下列有关二叉树的正确陈述是( )。 [A] 二叉树中任何一个结点的度都为2 [B] 一棵二叉树的度可以小于2 [C] 二叉树中至少有一个结点的度为2 [D] 二叉树的度为2 5.若将一棵树t 转换为孩子—兄弟链表表示的二叉树h,则t的后根遍历是h的 ( )。 [A] 前序遍历 [
4、B] 中序遍历 [C] 后序遍历 [D] 层次遍历
6.在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是( )。
[A] G中有弧
5、学 号: 姓 名: 装 订 线 7.散列表的地址区间为0-17,散列函数为H(K)=K mod 17,采用线性探测法处理冲突,并将关键字序列26,25,72,38,8,18,59依次存储到散列表中。元素59存放在散列表中的地址是( )。 [A] 8 [B] 9 [C] 10 [D]
6、 11 8.ISAM文件和VASM文件属于( )。 [A] 索引非顺序文件 [B] 顺序文件 [C] 索引顺序文件 [D] 散列文件 二.填空题(共12分,每空1分) 1.线性表L=(a1,a2,…,an)采用顺序存储表示,假定删除表中任一元素的概率相同,则删除一个元素需要移动元素的平均次数是___________。 2.在栈结构中,允许插入和删除的一端称为___________,另一端称为___________。 3.模式串P=’ababc’的next函数值序列为___________。 4.深度为6的完全二叉树的结点数至少有_
7、个。 5.线索二叉树的左线索指向其___________,右线索指向其___________。 6.已知无向图G =(V, E),其中V={a, b, c, d, e},E={(a,b),(a,d),(a,c),(d,c),(b,e)},若从顶点a开始遍历图,得到的序列为a,b,e,c,d,则采用的是___________遍历方法。 7.动态查找表和静态查找表的重要区别在于前者包含有___________和___________运算,而后者不包含这两种运算。 8.简单选择排序的平均时间复杂度是___________,堆排序的平均时间复杂度是___________。
8、 三.解答题(共40分) 1.(6分)假设电文中仅由a到e共5个字母组成,字母在电文中出现的频率依次为 0.2,0.15,0.32,0.28,0.05 请画出由此构造的哈夫曼树(要求树中所有结点的左右孩子必须是左大右小),并计算该哈曼夫树的带权路径长度WPL。 2.(8分)设对称矩阵A= (1)若将A中包括主对角线的下三角元素按行的顺序压缩到数组S中,即S为 1 0 3 0 0 0 2 0 5 0 下标: 1 2 3 4 5 6 7 8 9 10 请
9、求出A中任一元素的行列下标[i,j](1<=i,j<=4)与S中元素的下标K之间的关系; (2)若将A[i,j](1<=i, j<=4)视为稀疏矩阵,画出其三元组表。 3.(10分)若带权无向图G的邻接矩阵如右图所示,顶点集是{V1, V2, V3, V4, V5}, (1)画出图G的邻接表,要求每个顶点的表结点序号都是按照从 小到大的次序链接; (2)画出图G的最小生成树。 4.(8分)从空树开始构造一棵平衡二叉排序树,依次插入的关键字为(11, 13, 15, 17, 19, 20),请按下图要求画出该树的部分生成过程。 插入11,13,15后 插入17
10、后 插入19后 插入20后 5.(8分)对序列(3, 87, 12, 61, 70, 97, 26, 45)执行升序排序。试根据堆排序原理,填写完整下列各步骤结果。 建立大顶堆结构:________________________ 交换与调整: (1)87, 70, 26, 61, 45, 12, 3, 97; (2)________________________; (3)61, 45, 26, 3, 12, 70, 87, 97; (4)45, 12, 26, 3, 61, 70, 87, 97; (5)26, 12, 3, 45, 61, 70,
11、87, 97; (6)________________________; (7)3, 12, 26, 45, 61, 70, 87, 97; 四.算法阅读题(共24分) 1.(6分)阅读算法f1,并回答问题。 (1)设线性表L=(2, 3, 6, 5, 4),并采用带头结点的单链表储存,写出执行算法f1(L)后的L; (2)简述算法f1(L)对线性表L的操作意义。 void f1(LinkList &L) { LinkList p, s; p = L->next; L->next = NULL; while (p!= NULL) {
12、 s=p->next; p->next=L->next; L->next =p; p=s; } } 2.(6分)假设以带头结点的循环链表表示队列,并且只设一个指针rear指向队尾元素(注意不设头指针),算法f2实现相应的出队列操作。请在空缺处填入合适内容,使其成为完整的算法。 Status f2(LinkList &rear, ElemType &x){ LinkList front; if ( ① ) return ERROR; else { front
13、 ② ; rear->next->next = front->next; if ( front == rear ) rear = ③ ; x = front->data; free(front); return OK; } } K H F E A B G I C D 3.(6分)阅读下列算法,并回答问题 (1) 设二叉树bt如右图所示,请写出执行 in
14、t c=0; f3(bt, c); 之后c的结果; (2) 简述算法f3的功能。 void f3(BiTree bt, int &x) { if (bt) { if( bt->lchild || bt->rchild ) x++; f3(bt->lchild, x); f3(bt->rchild, x); } } 4.(6分)图的邻接表存储结构的类型定义如下: typedef struct ArcNode { int adjvex; // 该弧所指向的顶点的位置 ArcNode *nextarc; // 指
15、向下一条弧的指针 } ArcNode; // 定义弧的结点 typedef struct { VertexType data; // 顶点信息 ArcNode *firstarc; // 指向第一条依附该顶点的弧 } VNode, AdjList[MAX_VERTEX_NUM]; // 定义顶点数组 typedef struct { AdjList vertices; int vexnum, arcnum; // 图的当前顶点数和弧数 int kind; } ALGrap
16、h; // 邻接表类型 算法f4(G, v)是以顶点v为起点,对图进行深度优先遍历。请在空缺处填入合适内容,使其成为完整的算法。 void f4(ALGraph G, int v) { AcrNode *p; visited[v]=1; visit(v); p = ① ; while (p) { v = p->adjvex; if (!visited[v]) ② ; p = ③ ; } } 五.算法设计题(8分) 假设二叉树T中结点值互不相同,并采用二叉链表存储结构 typedef struct node { ElemType data; struct node *lchild, *rchild; } *BiTree; 编写算法,求元素值为x的结点在二叉树T中的层次。 广东工业大学试卷用纸,共6页,第6页






