数据结构1-10章习题

更新时间:2024-01-17 03:04:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第1章 绪论

1.简述下列概念:数据、数据元素、数据项、数据对象、数据结构、逻辑结构、存储结构、抽象数据类型。 2.试举一个数据结构的例子,叙述其逻辑结构和存储结构两方面的含义和相互关系。 3.简述逻辑结构的四种基本关系并画出它们的关系图。 4.存储结构由哪两种基本的存储方法实现? 5.选择题

(1)在数据结构中,从逻辑上可以把数据结构分成( )。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构

(2)与数据元素本身的形式、内容、相对位置、个数无关的是数据的( ) A.存储结构 B.存储实现 C.逻辑结构 D.运算实现 (3)通常要求同一逻辑结构中的所有数据元素具有相同的特性,这意味着( )。 A.数据具有同一特点

B.不仅数据元素所包含的数据项的个数要相同,而且对应数据项的类型要一致 C.每个数据元素都一样

D.数据元素所包含的数据项的个数要相等 (4)以下说法正确的是( )。 A.数据元素是数据的最小单位 B.数据项是数据的基本单位

C.数据结构是带有结构的各数据项的集合

D.一些表面上很不相同的数据可以有相同的逻辑结构 (5)以下与数据的存储结构无关的术语是( )。

A.顺序队列 B. 链表 C. 有序表 D. 链栈 (6)以下数据结构中,( )是非线性数据结构

A.树 B.字符串 C.队 D.栈 6.试分析下面各程序段的时间复杂度。 (1)x=90; y=100; while(y>0) if(x>100) {x=x-10;y--;} else x++; (2)for (i=0; i

for i=0; i

i=i*3; (5)x=0;

for(i=1; i1 y=0;

while(x≥(y+1)* (y+1)) y++;

第2章 线性表

1.选择题

(1)一个向量第一个元素的存储地址是100,每个元素的长度为2,则第5个元素的地址是( )。 A.110 B.108 C.100 D.120 (2)在n个结点的顺序表中,算法的时间复杂度是O(1)的操作是( )。 A.访问第i个结点(1≤i≤n)和求第i个结点的直接前驱(2≤i≤n) B.在第i个结点后插入一个新结点(1≤i≤n) C.删除第i个结点(1≤i≤n) D.将n个结点从小到大排序

(3) 向一个有127个元素的顺序表中插入一个新元素并保持原来顺序不变,平均要移动 的元素个数为( )。

A.8 B.63.5 C.63 D.7 (4)链接存储的存储结构所占存储空间( )。

A.分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针 B.只有一部分,存放结点值

C.只有一部分,存储表示结点间关系的指针

D.分两部分,一部分存放结点值,另一部分存放结点所占单元数

(5)线性表若采用链式存储结构时,要求内存中可用存储单元的地址( )。 A.必须是连续的 B.部分地址必须是连续的 C.一定是不连续的 D.连续或不连续都可以 (6)线性表L在( )情况下适用于使用链式结构实现。 A.需经常修改L中的结点值 B.需不断对L进行删除插入 C.L中含有大量的结点 D.L中结点结构复杂 (7)单链表的存储密度( )。

A.大于1 B.等于1 C.小于1 D.不能确定

(8)将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是( )。 A.n B.2n-1 C.2n D.n-1

(9)在一个长度为n的顺序表中,在第i个元素(1≤i≤n+1)之前插入一个新元素时须向后移动( )个元素。

A.n-i B.n-i+1 C.n-i-1 D.i (10) 线性表L=(a1,a2,??an),下列说法正确的是( )。

A.每个元素都有一个直接前驱和一个直接后继 B.线性表中至少有一个元素

C.表中诸元素的排列必须是由小到大或由大到小

D.除第一个和最后一个元素外,其余每个元素都有一个且仅有一个直接前驱和直接后继。 (11) 若指定有n个元素的向量,则建立一个有序单链表的时间复杂性的量级是( )。 A.O(1) B.O(n) C.O(n2) D.O(nlog2n) (12) 以下说法错误的是( )。

A.求表长、定位这两种运算在采用顺序存储结构时实现的效率不比采用链式存储结构时实现的效率低

B.顺序存储的线性表可以随机存取

C.由于顺序存储要求连续的存储区域,所以在存储管理上不够灵活 D.线性表的链式存储结构优于顺序存储结构

(13) 在单链表中,要将s所指结点插入到p所指结点之后,其语句应为( )。 A.s->next=p+1; p->next=s; B.(*p).next=s; (*s).next=(*p).next; C.s->next=p->next; p->next=s->next; D.s->next=p->next; p->next=s;

(14) 在双向链表存储结构中,删除p所指的结点时须修改指针( )。 A.p->next->prior=p->prior; p->prior->next=p->next; B.p->next=p->next->next; p->next->prior=p; C.p->prior->next=p; p->prior=p->prior->prior; D.p->prior=p->next->next; p->next=p->prior->prior;

(15) 在双向循环链表中,在p指针所指的结点后插入q所指向的新结点,其修改指针的操作是( )。 A.p->next=q; q->prior=p; p->next->prior=q; q->next=q; B.p->next=q; p->next->prior=q; q->prior=p; q->next=p->next; C.q->prior=p; q->next=p->next; p->next->prior=q; p->next=q; D.q->prior=p; q->next=p->next; p->next=q; p->next->prior=q;

2.算法设计题

(1)将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间, 不另外占用其它的存储空间。表中不允许有重复的数据。

(4)设计一个算法,通过一趟遍历在单链表中确定值最大的结点。

(5)设计一个算法,通过遍历一趟,将链表中所有结点的链接方向逆转,仍利用原表的存储空间。 (7)已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。

第3章 栈和队列

1.选择题

(1)若让元素1,2,3,4,5依次进栈,则出栈次序不可能出现在( )种情况。 A.5,4,3,2,1 B.2,1,5,4,3 C.4,3,1,2,5 D.2,3,5,4,1

(2)若已知一个栈的入栈序列是1,2,3,?,n,其输出序列为p1,p2,p3,?,pn,若p1=n,则pi为( )。

A.i B.n-i C.n-i+1 D.不确定

(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为( )。

A.r-f B.(n+f-r)%n C.n+r-f D.(n+r-f)%n

(4)链式栈结点为:(data,link),top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作( )。

A.x=top->data;top=top->link; B.top=top->link;x=top->link; C.x=top;top=top->link; (5)设有一个递归算法如下 int fact(int n) { //n大于等于0 if(n<=0) return 1;

else return n*fact(n-1); }

则计算fact(n)需要调用该函数的次数为( )。

A. n+1 B. n-1 C. n D. n+2 (6)栈在 ( )中有所应用。

A.递归调用 B.函数调用 C.表达式求值 D.前三个选项都有

(7)为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( )。

A.队列 B.栈 C. 线性表 D.有序表

(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是( )。

A.2 B.3 C.4 D. 6

(9)在一个具有n个单元的顺序栈中,假设以地址高端作为栈底,以top作为栈顶指针,则当作进栈处理时,top的变化为( )。

A.top不变 B.top=0 C.top-- D.top++

(10)设计一个判别表达式中左,右括号是否配对出现的算法,采用( )数据结构最佳。 A.线性表的顺序存储结构 B.队列 C. 线性表的链式存储结构 D. 栈 (11)用链接方式存储的队列,在进行删除运算时( )。 A. 仅修改头指针 B. 仅修改尾指针

C. 头、尾指针都要修改 D. 头、尾指针可能都要修改 (12)循环队列存储在数组A[0..m]中,则入队时的操作为( )。 A. rear=rear+1 B. rear=(rear+1)%(m-1) C. rear=(rear+1)%m D. rear=(rear+1)%(m+1)

(13)最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是( )。 C.rear+1==front D. (rear-l)%n==front (14)栈和队列的共同点是( )。

A. 都是先进先出 B. 都是先进后出 C. 只允许在端点处插入和删除元素 D. 没有共同点 (15)一个递归算法必须包括( )。

A. 递归部分 B. 终止条件和递归部分

D.x=top->link;

A. (rear+1)%n==front B. rear==front

C. 迭代部分 D. 终止条件和迭代部分 2.算法设计

(1)回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)

(2)设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息。

(3)假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。

①下面所示的序列中哪些是合法的?

A. IOIIOIOO B. IOOIOIIO C. IIIOIOIO D. IIIOOIOO

②通过对①的分析,写出一个算法,判定所给的操作序列是否合法。若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。

(4)已知Ackermann函数定义如下:

① 写出计算Ack(m,n)的递归算法,并根据此算法给出出Ack(2,1)的计算过程。

(5)已知f为单链表的表头指针, 链表中存储的都是整型数据,试写出实现下列运算的算法: ① 求链表中的最大整数; ② 求链表的结点个数; ③ 求所有整数的平均值。

第4章 串

1.选择题

(1)串是一种特殊的线性表,其特殊性体现在( )。

A.可以顺序存储 B.数据元素是一个字符 C.可以链式存储 D.数据元素可以是多个字符若 (2)串下面关于串的的叙述中,( )是不正确的?

A.串是字符的有限序列 B.空串是由空格构成的串

C.模式匹配是串的一种重要运算 D.串既可以采用顺序存储,也可以采用链式存储 (3)串“ababaaababaa”的next数组为( )。

A.012345678999 B.012121111212 C.011234223456 D.0123012322345 (4)串“ababaabab”的nextval为( )。

A.010104101 B.010102101 C.010100011 D.010101011 (5)串的长度是指( )。

A.串中所含不同字母的个数 B.串中所含字符的个数 C.串中所含不同字符的个数 D.串中所含非空格字符的个数 2.简答题

(1)已知模式串t=‘abcaabbabcab’写出用KMP法求得的每个字符对应的next函数值。

第5章 数组与广义表

一、选择题

(1)假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=( )。

A.808 B.818 C.1010 D.1020

(2)设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( )。

A.BA+141 B.BA+180 C.BA+222 D.BA+225

(3)设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为( )。

A.13 B.33 C.18 D.40

(4)若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(i

A.i*(i-1)/2+j B.j*(j-1)/2+i C.i*(i+1)/2+j D.j*(j+1)/2+i

(5)A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是( )。

A.i(i-1)/2+j B.j(j-1)/2+i C.i(j-i)/2+1 D.j(i-1)/2+1

(6)设二维数组A[1.. m,1.. n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。

A.(i-1)*n+j B.(i-1)*n+j-1 C.i*(j-1) D.j*m+i-1 (7)数组A[0..4,-1..-3,5..7]中含有元素的个数( )。

A.55 B.45 C.36 D.16

(8)广义表A=(a,b,(c,d),(e,(f,g))),则Head(Tail(Head(Tail(Tail(A)))))的值为( )。 A.(g) B.(d) C.c D.d (9)广义表((a,b,c,d))的表头是( ),表尾是( )。

A.a B.( ) C.(a,b,c,d) D.(b,c,d) (10)设广义表L=((a,b,c)),则L的长度和深度分别为( )。

A.1和1 B.1和3 C.1和2 D.2和3 二、问答题

(1)数组A中,每个元素A[i,j]的长度均为32个二进位,行下标从-1到9,列下标从1到11,从首地址S开始连续存放主存储器中,主存储器字长为16位。求:

① 存放该数组所需多少单元?

② 存放数组第4列所有元素至少需多少单元? ③ 数组按行存放时,元素A[7,4]的起始地址是多少? ④ 数组按列存放时,元素A[4,7]的起始地址是多少?

(2)请将香蕉banana用工具 H( )—Head( ),T( )—Tail( )从L中取出。

L=(apple,(orange,(strawberry,(banana)),peach),pear)

第6章 树和二叉树

1.选择题

(1)把一棵树转换为二叉树后,这棵二叉树的形态是( )。 A.唯一的 B.有多种

C.有多种,但根结点都没有左孩子 D.有多种,但根结点都没有右孩子 (2)由3 个结点可以构造出多少种不同的二叉树?( ) A.2 B.3 C.4 D.5

(3)一棵完全二叉树上有1001个结点,其中叶子结点的个数是( )。 A.250 B. 500 C.254 D.501 (4)一个具有1025个结点的二叉树的高h为( )。

A.11 B.10 C.11至1025之间 D.10至1024之间 (5)深度为h的满m叉树的第k层有( )个结点。(1=

A.指向最左孩子 B.指向最右孩子 C.空 D.非空

(7)对二叉树的结点从1开始进行连续编号,要求每个结点的编号大于其左、右孩子的编号,同一结点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用( )遍历实现编号。

A.先序 B. 中序 C. 后序 D. 从根开始按层次遍历

(8)若二叉树采用二叉链表存储结构,要交换其所有分支结点左、右子树的位置,利用( )遍历方法最合适。

A.前序 B.中序 C.后序 D.按层次 (9)在下列存储形式中,( )不是树的存储形式?

A.双亲表示法 B.孩子链表表示法 C.孩子兄弟表示法 D.顺序存储表示法

(10)一棵非空的二叉树的先序遍历序列与后序遍历序列正好相反,则该二叉树一定满足( )。 A.所有的结点均无左孩子 B.所有的结点均无右孩子 C.只有一个叶子结点 D.是任意一棵二叉树

(11)某二叉树的前序序列和后序序列正好相反,则该二叉树一定是( )的二叉树。 A.空或只有一个结点 B.任一结点无左子树 C.高度等于其结点数 D.任一结点无右子树

(12)若X是二叉中序线索树中一个有左孩子的结点,且X不为根,则X的前驱为( )。 A.X的双亲 B.X的右子树中最左的结点 C.X的左子树中最右结点 D.X的左子树中最右叶结点 (13)引入二叉线索树的目的是( )。

A.加快查找结点的前驱或后继的速度 B.为了能在二叉树中方便的进行插入与删除 C.为了能方便的找到双亲 D.使二叉树的遍历结果唯一 (14)线索二叉树是一种( )结构。

A.逻辑 B. 逻辑和存储 C.物理 D.线性

(15)设F是一个森林,B是由F变换得的二叉树。若F中有n个非终端结点,则B中右指针域为空的结点有( )个。

A. n-1 B.n C. n+1 D. n+2

2.应用题

(1)试找出满足下列条件的二叉树

① 先序序列与后序序列相同 ②中序序列与后序序列相同 ③ 先序序列与中序序列相同 ④中序序列与层次遍历序列相同

(2)设一棵二叉树的先序序列: A B D F C E G H ,中序序列: B F D A G E H C ①画出这棵二叉树。

②画出这棵二叉树的后序线索树。

③将这棵二叉树转换成对应的树(或森林)。

(3) 假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19,0.02,0.06,0.32,0.03,0.21,0.10。

① 试为这8个字母设计赫夫曼编码。

② 试设计另一种由二进制表示的等长编码方案。 ③ 对于上述实例,比较两种方案的优缺点。

第7章 图

1.选择题

(1)在一个图中,所有顶点的度数之和等于图的边数的( )倍。 A.1/2 B.1 C.2 D.4

(2)在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的( )倍。 A.1/2 B.1 C.2 D.4 (3)具有n个顶点的有向图最多有( )条边。

A.n B.n(n-1) C.n(n+1) D.n2

(4)n个顶点的连通图用邻接距阵表示时,该距阵至少有( )个非零元素。 A.n B.2(n-1) C.n/2 D.n2 (5)G是一个非连通无向图,共有28条边,则该图至少有( )个顶点。 A.7 B.8 C.9 D.10

(6)若从无向图的任意一个顶点出发进行一次深度优先搜索可以访问图中所有的顶点,则该图一定是( )图。

A.非连通 B.连通 C.强连通 D.有向 (7)下面( )算法适合构造一个稠密图G的最小生成树。

A. Prim算法 B.Kruskal算法 C.Floyd算法 D.Dijkstra算法 (8)用邻接表表示图进行广度优先遍历时,通常借助( )来实现算法。 A.栈 B. 队列 C. 树 D.图 (9)用邻接表表示图进行深度优先遍历时,通常借助( )来实现算法。 A.栈 B. 队列 C. 树 D.图 (10)深度优先遍历类似于二叉树的( )。

A.先序遍历 B.中序遍历 C.后序遍历 D.层次遍历 (11)广度优先遍历类似于二叉树的( )。

A.先序遍历 B.中序遍历 C.后序遍历 D.层次遍历 (12)图的BFS生成树的树高比DFS生成树的树高( )。

A.小 B.相等 C.小或相等 D.大或相等

(13)已知图的邻接矩阵如图7.1所示,则从顶点0出发按深度优先遍历的结果是( )。

?011?100??100??110?101??000?110?101?1001??0100??0110?1010??1101?0010??1A.0 2 4 3 1 5 6

B.0 1 3 6 5 4 2 C.0 1 3 4 2 5 6 D.0 3 6 1 5 4 2

图7.1 邻接矩阵

(14)已知图的邻接表如图7.2所示,则从顶点0出发按广度优先遍历的结果是( ),按深度优先遍历的结果是( )。

A.0 1 3 2 B.0 2 3 1

C.0 3 2 1 D.0 1 2 3

图7.2 邻接表

(15)下面( )方法可以判断出一个有向图是否有环。

A.深度优先遍历 B.拓扑排序 C.求最短路径 D.求关键路径 2.应用题

(1)已知如图7.3所示的有向图,请给出: ① 每个顶点的入度和出度; ② 邻接矩阵; ③ 邻接表;

④ 逆邻接表。

(2)已知如图7.4所示的无向网,请给出: ① 邻接矩阵; ② 邻接表; ③ 最小生成树

(3)已知图的邻接矩阵如7.5所示。试分别画出自顶点1出发进行遍历所得的深度优先生成树和广度优先生成树。

???4??3??????????????4?559???35?5???5?55?7654?9?7?3?????63?2????5?2?6?????5??4??????6?????

图7.3 有向图

图7.4 无向网

(4)有向网如图7.6所示,试用迪杰斯特拉算法求出从顶点a到其他各顶点间的最短路径,完成表7.1。

终点 i=1 b c d e f g vj S 终点集

i=2 i=3 i=4 i=5 i=6 图7.6 有向网

5 邻接矩阵

(5)试对图7.7所示的AOE-网:

① 求这个工程最早可能在什么时间结束; ② 求每个活动的最早开始时间和最迟开始时间;

③ 确定哪些活动是关键活动

图7.7 AOE-网

第9章 查找

1.选择题

(1)对n个元素的表做顺序查找时,若查找每个元素的概率相同,则平均查找长度为( )。 A.(n-1)/2 B. n/2 C.(n+1)/2 D.n (2)适用于折半查找的表的存储方式及元素排列要求为( )。

A.链接方式存储,元素无序 B.链接方式存储,元素有序 C.顺序方式存储,元素无序 D.顺序方式存储,元素有序

(3)当在一个有序的顺序表上查找一个数据时,既可用折半查找,也可用顺序查找,但前者比后者的查找速度( )。

A.必定快 B.不一定

C.在大部分情况下要快 D.取决于表递增还是递减 (4)折半查找有序表(4,6,10,12,20,30,50,70,88,100)。若查找表中元素58,则它将依次与表中( )比较大小,查找结果是失败。

A.20,70,30,50 B.30,88,70,50

C.20,50 D.30,88,50

(5)对22个记录的有序表作折半查找,当查找失败时,至少需要比较( )次关键字。 A.3 B.4 C.5 D.6 (6)折半搜索与二叉排序树的时间性能( )。

A.相同 B.完全不同

C.有时不相同 D.数量级都是O(log2n)

(7)分别以下列序列构造二叉排序树,与用其它三个序列所构造的结果不同的是( )。 A.(100,80, 90, 60, 120,110,130) B.(100,120,110,130,80, 60, 90) C.(100,60, 80, 90, 120,110,130) D.(100,80, 60, 90, 120,130,110)

(8)在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A,并已知A的左孩子的平衡因子为0右孩子的平衡因子为1,则应作( )型调整以使其平衡。

A.LL B.LR C.RL D.RR (9)下列关于m阶B-树的说法错误的是( )。 A.根结点至多有m棵子树 B.所有叶子都在同一层次上

C.非叶结点至少有m/2 (m为偶数)或m/2+1(m为奇数)棵子树 D.根结点中的数据是有序的

(10)下面关于B-和B+树的叙述中,不正确的是( )。

A.B-树和B+树都是平衡的多叉树 B.B-树和B+树都可用于文件的索引结构 C.B-树和B+树都能有效地支持顺序检索 D.B-树和B+树都能有效地支持随机检索 (11)m阶B-树是一棵( )。

A.m叉排序树 B.m叉平衡排序树 C.m-1叉平衡排序树 D.m+1叉平衡排序树 (12)下面关于哈希查找的说法,正确的是( )。

A.哈希函数构造的越复杂越好,因为这样随机性好,冲突小 B.除留余数法是所有哈希函数中最好的

C.不存在特别好与坏的哈希函数,要视情况而定 D.哈希表的平均查找长度有时也和记录总数有关 (13)下面关于哈希查找的说法,不正确的是( )。 A.采用链地址法处理冲突时,查找一个元素的时间是相同的

B.采用链地址法处理冲突时,若插入规定总是在链首,则插入任一个元素的时间是相同的

C.用链地址法处理冲突,不会引起二次聚集现象 D.用链地址法处理冲突,适合表长不确定的情况

(14)设哈希表长为14,哈希函数是H(key)=key,表中已有数据的关键字为15,38,61,84共四个,现要将关键字为49的元素加到表中,用二次探测法解决冲突,则放入的位置是( )。 A.8 B.3 C.5 D.9

(15)采用线性探测法处理冲突,可能要探测多个位置,在查找成功的情况下,所探测的这些位置上的关键字 ( )。

A.不一定都是同义词 B.一定都是同义词 C.一定都不是同义词 D.都相同

2.应用题

(1)假定对有序表:(3,4,5,7,24,30,42,54,63,72,87,95)进行折半查找,试回答下列问题:

① 画出描述折半查找过程的判定树; ② 若查找元素54,需依次与哪些元素比较? ③ 若查找元素90,需依次与哪些元素比较?

④ 假定每个元素的查找概率相等,求查找成功时的平均查找长度。

(2)在一棵空的二叉排序树中依次插入关键字序列为12,7,17,11,16,2,13,9,21,4,请画出所得到的二叉排序树。

(3)已知如下所示长度为12的表:(Jan, Feb, Mar, Apr, May, June, July, Aug, Sep, Oct, Nov, Dec)

① 试按表中元素的顺序依次插入一棵初始为空的二叉排序树,画出插入完成之后的二叉排序树,并求其在等概率的情况下查找成功的平均查找长度。

② 若对表中元素先进行排序构成有序表,求在等概率的情况下对此有序表进行折半查找时查找成功的平均查找长度。

③ 按表中元素顺序构造一棵平衡二叉排序树,并求其在等概率的情况下查找成功的平均查找长度。

(4)对下面的3阶B-树,依次执行下列操作,画出各步操作的结果。 ① 插入90 ② 插入25 ③ 插入45 ④ 删除60 50308 20

806010035 40 (5)设哈希表的地址范围为0~17,哈希函数为:H(key)=key。用线性探测法处理冲突,输入关键字序列:(10,24,32,17,31,30,46,47,40,63,49),构造哈希表,试回答下列问题:

① 画出哈希表的示意图;

② 若查找关键字63,需要依次与哪些关键字进行比较? ③ 若查找关键字60,需要依次与哪些关键字比较?

④ 假定每个关键字的查找概率相等,求查找成功时的平均查找长度。

(6)设有一组关键字(9,01,23,14,55,20,84,27),采用哈希函数:H(key)=key %7 ,表长为

10,用开放地址法的二次探测法处理冲突。要求:对该关键字序列构造哈希表,并计算查找成功的平均查找长度。

(7)设哈希函数H(K)=3 K mod 11,哈希地址空间为0~10,对关键字序列(32,13,49,24,38,21,4,12),按下述两种解决冲突的方法构造哈希表,并分别求出等概率下查找成功时和查找失败时的平均查找长度ASLsucc和ASLunsucc。

① 线性探测法; ② 链地址法。

第10章 排序

1.选择题

(1)从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置上的方法,这种排序方法称为( )。

A.归并排序 B.冒泡排序 C.插入排序 D.选择排序

(2)从未排序序列中挑选元素,并将其依次放入已排序序列(初始时为空)的一端的方法,称为( )。 A.归并排序 B.冒泡排序 C.插入排序 D.选择排序

(3)对n个不同的关键字由小到大进行冒泡排序,在下列( )情况下比较的次数最多。 A.从小到大排列好的 B.从大到小排列好的 C.元素无序 D.元素基本有序

(4)对n个不同的排序码进行冒泡排序,在元素无序的情况下比较的次数最多为( )。 A.n+1 B.n C.n-1 D.n(n-1)/2 (5)快速排序在下列( )情况下最易发挥其长处。 A.被排序的数据中含有多个相同排序码 B.被排序的数据已基本有序 C.被排序的数据完全无序

D.被排序的数据中的最大值和最小值相差悬殊

(6)对n个关键字作快速排序,在最坏情况下,算法的时间复杂度是( )。 A.O(n) B.O(n2) C.O(nlog2n) D.O(n3)

(7)若一组记录的排序码为(46, 79,56,38,40,84),则利用快速排序的方法,以第一个记录为基准得到的一次划分结果为( )。

A.38,40,46,56,79,84 B.40,38,46,79,56,84 C.40,38,46,56,79,84 D.40,38,46,84,56,79 (8)下列关键字序列中,( )是堆。

A.16,72,31,23,94,53 B.94,23,31,72,16,53 C.16,53,23,94,31,72 D.16,23,53,31,94,72 (9)堆是一种( )排序。

A.插入 B.选择 C.交换 D.归并 (10)堆的形状是一棵( )。

A.二叉排序树 B.满二叉树 C.完全二叉树 D.平衡二叉树

(11)若一组记录的排序码为(46,79,56,38,40,84),则利用堆排序的方法建立的初始堆为( )。 A.79,46,56,38,40,84 B.84,79,56,38,40,46 C.84,79,56,46,40,38 D.84,56,79,40,46,38 (12)下述几种排序方法中,要求内存最大的是( )。

A.希尔排序 B.快速排序 C.归并排序 D.堆排序 (13)下述几种排序方法中,( )是稳定的排序方法。

A.希尔排序 B.快速排序 C.归并排序 D.堆排序

(14)数据表中有10000个元素,如果仅要求求出其中最大的10个元素,则采用( )算法最节省时间。

A.冒泡排序 B.快速排序 C.简单选择排序 D.堆排序

(15)下列排序算法中,( )不能保证每趟排序至少能将一个元素放到其最终的位置上。 A.希尔排序 B.快速排序 C.冒泡排序 D.堆排序 2.应用题

(1)设待排序的关键字序列为{12,2,16,30,28,10,16*,20,6,18},试分别写出使用以下排序方法,每趟排序结束后关键字序列的状态。

① 直接插入排序 ② 折半插入排序

③ 希尔排序(增量选取5,3,1) ④ 冒泡排序 ⑤ 快速排序 ⑥ 简单选择排序 ⑦ 堆排序 ⑧ 二路归并排序

(2)给出如下关键字序列{321,156,57,46,28,7,331,33,34,63},试按链式基数排序方法,列出每一趟分配和收集的过程。

本文来源:https://www.bwwdw.com/article/mz2o.html

Top