8.设顺序线性表中有n个数据元素,则第i个位置上插入一个数据元素需要移动表中个数据元素:删除第i个位置上的数据元素需要移动表中个元素。9.设一组初始记录关键字序列为(20,18,22,16,30,19),则以20为中轴的一趟快速排序结果为10.设一组初始记录关键字序列为(20,18,22,16,30,19),则根据这些初始关键字序列建成的初始堆为11.设某无向图G中有n个顶点,用邻接矩阵A作为该图的存储结构,则顶点i和顶点j互为邻接点的条件是12.设无向图对应的邻接矩阵为A,则A中第i上非0元素的个数第i列上非0元素的个数(填等于,大于或小于)。13.设前序遍历某二叉树的序列为ABCD,中序遍历该二叉树的序列为BADC,则后序遍历该二叉树的序列为14.设散列函数H(k)=kmodp,解决冲突的方法为链地址法。要求在下列算法划线处填上正确的语句完成在散列表hashtalbe中查找关键字值等于k的结点,成功时返回指向关键字的指针,不成功时返回标志0。typedef struct node (int key, struct node *next;) Iklist;void createlkhash(lklist *hashtable[ )iint i,k, Iklist *s;for(i=0;i<m;i++)for(i=0;i<n;i++)ws-(lklist *)malloc(sizeof(lklist); s->key=a[i];k=a[] % p; s->next-hashtable[k];13三、计算题(每题10分,共30分)1、画出广义表LS=((),(e),(a,(b,c,d)))的头尾链表存储结构。2、下图所示的森林:(1)求树(a)的先根序列和后根序列;(2)求森林先序序列和中序序列:(3)将此森林转换为相应的二叉树:?A-?(D)(E)OK(b)(a)3、设散列表的地址范围是[0..9],散列函数为H(key)=(key2+2)MOD9,并采用链表处理冲突,请画出元素7、4、5、3、6、2、8、9依次插入散列表的存储结构。四、算法设计题(每题10分,共30分)9
9 8. 设顺序线性表中有 n 个数据元素,则第 i 个位置上插入一个数据元素需要移动表中 _个数据元素;删除第 i 个位置上的数据元素需要移动表中_个元素。 9. 设一组初始记录关键字序列为(20,18,22,16,30,19),则以 20 为中轴的一趟快速 排序结果为_。 10.设一组初始记录关键字序列为(20,18,22,16,30,19),则根据这些初始关键字序列 建成的初始堆为_。 11.设某无向图 G 中有 n 个顶点,用邻接矩阵 A 作为该图的存储结构,则顶点 i 和顶点 j 互为邻接点的条件是_。 12.设无向图对应的邻接矩阵为 A,则 A 中第 i 上非 0 元素的个数_第 i 列上非 0 元素的个数(填等于,大于或小于)。 13.设前序遍历某二叉树的序列为 ABCD,中序遍历该二叉树的序列为 BADC,则后序遍历 该二叉树的序列为_。 14.设散列函数 H(k)=k mod p,解决冲突的方法为链地址法。要求在下列算法划线处填上正 确的语句完成在散列表 hashtalbe 中查找关键字值等于 k 的结点,成功时返回指向关键 字的指针,不成功时返回标志 0。 typedef struct node {int key; struct node *next;} lklist; void createlkhash(lklist *hashtable[ ]) { int i,k; lklist *s; for(i=0;i<m;i++)_; for(i=0;i<n;i++) { s=(lklist *)malloc(sizeof(lklist)); s->key=a[i]; k=a[i] % p; s->next=hashtable[k];_; } } 三、计算题(每题 10 分,共 30 分) 1、画出广义表 LS=(( ) , (e) , (a , (b , c , d )))的头尾链表存储结构。 2、下图所示的森林: (1) 求树(a)的先根序列和后根序列; (2) 求森林先序序列和中序序列; (3)将此森林转换为相应的二叉树; A B C D E F G H I J K (a) (b) 3、设散列表的地址范围是[ 0.9 ],散列函数为 H(key)= (key 2 +2)MOD 9,并采用链 表处理冲突,请画出元素 7、4、5、3、6、2、8、9 依次插入散列表的存储结构。 四、算法设计题(每题 10 分,共 30 分)
设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表1.中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符。2.设计在链式存储结构上交换二叉树中所有结点左右子树的算法。3.在链式存储结构上建立一棵二叉排序树。10
10 1. 设单链表中有仅三类字符的数据元素(大写字母、数字和其它字符),要求利用原单链表 中结点空间设计出三个单链表的算法,使每个单链表只包含同类字符。 2. 设计在链式存储结构上交换二叉树中所有结点左右子树的算法。 3. 在链式存储结构上建立一棵二叉排序树
数据结构试卷(五)一、选择题(20分)1.数据的最小单位是()。(B)数据类型(A)数据项(C)数据元素(D)数据变量2.设一组初始记录关键字序列为(50,40,95,20,15,70,60,45),则以增量d=4的一趟希尔排序结束后前4条记录关键字为()。(A)40,50,20,95(B)15,40,60,20(C)15,20,40,45(D)45,40,15,203.设一组初始记录关键字序列为(25,50,15,35,80,85,20,40,36,70),其中含有5个长度为2的有序子表,则用归并排序的方法对该记录关键字序列进行一趟归并后的结)。果为((A)15,25,35,50,20,40,80,85,36,70(B)15,25,35,50,880,20,85,40,70,36(C)15,25,35,50,80,85,20,36,40,70(D)15,25,35,50,80,20,36,40,70,854.函数substr(“DATASTRUCTURE”,5,9)的返回值为()。(A)“STRUCTURE”(B)“DATA"(C)“ASTRUCTUR”(D)“DATASTRUCTURE”5.设一个有序的单链表中有n个结点,现要求插入一个新结点后使得单链表仍然保持有序,则该操作的时间复杂度为()。(A) 0(logzn)(B) 0(1)(C) 0(n)(D) 0(n)6.设一棵m叉树中度数为0的结点数为N,度数为1的结点数为N,.,度数为m的结点数为Nm,则N=()。(A) N,+N,+.....+Nm(B)1+N,+2N,+3N,+...+ (m-1)Nm(C) N,+2N,+3N,+(m-1)Nm(D)2N,+3N,+.*.*+(m+1)Nm7.设有序表中有1000个元素,则用二分查找查找元素X最多需要比较()次。(A) 25(B) 10(C) 7(D) 18.设连通图G中的边集E=(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)),则从顶点a出发可以得到一种深度优先遍历的顶点序列为()。(A)abedfc(B) acfebd(C)aebdfc(D)aedfcb9.设输入序列是1、2、3、…..、n,经过栈的作用后输出序列的第一个元素是n,则输出序列中第i个输出元素是()。(A) n-i(B) n-1-i(C) n+1-i(D)不能确定10设一组初始记录关键字序列为(45,80,55,40,42,85),则以第一个记录关键字45为基准而得到一趟快速排序的结果是()。(A)40,42,45,55,80,83(B)42,40,45,80,85,88(C)42,40,45,55,80,85(D)42,40,45,85,55,80二、填空题(共20分)1.设有一个顺序共享栈S[0:n-1],其中第一个栈项指针top1的初值为-1,第二个栈顶指针top2的初值为n,则判断共享栈满的条件是2.在图的邻接表中用顺序存储结构存储表头结点的优点是11
11 数据结构试卷(五) 一、选择题(20 分) 1.数据的最小单位是( )。 (A) 数据项 (B) 数据类型 (C) 数据元素 (D) 数据变量 2.设一组初始记录关键字序列为(50,40,95,20,15,70,60,45),则以增量 d=4 的一 趟希尔排序结束后前 4 条记录关键字为( )。 (A) 40,50,20,95 (B) 15,40,60,20 (C) 15,20,40,45 (D) 45,40,15,20 3.设一组初始记录关键字序列为(25,50,15,35,80,85,20,40,36,70),其中含有 5 个长度为 2 的有序子表,则用归并排序的方法对该记录关键字序列进行一趟归并后的结 果为( )。 (A) 15,25,35,50,20,40,80,85,36,70 (B) 15,25,35,50,80,20,85,40,70,36 (C) 15,25,35,50,80,85,20,36,40,70 (D) 15,25,35,50,80,20,36,40,70,85 4.函数 substr(“DATASTRUCTURE”,5,9)的返回值为( )。 (A) “STRUCTURE” (B) “DATA” (C) “ASTRUCTUR” (D) “DATASTRUCTURE” 5.设一个有序的单链表中有 n 个结点,现要求插入一个新结点后使得单链表仍然保持有序, 则该操作的时间复杂度为( )。 (A) O(log2n) (B) O(1) (C) O(n 2) (D) O(n) 6.设一棵 m 叉树中度数为 0 的结点数为 N0,度数为 1 的结点数为 Nl,.,度数为 m 的结 点数为 Nm,则 N0=( )。 (A) Nl+N2+.+Nm (B) l+N2+2N3+3N4+.+(m-1)Nm (C) N2+2N3+3N4+.+(m-1)Nm (D) 2Nl+3N2+.+(m+1)Nm 7.设有序表中有 1000 个元素,则用二分查找查找元素 X 最多需要比较( )次。 (A) 25 (B) 10 (C) 7 (D) 1 8.设连通图 G 中的边集 E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)},则从 顶点 a 出发可以得到一种深度优先遍历的顶点序列为( )。 (A) abedfc (B) acfebd (C) aebdfc (D) aedfcb 9.设输入序列是 1、2、3、.、n,经过栈的作用后输出序列的第一个元素是 n,则输出 序列中第 i 个输出元素是( )。 (A) n-i (B) n-1-i (C) n+1-i (D) 不能确定 10 设一组初始记录关键字序列为(45,80,55,40,42,85),则以第一个记录关键字 45 为基准而得到一趟快速排序的结果是( )。 (A) 40,42,45,55,80,83 (B) 42,40,45,80,85,88 (C) 42,40,45,55,80,85 (D) 42,40,45,85,55,80 二、填空题(共 20 分) 1. 设有一个顺序共享栈 S[0:n-1],其中第一个栈项指针 top1 的初值为-1,第二个栈顶 指针 top2 的初值为 n,则判断共享栈满的条件是_。 2. 在图的邻接表中用顺序存储结构存储表头结点的优点是_
3.设有一个n阶的下三角矩阵A,如果按照行的顺序将下三角矩阵中的元素(包括对角线个上元素)存放在n(n+1个连续的存储单元中,则A[i][j]与A[0][0]之间有数据元素。栈的插入和删除只能在栈的栈顶进行,后进的元素必定先出栈,所以又把栈称为4.表;队列的插入和删除运算分别在队列的两端进行,先进队列的元素必定先表。出队列,所以又把队列称为5.设一棵完全二叉树的顺序存储结构中存储数据元素为ABCDEF,则该二叉树的前序遍历序列为中序遍历序列为,后序遍历序列为6.设一棵完全二叉树有128个结点,则该完全二叉树的深度为,有个叶子结点。7设有向图G的存储结构用邻接矩阵A来表示,则A中第i行中所有非零元素个数之和等于顶点i的,第i列中所有非零元素个数之和等于顶点i的8.设一组初始记录关键字序列(ki,kz,…,k.)是堆,则对i=1,2,,n/2而言满足的条件为9.下面程序段的功能是实现冒泡排序算法,请在下划线处填上正确的语句。void bubble(int r[n))for(i=1;i<=n-1; i++)1:j++)for(exchange=0.j=0;j<if (r[i]>r[j+1)(temp=r[j+1];,r[i]=temp,exchange=1;)if (exchange--0) return;10.下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。struct record (int key; int others;);int bisearch(struct record r[ , int k)1int low=0,mid,high=n-1;while(low<=high)1if(r[midj.key==k) return(mid+1); else if() high=mid-1;else low=mid+1;3return(0);三、应用题(32分)1.设某棵二叉树的中序遍历序列为DBEAC,前序遍历序列为ABDEC,要求给出该二叉树的的后序遍历序列。2.设无向图G(如右图所示),给出该图的最小生成树上边的集合并8计算最小生成树各边上的权值之和。3.设一组初始记录关键字序列为(15,17,18,22,35,51,60),要求计算出成功查找时的平均查找长度。4.设散列表的长度为8,散列函数H(k)=kmod7,初始记录关键字序列为(25,31,8,27,13,68),要求分别计算出用线性探测法和链地址法作为解决冲突方法的平均查找长度。12
12 3. 设有一个 n 阶的下三角矩阵 A,如果按照行的顺序将下三角矩阵中的元素(包括对角线 上元素)存放在 n(n+1)个连续的存储单元中,则 A[i][j]与 A[0][0]之间有_个 数据元素。 4. 栈的插入和删除只能在栈的栈顶进行,后进栈的元素必定先出栈,所以又把栈称为 _表;队列的插入和删除运算分别在队列的两端进行,先进队列的元素必定先 出队列,所以又把队列称为_表。 5. 设一棵完全二叉树的顺序存储结构中存储数据元素为 ABCDEF,则该二叉树的前序遍历 序列为_,中序遍历序列为_,后序遍历序列为_。 6. 设一棵完全二叉树有 128 个结点,则该完全二叉树的深度为_,有_ 个叶子结点。 7. 设有向图 G 的存储结构用邻接矩阵 A 来表示,则 A 中第 i 行中所有非零元素个数之和等 于顶点 i 的_,第 i 列中所有非零元素个数之和等于顶点 i 的_。 8. 设一组初始记录关键字序列(k1,k2,.,kn)是堆,则对 i=1,2,.,n/2 而言满足 的条件为_。 9. 下面程序段的功能是实现冒泡排序算法,请在下划线处填上正确的语句。 void bubble(int r[n]) { for(i=1;i<=n-1; i++) { for(exchange=0,j=0; j<_;j++) if (r[j]>r[j+1]){temp=r[j+1];_;r[j]=temp;exchange=1;} if (exchange==0) return; } } 10. 下面程序段的功能是实现二分查找算法,请在下划线处填上正确的语句。 struct record{int key; int others;}; int bisearch(struct record r[ ], int k) { int low=0,mid,high=n-1; while(low<=high) { _; if(r[mid].key==k) return(mid+1); else if(_) high=mid-1;else low=mid+1; } return(0); } 三、应用题(32 分) 1. 设某棵二叉树的中序遍历序列为 DBEAC,前序遍历序列为 ABDEC, 要求给出该二叉树的的后序遍历序列。 2. 设无向图 G(如右图所示),给出该图的最小生成树上边的集合并 计算最小生成树各边上的权值之和。 3. 设一组初始记录关键字序列为(15,17,18,22,35,51,60), 要求计算出成功查找时的平均查找长度。 4. 设散列表的长度为 8,散列函数 H(k)=k mod 7,初始记录关键字序列为(25,31,8,27, 13,68),要求分别计算出用线性探测法和链地址法作为解决冲突方法的平均查找长度