数据结构题目及答案_第1页
数据结构题目及答案_第2页
数据结构题目及答案_第3页
数据结构题目及答案_第4页
数据结构题目及答案_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构-C语言版第一章 绪论单项选择题1在数据结构中,数据的基本单位是_ C _。A. 数据项 B. 数据类型 C. 数据元素 D. 数据变量 2数据结构中数据元素之间的逻辑关系被称为_ D _。 A. 数据的存储结构 B. 数据的基本操作 C. 程序的算法 D. 数据的逻辑结构3在数据结构中,与所使用计算机无关的是数据的_ C _。 A. 存储结构 B. 逻辑和物理结构 C. 逻辑结构 D. 物理结构 4在链式存储结构中,数据之间的关系是通过_ B _体现的。A. 数据在内存的相对位置 B. 指示数据元素的指针C. 数据的存储地址 D. 指针5计算算法的时间复杂度是属于一种_ B _。A.

2、 事前统计的方法 B. 事前分析估算的方法 C. 事后统计的方法 D. 事后分析估算的方法6在对算法的时间复杂度进行估计的时候,下列最佳的时间复杂度是_ D _。 A. n2 B. nlogn C. n D. logn 7设使用某算法对n个元素进行处理,所需的时间是T(n)=100nlog2n+200n+2000,则该算法的渐近时间复杂度为_ D _。A. O(1) B. O(n) C. O(200n) D. O(nlog2n)第二章 线性表单项选择题1链表不具有的特点是_ A _。 A. 可随机访问任一元素 B. 插入和删除时不需要移动元素C. 不必事先估计存储空间 D. 所需空间与线性表的

3、长度正比 2设顺序表的每个元素占8个存储单元。第1个单元的存储地址是100,则第6个元素占用的最后一个存储单元的地址为 C 。A. 139 B. 140 C. 147 D. 1483在线性链表存储结构下,插入操作算法 C 。A. 需要判断是否表满 B. 需要判断是否表空 C. 不需要判断表满 D. 需要判断是否表空和表满 4在一个单链表中,若删除p所指结点的后继结点,则执行 A 。 A. p->next = p->next->next; B. p->next = p->next; C. p = p->next->next; D. p = p->n

4、ext; p->next = p->next->next; 5将长度为n的单链表接在长度为m的单链表之后的算法时间复杂度为 B 。 A. O(n) B. O(1) C. O(m) D. O(m+n)6需要预分较大空间,插入和删除不需要移动元素的线性表,其存储结构是 B 。 A. 单链表 B. 静态链表 C. 线性链表 D. 顺序存储方式填空题1在带表头结点的单链表中,当删除某一指定结点时,必须找到该结点的_前驱_结点。2在单链表中,指针p所指结点为最后一个结点的条件是 p->next=NULL 。3将两个各有n个元素的有序表归并成一个有序表,其最少的比较次数是 1 。

5、4在一个长度为n的顺序表中第i个元素(1in)之前插入一个元素时,需向后移动元素的个数是 n-i+1 。5在长度为n的顺序表中插入一个元素的时间复杂度为 O(n) 。例题解析【例2-1】 编写一个算法将一个单链表逆转,要求在原表上进行,不允许重新建链表。 解:该算法可以在遍历原表的时候将各结点的指针逆转,从原表的第一个结点开始,头结点的指针在最后修改成指向原表的最后一个结点,即新表的第一个结点。实现本题功能的函数如下: void inverse(Lnode *h) s=h->next; if(s=NULL) return; q=NULL; p=s; while(p!=NULL) p=p-

6、>next; s->next=q; /*逆转指针*/ q=s; /*指针前移*/ s=p; h->next=q; /*头指针h的后继是p*/【例2-2】 编写一算法将两个按元素值递增有序排列的单链表A和B归并成一个按元素值递增有序排列的单链表C。解:对于两个或两个以上的,结点按元素值有序排列的单链表进行操作时,应采用“指针平行移动,依次扫描完成”的方法。从两表的第一个结点开始顺链表逐个将对应数据元素进行比较,复制小的并插入c表尾。当两表中之一已到表尾,则复制另一个链表的剩余部分,插入到c表尾。设pa、pb分别指向两表当前结点,p指向c表的当前表尾结点。若设A中当前所指的元素为

7、a,B中当前所指的元素为b,则当前应插入到 C中的元素c为 例如:A=(3,5,8,11) B=(2,6,8,9,11,15,20)则 C=(2,3,5,6,8,8,9,11,11,15,20)实现本题功能的函数如下:Lnode *hb(Lnode *pa,Lnode *pb)Lnode *p,*q,*pc; pc=(Lnode*)malloc(sizeof(Lnode); /*建立表c 的头结点pc*/ p=pc; /*p指向C表头结点*/ while(pa!=NULL&&pb!=NULL) q=(Lnode*)malloc(sizeof(Lnode); /*建立新结点q*/

8、 if(pb->data<pa->data) /*比较A、B表中当前结点的数据域值的大小*/ q->data=pb->data; /*B中结点值小,将其值赋给q的数据域*/ pb=pb->next; /*B中指针pb后移*/ else q->data=pa->data; /*相反,将A结点值赋给q的数据域*/ pa=pa->next; /*A中指针pa后移*/ p->next=q; /*将q接在p的后面*/p=q; /*p始终指向C表当前尾结点*/while(pa!=NULL) /*若表A比B长,将A余下的结点链在C表尾*/ q=(L

9、node*)malloc(sizeof(Lnode); q->data=pa->data; pa=pa->next; p->next=q; p=q; while(pb!=NULL) /*若表B比A长,将B余下的结点链在C表尾*/ q=(Lnode*)malloc(sizeof(Lnode); q->data=pb->data; pb=pb->next; p->next=q; p=q; p->next=NULL;p=pc; /*p指向表C的头结点pc*/pc=p->next; /*改变指针状态,使pc指向p的后继*/free(p); /

10、*释放p空间*/return (pc); 此算法的时间复杂度为O(m+n),其中m,n分别是两个被合并表的表长。第三章 栈和队列单项选择题1在初始为空的堆栈中依次插入元素f,e,d,c,b,a以后,连续进行了三次删除操作,此时栈顶元素是 B 。 A. B.C. D. 2若某堆栈的输入序列是1,2,3,.,n,输出序列的第一个元素为n,则第i个输出元素为 C 。A. i B. n-i C. n-i+1 D. 哪个元素无所谓3向一个栈顶指针为h的带头结点链栈中插入指针s所指的结点时,应执行 D 。 A. h->next = s; B. s->next = h; C. s->nex

11、t = h; h = h->next; D. s->next = h->next; h->next=s; 4一个栈的入栈序列是 a,b,c,d,e,则栈的不可能的输出序列是 C 。 A. edcba B. decba C. dceab D. abcde5栈和队列的共同点是 C 。A. 都是先进后出 B. 都是先进先出 C. 只允许在端点处插入和删除元素 D. 没有共同点6对于循环队列 D 。A. 无法判断队列是否为空 B. 无法判断队列是否为满 C. 队列不可能满 D. 以上说法都不是7. 若用一个大小为6的数组来实现循环队列,且当前队尾指针rear和队头指针front

12、的值分别为0和3。当从队列中删除一个元素,再加入两个元素后,rear和front的值分别为 A 。A. 1和5 B. 2和4 C. 4和2 D. 5和18. 判定一个循环队列 QU(最多元素为 m0)为满队列的条件是 C 。A. QU->front=QU->rear B. QU->front!=QU->rearC. QU->front=(QU->rear+1) % m0 D. QU->front!=(QU->rear+1) % m0 9.判定一个循环队列 QU(最多元素为 m0)为空的条件是 A 。A. QU->front=QU->r

13、ear B. QU->front!=QU->rear C. QU->front=(QU->rear+1) % m0 D. QU->front!=(QU->rear+1) % m0 填空题1在求表达式值的算符优先算法中使用的主要数据结构是 栈 。2设有一个空栈,现输入序列为1,2,3,4,5。经过push,push,pop,push,pop,push,pop,push后,输出序列是 2 3 4 。3仅允许在同一端进行插入和删除的线性表称为 栈 。7在顺序栈s中,栈为空的条件是 s.top=s.base ,栈为满的条件是_s.top-s.base>=s.s

14、tacksize_。4用S表示入栈操作,X表示出栈操作,若元素入栈顺序为1234,为了得到1342出栈顺序,相应的S、X操作串为 SXSSXSXX 。5用一个大小为1000的数组来实现循环队列,当前rear和front的值分别为0和994,若要达到队满的条件,还需要继续入队的元素个数是 993 。例题解析【例3-1】 编程实现:用除法把十进制数转换成二进制数。 解:算法思想:用初始十进制数除以2把余数记录下来并且若商不为0则再用商去除以2直到商为0,这时把所有的余数按出现的逆序排列起来(先出现的余数排在后面,后出现的余数排在前面)就得到了相应的二进制数,如把十进制数35转换成二进制数的过程如图

15、3-1所示。35178421011001余数结果:10011 图3-1 十进制数转换成二进制数的过程由题意可知,我们可以用一个栈来保存所有的余数,当商为0时则让栈里的所有余数出栈则可以得到正确的二进制数,算法可描述如下:void conversion()Stack S; int n; InitStack(&S); printf("Input a number to convert:n");scanf("%d",&n); if(n<0) printf("nThe number must be over 0.");

16、return;if(n=0) Push(S,0); while(n!=0) Push(S,n%2); n=n/2; printf("the result is: "); while(!StackEmpty(*S) printf("%d", Pop(S);第四章 串单项选择题1串是一种特殊的线性表,其特殊性体现在 B 。A. 可以顺序存储 B. 数据元素是一个字符 C. 可以链接存储 D. 数据元素可以是多个字符 2设有两个串p和q,求q在p中首次出现的位置的运算称作 B 。 A. 连接 B. 模式匹配 C. 求子串 D. 求串长3串是一个 B 的序列。A

17、. 不少于一个字母 B. 有限个字符 C. 不少于一个字符 D. 空格或字母 4已知串s=ABCDEFGH,则s的所有不同子串的个数为 D 。 A. 8 B. 9 C. 36 D. 37填空题1两个串相等的充分必要条件是 两个串的长度相等且对应位置的字符相同 。2空格串是 由一个或多个空格字符组成的串 ,其长度等于 其包含的空格个数 。3在串S=tuition中,以t为首字符且值不相同的子串有 10 个。4. 使用“求子串”substring(S,pos,len)和“联接”concat(S1,S2)的串操作,可从串s=conduction中的字符得到串t=cont,则求t的串表达式为 conc

18、at(subString(s,1,3),substring(s,7,1) 。第五章 数组与广义表单项选择题1常对数组进行的两种操作是 C 。A. 建立与删除 B. 索引和修改 C. 查找和修改 D. 查找与索引 2假设8行10列的二维数组a1.8, 1.10分别以行序为主序和以列序为主序顺序存储时,其首地址相同,那么以行序为主序时元素a35的地址与以列序为主序时元素 _ D _的地址相同。A. a53 B. a83 C. a14 D. 答案A、B、C均不对 3将一个A1.100,1.100的三对角矩阵以行序为主序存入一维数组B1.298中,元素A66,65在B数组中的位置k等于_ D _。A.

19、 198 B. 197 C. 196 D. 1954稀疏矩阵一般的压缩存储方法有两种,即 C 。 A. 二维数组和三维数组 B. 三元组和散列C. 三元组和十字链表 D. 散列和十字链表5. 一个非空广义表的表头_ D _。 A. 不可能是子表 B. 只能是子表 C. 只能是原子 D. 可以是原子或子表6. 设head(L)、tail(L)分别为取广义表表头、表尾操作,则从广义表L=(x,y,z),a,(u,v,w)中取出原子u的运算为_ D _。A. head(tail(tail(head(L) B. tail(head(head(tail(L) C. head(tail(head(tail

20、(L) D. head(head(tail(tail(L)7广义表(a,(b,(c,d,(e,f),g)的深度为_ C _。 A. 3 B. 4 C. 5 D. 6填空题1将下三角矩阵A1.8,1.8的下三角部分逐行地存储到起始地址为1000的内存单元中,已知每个元素占四个单元,则元素A7,5的地址为 1100 。 2二维数组A0.9,0.19采用行序为主方式存储,每个元素占一个存储单元,并且元素A0,0的存储地址是200,则元素A6,12的地址是 332 。 3二维数组A10.20,5.10采用行序为主方式存储,每个元素占4个存储单元,并且元素A10,5的存储地址是1000,则元素A18,9

21、的地址是 1208 。4有一个10阶对称矩阵A,采用压缩存储方式(以行序为主序存储,且元素A0,0地址为1),则元素A8,5的地址是 42 。5设HAEDp为求广义表p的表头函数,TAILp为求广义表p的表尾函数,其中 是函数的符号,给出下列广义表的运算结果: HEAD(a,b,c)的结果是 。 TAIL(a,b,c)的结果是 。 HEAD(a),(b)的结果是 。 TAIL(a),(b)的结果是 。 HEADTAIL(a,b,c)的结果是 。TAILHEAD(a,b),(c,d)的结果是 。 HEADHEAD(a,b),(c,d)的结果是 。 TAILTAIL(a,(c,d)的结果是 。 a

22、;(b,c);(a);(b);b;(b);a;( )第6章 树和二叉树选择题1 以下说法错误的是 A 。A.树形结构的特点是一个结点可以有多个直接前趋B.线性结构中的一个结点至多只有一个直接后继C.树形结构可以表达(组织)更复杂的数据D.树(及一切树形结构)是一种"分支层次"结构2. 如图6-2所示的 4 棵二叉树中, C 不是完全二叉树。图6-2 4 棵二叉树3. 以下说法错误的是 D 。A.完全二叉树上结点之间的父子关系可由它们编号之间的关系来表达B.在三叉链表上,二叉树的求双亲运算很容易实现C.在二叉链表上,求根,求左、右孩子等很容易实现D.在二叉链表上,求双亲运算的

23、时间性能很好4. 如图6-3所示的 4 棵二叉树, B 是平衡二叉树。 图6-3 4 棵二叉树5. 如图6-4所示二叉树的中序遍历序列是 B 。 A. abcdgef B. dfebagc C. dbaefcg D. defbagc图6-4 1 棵二叉树6. 某二叉树的前序遍历结点访问顺序是 abdgcefh,中序遍历的结点访问顺序是dgbaechf,则其后序遍历的结点访问顺序是 D 。 A. bdgcefha B. gdbecfha C. bdgaechf D. gdbehfca 7. 将含有83个结点的完全二叉树从根结点开始编号,根为1号,后面按从上到下、从左到右的顺序对结点编号,那么编号

24、为41的双亲结点编号为 D 。A.42 B.40 C.21 D.208. 一棵二叉树如图6-5所示,其后序遍历的序列为 C 。 A. abdgcefh B. dgbaechf C. gdbehfca D. abcdefgh图6-5 1 棵二叉树9. 深度为 5 的二叉树至多有 C 个结点。A. 16 B. 32 C.31 D.10 10. 设深度为k的二叉树上只有度为0和度为2的节点,则这类二叉树上所含结点总数至少有 C 个。A.k+1 B.2k C.2k-1 D.2k+111. 对含有 B 个结点的非空二叉树,采用任何一种遍历方式,其结点访问序列均相同。A.0 B.1 C.2 D.不存在这样

25、的二叉树填空题1. 有一棵树如图6-7 所示,回答下面的问题:图6-7 1 棵二叉树(1)这棵树的根结点是 ; (2)这棵树的叶子结点是 ; (3)结点 k3 的度是 ; (4)这棵树的度为 ; (5)这棵树的深度是 ; (6)结点 k3 的孩子是 ; (7)结点 k3 的双亲结点是 。 答: k1 k2 k5 k7 k4 2 3 4 k5,k6 k12. 深度为 k 的完全二叉树至少有 个结点,至多有 个结点,若按自上而下,从左到右次序给结点编号(从 1 开始),则编号最小的叶子结点的编号是 。答:2 2-1 2+13. 一棵二叉树的第 i(i1)层最多有 个结点;一棵有 n(n>0)

26、个结点的满二叉树共有 个叶子和 个非终端结点。 答: 2 4. 具有n个结点的完全二叉树的深度为 floor(log2n)+1 。5. 哈夫曼树是带权路径度_的树,通常权值较大的结点离根_。最短 较近6在_先根_遍历二叉树的序列中,任何结点的子树上的所有结点,都是直接跟在该结点之后。例题解析【例6-1】由如图 6-1 所示的二叉树,回答以下问题。 (1)其中序遍历序列为 ; (2)其前序遍历序列为 ; (3)其后序遍历序列为 ; (4)该二叉树的中序线索二叉树为 ; (5)该二叉树的后序线索二叉树为 ; (6)该二叉树对应的森林是 。图6-1 1棵二叉树解: 中序遍历序列为dgbaechif

27、前序遍历序列为abdgcefhi 后序遍历序列为gdbeihfca 该二叉树的中序线索二叉树如图 6.1.1(a)所示 该二叉树的后序线索二叉树如图6-1-1 (b)所示 该二叉树对应的森林如图6-1-2所示图6-1-1 二叉树的中序线索二叉树和后序线索二叉树图6-1-2 二叉树对应的森林 综合题1二叉树结点数值采用顺序存储结构,如表6-2所示。表6-2 二叉树的顺序存储结构1234567891011121314151617181920eafdgcjhib(1)画出二叉树表示; (2)写出前序遍历,中序遍历和后序遍历的结果; (3)写出结点值 c 的父结点,其左、右孩子。解: (1)该二叉树如

28、图 6-9 所示。图 6-9 1棵二叉树(2)本题二叉树的各种遍历结果如下: 前序遍历:eadcbjfghi 中序遍历:abcdjefhgi 后序遍历:bcjdahigfa (3)c 的父结点为 d,左孩子为 j,没有右孩子。 2有一份电文中共使用 5 个字符:a、b、c、d、e,它们的出现频率依次为 4、7、5、2、9,试画出对应的哈夫曼树(请按左子树根结点的权小于等于右子树根结点的权的次序构造),并求出每个字符的哈夫曼编码。 解:依题意,本题对应的哈夫曼树如图 6-15 所示。各字符对应的哈夫曼编码如下: a:001 b:10 c:01 d:000 e:11图6-15 一棵哈夫曼树3设给定

29、权集 w=2,3,4,7,8,9,试构造关于 w 的一棵哈夫曼树,并求其加权路径长度 WPL。 解:本题的哈夫曼树如图 6-16 所示。图6-16 一棵哈夫曼树其加权路径长度 WPL=7×2+8×2+4×3+2×4+3×4+9×2=80 4. 已知一棵二叉树的中序序列为 cbedahgijf,后序序列为cedbhjigfa,画出该二叉树的先序线索二叉树。解:由后序序列的最后一个结点 a 可推出该二叉树的树根为 a,由中序序列可推出 a的左子树由 cbed 组成,右子树由 hgijf 组成,又由 cbed 在后序序列中的顺序可推出该子树

30、的根结点为 b,其左子树只有一个结点 c,右子树由 ed 组成,显然这里的 e 是根结点,其右子树为结点 d,这样可得到根结点 a 的左子树的先序序列为:bcde;再依次推出右子树的先序序列为:fghij。因此该二叉树如图 6-17所示。图 6-17 二叉树设二叉树的先序线索链表如图 6-18所示。图 6-18 二叉树的先序线索链表第7章 图单项选择题1在一个图中,所有顶点的度数之和等于所有边数的 C 倍。A. 1/2 B. 1 C. 2 D. 4 2在一个有向图中,所有顶点的入度之和等于所有顶点的出度之和的 B 倍。 A. 1/2 B. 1 C. 2 D. 4 3具有 4 个顶点的无向完全图

31、有 A 条边。A. 6 B. 12 C. 16 D. 20 4具有 6 个顶点的无向图至少应有 条边才能确保是一个连通图。AA. 5 B. 6 C. 7 D. 8 5在一个具有 n 个顶点的无向图中,要连通全部顶点至少需要 C 条边。 A. n B. n+1 C. n-1 D. n/2 6对于一个具有 n 个顶点的无向图,若采用邻接矩阵表示,则该矩阵的大小是 D 。 A. n B. (n-1)2 C. n-1 D. n2 7对于一个具有 n 个顶点和 e 条边的无向图,若采用邻接表表示,则所有邻接表中的结点总数是 C 。 A. e/2 B. e C. 2e D. n+e 8已知一有向图的邻接表

32、存储结构如图 7-2 所示。(1)根据有向图的深度优先遍历算法,从顶点 v1 出发,所得到的顶点序列是 C 。 A. v1,v2,v3,v5,v4 B. v1,v2,v3,v4,v5 C. v1,v3,v4,v5,v2 D. v1,v4,v3,v5,v2 (2)根据有向图的广度优先遍历算法,从顶点 v1 出发,所得到的顶点序列是 B 。 A. v1,v2,v3,v4,v5 B. v1,v3,v2,v4,v5 C. v1,v2,v3,v5,v4 D. v1,v4,v3,v5,v2 图7-2一个有向图的邻接表存储结构9. 判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以利用 D 。 A

33、. 求关键路径的方法 B. 求最短路径的 Dijkstra 方法 C. 广度优先遍历算法 D. 深度优先遍历算法 填空题1n 个顶点的连通图至少 n-1 条边。2在无向图 G 的邻接矩阵 A 中,若 Aij等于 1,则 Aji等于 1 。 3已知图G的邻接表如图 7-3 所示,其从顶点 v1 出发的深度优先搜索序列为 ,其从顶点 v1 出发的广度优先搜索序列为 。答: v1,v2,v3,v6,v5,v4 v1,v2,v5,v4,v3,v6图7-3 G的邻接表4设x,y是图G中的两顶点,则(x,y)与(y,x)被认为_边,但<x,y>与<y,x>是_的两条弧。答:无向,有

34、向 6已知一个图的邻接矩阵表示,删除所有从第 i 个结点出发的边的方法是 。将矩阵第 i 行全部置为 05在有向图的邻接矩阵上,由第i行可得到第_个结点的出度,而由第j列可得到第_ _个结点的入度。i j8. 在无向图中,如果从顶点v到顶点v有路径,则称v和v是_的。如果对于图中的任意两个顶点vi,vjV,且vi和vj都是连通的,则称G为_。连通,连通图例题解析【例7-1】对m个顶点的无向图G,采用邻接矩阵,如何判别下列有关问题:(1) 图中有多少条边?(2) 任意两个顶点i和j是否有边相连?(3) 任意一个顶点的度是多少?解:邻接矩阵非零元素个数的总和除以2。当A i,j 0时,表示两顶点i

35、,j之间有边相连。计算邻接矩阵上顶点对应行上非零元素的个数。综合题1给出如图 7-4 所示的无向图G的邻接矩阵和邻接表两种存储结构。图7-4 无向图G解:图 G 对应的邻接矩阵和邻接表两种存储结构分别如图所示。2用广度优先搜索和深度优先搜索对如图 7-5 所示的图 G 进行遍历(从顶点1出发),给出遍历序列。解:搜索本题图的广度优先搜索的序列为:1,2,3,6,4,5,8,7,深度优先搜索的序列为:1,2,6,4,5,7,8,3。 图7-5无向图G3使用普里姆算法构造出如图 7-6 所示的图 G 的一棵最小生成树。 图7-6无向图G解:使用普里姆算法构造棵最小生成树的过程如图 7-11所示。图

36、 7-11 普里姆算法构造最小生成树的过程4使用克鲁斯卡尔算法构造出如图 7-7 所示的图 G 的一棵最小生成树。 图7-7 无向图G解:使用克鲁斯卡尔算法构造棵最小生成树的过程如图 7-12所示。图 7-12 克鲁斯卡尔算法构造最小生成树的过程第8章 查找单项选择题1.顺序查找法适合于存储结构为 B 的线性表。 A. 散列存储 B. 顺序存储或链接存储 C. 压缩存储 C. 索引存储 2.对线性表进行折半查找时,要求线性表的存储方式是 C 。A. 顺序存储 B. 链接存储C. 以关键字有序排序的顺序存储D. 以关键字有序排序的链接存储3.对有 18 个元素的有序表作二分(折半)查找,则查找A

37、3的比较序列的下标为 D 。A. 1.2.3 B. 9.5.2.3 C. 9.5.3 D. 9.4.2.3 4.如果要求一个线性表既能较快地查找,又能适应动态变化的要求,可以采用 A 查找方法。 A. 分块 B. 顺序 C. 二分 D. 散列 5.有一个有序表为2,5,7,11,22,45,49,62,71,77,90,93,120,当折半查找值为 90 的结点时,经过 C 次比较后查找成功。A. 1 B. 2 C. 4 D. 8 6.设哈希表长 m=14,哈希函数 H(key)=key % 11。表中已有 4 个结点:addr(14)=3, addr(38)=5,addr(61)=6,add

38、r(85)=8,其余地址为空,如用线性探测再散列处理冲突,关键字为 49 的结点的地址是 A 。A. 7 B. 3 C. 5 D. 4 7.在采用链接法处理冲突的开散列表上,假定装填因子a 的值为 4,则查找任一元素的平均查找长度为 A 。A. 3 B.3.5 C.4 D.2.5填空题1.在各种查找方法中,平均查找长度与结点个数 n 无关的查法方法是 散列表查找 。 2.二分查找的存储结构仅限于 有序的顺序存储结构 。3.在散列存储中,装填因子的值越大,则 ;的值越小,则 。 存取元素时发生冲突的可能性就越大 存取元素时发生冲突的可能性就越小4.对于二叉排序树的查找,若根结点元素的键值大于被查

39、元素的键值,则应该在二叉树的_左子树_上继续查找。5.高度为8的平衡二叉树至少有_54_个结点。6. 在散列函数 H(key)=key % p 中,p 应取 素数 。例题解析【例8-1】设有一组关键字19,01,23,14,55,20,84,27,68,11,10,77,采用哈希函数:H(key)=key % 13 ,采用开放地址法的二次探测再散列方法解决冲突,试在 018 的散列地址空间中对该关键字序列构造哈希表。 解:依题意,m=19,二次探测再散列的下一地址计算公式为:d=H(key) d=( d+j*j) % m d=( d-j*j) % m; j=1,2,. 其计算函数如下: H(1

40、9)=19 % 13=6 H(01)=01 % 13=1 H(23)=23 % 13=10 H(14)=14 % 13=1 (冲突) H(14)=(1+1*1) % 19=2H(55)=55 % 13=3 H(20)=20 % 13=7 H(84)=84 % 13=6 (冲突) H(84)=(6+1*1) % 19=7 (仍冲突) H(84)=(6-1*1) % 19=5 H(27)=27 % 13=1 (冲突)H(27)=(1+1*1) % 19=2 (冲突) H(27)=(1-1) % 19=0 H(68)=68 % 13=3 (冲突) H(68)=(3+1*1) % 19=4 H(11)

41、=11 % 13=11 H(10)=10 % 13=10 (冲突) H(10)=(10+1*1) % 19=11 (仍冲突) H(10)=(10-1*1) % 19=9 H(77)=77 % 13=12 因此:各关键字的记录对应的地址分配如下: addr(27)=0 addr(01)=1 addr(14)=2 addr(55)=3 addr(68)=4 addr(84)=5 addr(19)=6 addr(20)=7 addr(10)=9 addr(23)=10 addr(11)=11 addr(77)=12 其他地址为空。综合题1.设散列表为 T0.12,散列函数为 H(key)= key%

42、13,给定键值序列是39,36,28,38,44,15,42,12,06,25,请画出分别用拉链法和线性探查法处理冲突时所构造的散列表,并求出在等概率情况下,这两种方法查找成功和查找失败时的平均查找长度。解 用散列函数 H(key)= key% 13计算出键值序列的散列地址。并用探查次数表示待查键值需对散列表中键值比较次数。键值序列:39,36,28,38,44,15,42,12,06,25散列地址: 0,10,2,12,5,2,3,12,6,12(1)线性探查法处理冲突用线性探查法处理冲突构造的散列表见表8-1所示。表8-1 用线性探查法处理冲突构造的散列表下标012345678910111

43、2T0.1239122815424406253638查找成功探查次数1312211911查找失败探查次数98765432112110在等概率的情况下,查找成功的平均查找长度ASL=(1×6+2×2+3×1+9×1)/10=2.2设待查键值 k不在散列表中:若 H(k)= k% 13= d,则从 i=d开始顺次与 Ti位置的键值进行比较,直到遇到空位,才确定其查找失败,同时累计 k键值的比较次数,例如若 k% 13= 0,则必须将 k与 T0、T1、T8中的键值进行比较之后,发现 T8为空,比较次数为 9、类似地可对 k% 13=1,2,3,12进行分析可

44、得查找失败的平均查找长度。ASL =(9+8+7+6+5+4+3+2+1+1+10)/13 = 59/13 = 4.54(2)拉链法处理冲突用拉链法处理冲突构造的散列表见图8-2所示。图8-2 拉链法处理冲突构造的散列表在等概率的情况下查找成功的平均查找长度:ASL=(1×7+2×2+3×1)/10=1.4设待查键值 k不在散列表中,若 k% 13= d。则需在 d链表中查找键值为 k的结点,直到表尾,若不存在则查找失败,设 d链表中有 i个结点,则 k需与表中键值比较 i次,查找失败的平均长度为:ASL=(1+ 0+ 2+ 1+ 0+ 1+ 1+ 0+0+0+1

45、+0+3)/13=10/13 = 0.772.线性表的关键字集合87,25,310,08,27,132,68,95,187,123,70,63,7,共有 13 个元素,已知散列函数为:H(k) = k % 13 ,采用拉链法处理冲突。设计出这种链表结构,并计算该表的成功查找的平均查找长度。解:依题意,得到:H(87)=87 % 13=9 H(25)=25 % 13=12 H(310)=310 % 13=11 H(08)=08 % 13=8 H(27)=27 % 13=1H(132)=132 % 13=2 H(68)=68 % 13=3 H(95)=95 % 13=4 H(187)=187 % 13=5 H(123)=123 % 13=6 H(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论