数据结构期末试卷
1.组成数据得基本单位就是( )。
(A) 数据项 (B) 数据类型?(C) 数据元素?(D) 数据变量
2.设数据结构A=(D,R),其中D={1,2,3,4},R={r},r={<1,2>,〈2,3〉,〈3,4>,<4,1〉},则数据结构A就是( )。 ?(A) 线性结构
(A) 线性表
i
(B) 树型结构 ?(C) 图型结构 (B) 栈 ?(C) 队列?(D) 树 (C) 2
i—1
(D) 集合
3.数组得逻辑结构不同于下列( )得逻辑结构。 4.二叉树中第i(i≥1)层上得结点数最多有( )个。 ?(A) 2i?(B) 2
?(D) 2i-1
5.设指针变量p指向单链表结点A,则删除结点A得后继结点B需要得操作为( )。 ?(A) p->next=p->next—〉next?(B) p=p-〉next
(C) p=p->next->next?(D) p->next=p
6.设栈S与队列Q得初始状态为空,元素E1、E2、E3、E4、E5与E6依次通过栈S,一个元素出栈后即进入队列Q,若6个元素出列得顺序为E2、E4、E3、E6、E5与E1,则栈S得容量至少应该就是( )。 ?(A) 6
(A) 100 (A) 3
(B) 4?(C) 3 (D) 2 (B) 40
(C) 55?(D) 80
7。将10阶对称矩阵压缩存储到一维数组A中,则数组A得长度最少为( )。 8。设结点A有3个兄弟结点且结点B为结点A得双亲结点,则结点B得度数数为( )。
(B) 4?(C) 5?(D) 1 (B) 5?(C) 6 (D) 7 (B) 快速排序?(C) 堆排序
(D) 希尔排序
9。根据二叉树得定义可知二叉树共有( )种不同得形态。 ?(A) 4 ?(A) 冒泡排序 二、填空题
1. 设顺序循环队列Q[0:m-1]得队头指针与队尾指针分别为F与R,其中队头指针F指
向当前队头元素得前一个位置,队尾指针R指向当前队尾元素所在得位置,则出队列得语句为F =___________;。
2. 设线性表中有n个数据元素,则在顺序存储结构上实现顺序查找得平均时间复杂度为_
____,在链式存储结构上实现顺序查找得平均时间复杂度为_________.
3. 设一棵二叉树中有n个结点,则当用二叉链表作为其存储结构时,该二叉链表中共有__
______个指针域,________个空指针域。
4. 设指针变量p指向单链表中结点A,指针变量s指向被插入得结点B,则在结点A得后
面插入结点B得操作序列为 s-〉next=p—>next; s->next=s_________________。
5. 设无向图G中有n个顶点与e条边,则其对应得邻接表中有_________个表头结点
与_________个表结点。
10. 10、 设有以下四种排序方法,则( )得空间复杂度最大。
6. 设无向图G中有n个顶点e条边,所有顶点得度数之与为m,则e与m有______关系。 7 设一棵二叉树得前序遍历序列与中序遍历序列均为ABC,则该二叉树得后序遍历序列为__________。
8 设一棵完全二叉树中有21个结点,如果按照从上到下、从左到右得顺序从1开始顺序编号,则编号为8得双亲结点得编号就是___________,编号为8得左孩子结点得编号就是_____________。
9、 下列程序段得功能实现子串t在主串s中位置得算法,要求在下划线处填上正确语句。
int index(char s[ ], char t[ ]) {
i=j=0;
while(i<strlen(s) && j if (j==strlen(t))return(i-strlen(t));else return (-1); } 10 设一个连通图G中有n个顶点e条边,则其最小生成树上有________条边。 三 判断题 1、 顺序存储方式得优点就是存储密度大,且插入、删除运算效率高.( ) 2、 若输入序列为1,2,3,4,5,6,用栈可以输出序列1,5,4,6,2,3.( ) 3、 数据得逻辑结构就是指数据得各数据项之间得逻辑关系。( ) 4、 中序遍历一棵二叉排序树得结点就可得到排好序得结点序列。( ) 5、 在n个结点得无向图中,若边数大于n-1,则该图必就是连通图。( ) 6、 归并排序在任何情况下都比所有简单排序速度快。( ) 7、 栈与队列得存储方式,既可以就是顺序方式,又可以就是链式方式。( ) 8、 完全二叉树中,若一个结点没有左孩子,则它必就是树叶。( ) 9、 不同得求最小生成树得方法最后得到得生成树就是相同得。( ) 10、 采用线性探测法处理散列时得冲突,当从哈希表删除一个记录时,不应将这个记录得所在位置置空,因为这会影响以后得查找。( ) 四、应用题 1.设完全二叉树得顺序存储结构中存储数据ABCDE,要求给出该二叉树得链式存储结构并给出该二叉树得前序、中序与后序遍历序列。 2.设给定一个权值集合W=(3,5,7,9,11),要求根据给定得权值集合构造一棵哈夫曼树并计算哈夫曼树得带权路径长度WPL。 3。设一组初始记录关键字序列为(19,21,16,5,18,23),要求给出以19为基准得一趟快速排序结果以及第2趟直接选择排序后得结果。 4.设一组初始记录关键字集合为(25,10,8,27,32,68),散列表得长度为8,散列函数H(k)=k mod 7,要求分别用线性探测与链地址法作为解决冲突得方法设计哈希表。 5.设无向图G(所右图所示),要求给出该图得深度优先与广度优先遍历得序列并给出该图得最小生成树。 五、算法设计题 1. 设计判断单链表中结点就是否关于中心对称算法。 2. 设计在链式存储结构上设计直接插入排序算法 3 设计算法实现按层次遍历(遍历操作定义为打印结点得data域)二叉树。二叉树得存储结构描述同上题,在算法中可能要使用一个队列Q,其相关操作:(编程题) Iniqueue(Q) 置队列空操作 Empty(Q) 判空函数 Enqueue(Q,x) 入队列操作 Dlqueue(Q) 出队列操作 4 设计判断一棵二叉树就是否就是二叉排序树得算法。 数据结构模拟试卷(B卷)参考答案 一、选择题 1、C2??、C ?3、D 6、C 二、填空题 1、 (F+1) % m 2、 O(n),O(n) 3、 2n,n+1 4、 s—>next=p—〉next; s->next=s 5、 n, 2e 6、 m=2e 7、 CBA 8、 4,16 9、 i—j+1,0 10、 n-1 三 判断题 1、 X 2 X、 3 、 X 4 、 √ 5 、 X 6 、 X 7、 √ 8 、 √ 9、 √ 10、 √ 四、应用题 1、 链式存储结构略,前序ABDEC,中序DBEAC,后序DEBCA。 2、 哈夫曼树略,WPL=78 3、 (18,5,16,19,21,23),(5,16,21,19,18,23) 4、 线性探测:?链地址法: 5、 深度:125364,广度:123456,最小生成树T得边集为E={(1,4),(1,3),(3,5), (5,6),(5,6)} 五、算法设计题 1、 设计判断单链表中结点就是否关于中心对称算法。 4、C5??、A 9、B? 10、B ?7、C8??、B? typedef struct {int s[100]; int top;} sqstack; int lklistsymmetry(lklist *head) { sqstack stack; stack、top= -1; lklist *p; for(p=head;p!=0;p=p—>next) {stack、top++; stack、s[stack、top]=p->data;} for(p=head;p!=0;p=p->next) if (p—>data==stack、s[stack、top]) stack、top=stack、top-1; else return(0); return(1); } 2、 在链式存储结构上设计直接插入排序算法 void straightinsertsort(lklist *&head) { lklist *s,*p,*q; int t; if (head==0 || head—>next==0) return; else for(q=head,p=head->next;p!=0;p=q->next) { for(s=head;s!=q->next;s=s—>next) if (s—>data>p-〉data) break; if(s==q-〉next)q=p; else{q—>next=p->next; p-〉next=s—>next; s-〉next=p; t=p—> data;p->data=s->data;s—>data=t;} } } 4、 设计判断一棵二叉树就是否就是二叉排序树得算法。 int minnum=-32768,flag=1; typedef struct node{int key; struct node *lchild,*rchild;}bitree; void inorder(bitree *bt) { if (bt!=0) {inorder(bt—〉lchild); if(minnum>bt->key)flag=0; minnum=bt->key; inorder(bt->rchild);} }