数据结构习题集(答案).pdf
数据结构习题 第一章 绪论 数据结构是一门研究非数值计算的程序设计问题中计算机的_ 以及它们之间的_ 和运算等的学科。A.数据元素 B.计算方法 C.逻辑存储 D.数据映像 A.结构 B.关系 C.运算 D.算法 算法分析的目的是_,算法分析的两个主要方面是_。A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率 以求该进 D.分析算法的易懂性和文档性 A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 计算机算法指的是_,它必须具备输入、输出和_ 等 5 个重要特性。A.计算方法 B.排序方法 C.解决问题的有限运算序列 D.调度方法 A.可读性、可移植性和可扩展性 B.可读性、可移植性和有穷性 C.确定性、有穷性和可行性 D.易读性、稳定性 和安全性 数据元素是数据处理的 基本单位;数据项是数据处理的_最小单位。数据结构是研究数据的 逻辑结构_和_物理结构_,并对这种结构定义相适应的运算,设计出相应的算法,分析算法的效率。算法的效率包括时间和空间两个方面,分别称为_空间复杂度和时间复杂度。数据的逻辑结构是指_数据元素之间的关系_;包括线性结构、树形结构和 图形结构 三种类型,其中树形结构和图状结构合称为_非线性结构_。线性结构中元素之间存在_一对一_ 关系,树形结构中元素之间存在_一对多_ 关系,图状结构中元素之间存在_多对多_ 关系。数据结构 在计算机中的表示称为数据的物理(或存储)结构,数据的物理结构可以采用_顺序存储和_链式存储_两种存储方法。顺序存储方法是把逻辑上相邻的元素 存储在物理位置 相邻的内存单元中;链式存储方法中元素间的关系是由_指针来表示_的。第二章 线性表 链表不具备的特点是 _。A.可随机访问任一结点 B.插入删除不需移动元素 C.不必事先估计存储空间 D.所需空间与其长度成正比 不带头结点的单链表 head 为空的判定条件是_。A.head=null B.head-next=null C.head-next=head D.head!=null 带头结点的单链表 head 为空的判定条件是_。A.head=null B.head-next=null C.head-next=head D.head!=null 非空的循环单链表 head 的尾结点(由 p 所指向)满足_。A.p-next=null B.p=null C.p-next=head D.p=head 在一个具有 n 个结点的有序单链表中插入一个新结点并仍然保持有序的时间复杂度是_。A.O(1)B.O(n)C.O(n2)D.O(nlog2n)线性链表中各个结点之间的地址 不一定 连续。线性表中数据元素之间具有_一对一_,除第一个和最后一个元素外,其他数据元素有且只有_一个后继和前趋。若频繁地对线性表进行插入和删除操作,该线性表采用 链式 存储结构比较合适。在一个单链表中 p 所指结点之后插入一个 s 所指结点时,应执行 s-next=_p-next_和 p-next=_s_的操作。已知具有n个元素的一维数组采用顺序存储结构,每个元素占k个存储单元,第一个元素的地址为LOC(a1),那么,LOC(ai)=_ LOC(a1)+(i-1)*k_。若线性表采用顺序存储结构,每个数据元素占用 3 个存储单元,第 11 个数据元素的存储地址为 130,则第 1 个数据元素的存储地址是 100 。若线性表采用顺序存储结构,线性表的最大长度为1000,每个数据元素占3个存储单元,则要分配给该线性表_3000_存储单元,若第一个数据元素的存储地址是2000,则第11个元素的存储地址是_2030_。以head为头结点循环双链表为空时,应满足head-llink=head ,head-rlink=head。在单链表中,指针p指向元素为x的结点,实现“删除x的后继”的语句是 。=p-next;next=p-next-next;next=p;=p-next-next;在单链表中,已知q指的结点是p指的结点的直接前驱结点,若在q和p指的结点之间插入一个由s指的结点,则需执行_。A.s-next=p-next;p-next=s B.q-next=s;s-next=p C.p-next=s-next;s-next=p next=s;s-next=q 用链表表示线性表的优点是()A便于随机存储 B.便于进行插入和删除操作 C.占用的存储空间较顺序表少 D.元素的物理顺序与逻辑顺序相同 下面关于线性表的叙述中,错误的是()A.线性表采用顺序存储必须占用一片连续的存储单元 B.线性表采用顺序存储便于进行插入和删除操作 C.线性表采用链式存储不必占用一片连续的存储单元 D.线性表采用链式存储便于进行插入和删除操作 线性表是具有 n 个()的有限序列 A.数据项 B.数据元素 C.表元素 D.字符 长度为 n 的线性表采用链式存储结构,访问其第 i 个元素的算法时间复杂度为()A.O(1)(n)C.O(n2)(log2n)在长度为 n 的顺序表删除第 i(1in)个元素,则需要向前移动元素的次数为()A.i B.n-i C.n-i+1 在长度为 n 的顺序表中第 i(1in)个位置上插入一个元素时,为留出插入位置所需要移动元素的次数为()A.n-i B.i C.n-i-1 D.n-i+1 以下对单链表的叙述错误的是()A.单链表中的每一个结点都由存放结点值的数据域和存放直接后继结点地址信息的指针域两部分组成 B.从单链表的第 i 个结点出发,可以访问到链表中的任何一个结点 C.在单链表结构中加入头结点可以简化结点的插入和删除操作 D.单链表尾结点的指针域应置为空指针 以下记叙中正确的是()A.线性表的链式存储结构优先于顺序存储结构 B.线性表的存储结构不影响其各种运算的实现 C.选择线性表的存储结构就是要保证存储其各个元素的值 D.顺序存储属于静态结构,链式存储属于动态结构 第三章 栈与队列 一、选择题 栈的特点是_B_,队列的特点是_A_。A.先进先出 B.先进后出 栈和队列的共同点时_。A.都是先进后出 B.都是先进先出 C.只允许在端点处插入和删除元素 D.没有共同点 一个栈的进栈序列是 a,b,c,d,e,则栈的不可能的输出序列是_。A.edcba B.decba C.dceab D.abcde 判定一个栈 ST(最多元素 MaxSize)为空的条件是_。top!=-1 B.ST-top=-1 top!=MaxSize D.ST-top=MaxSize-1 判定一个栈 ST(最多元素 MaxSize)为栈满的条件是_。top!=-1 B.ST-top=-1 top!=MaxSize D.ST-top=MaxSize-1 循环队列用数组 A0,m-1存放其元素值,已知其头尾指针分别是 front 和 rear,则 当前队列中的元素个数是_。A.(rear-front+m)%m B.rear-front+1 C.rear-front-1 D.rear-front 在一个链队中,假设 f 和 r 分别是队头和队尾指针,则插入一个 s 结点的运算时_。A.f-next=s;f=s;B.r-next=s;r=s;C.s-next=r;r=s;D.s-next=f;f=s;在一个链队中,假设 f 和 r 分别是队头和队尾指针,则删除一个结点的运算时_。A.r=f-next;B.r=r-next;C.f=f-next;D.f=r-next;若进栈序列为 a,b,c,进栈过程中允许出栈,则以下_是不可能得到的出栈序列。A.a,b,c B.b,a,c C.c,a,b D.c,b,a 一个最多能容纳 m 个元素的顺序存储的循环队列 Q,其头尾指针分别为 front 和 rear,则判定该队列为满的条件是_ A.+1)%m=B.=C.+1=D.+1)%m=一个最多能容纳 m 个元素的顺序存储的循环队列 Q,其头尾指针分别为 front 和 rear,则判定该队列为空的条件是_ A.+1)%m=B.=C.+1=D.+1)%m=若进栈序列为 1,2,3,4,进栈过程中可以出栈,则以下不可能的出栈序列是()A.1,4,3,2 ,3,4,1 C.3,1,4,2 ,4,2,1 一个队列的入队序列是 1,2,3,4,则队列的输出序列是_。A.4,3,2,1 B.1,2,3,4 C.1,4,3,2 D.3,2,4,1 若用一个可容纳 6 个元素的数组来实现循环队列,且当前 rear 和 front 的值分别是 0 和 4,当执行 2 次出队和 1 次入队操作后,rear 和 front 的值分别为()和 0 和 2 C.2 和 5 和 5 第四章 串和数组 串是一种特殊的线形表,其特殊性体现在_ A.可以顺序存储 B.数据元素是一个字符 C.可以链接存储 D.数据元素可以是多个字符 串的两种最基本的存储方式是_顺序和链式_。两个串相等的充分必要条件是:长度相等_且_对应位置上的字符相等_。如下陈述中正确的是_。A串是一种特殊的线性表 B串的长度必须大于零 C串中元素只能是字母 D空串就是空白串 不含任何字符的串称为_空串_,其长度为_长度等于零_。设有字符串 S=“ABC123XYZ”,问该串的长度为().10 C 已知二维数组 Amn采用行序为主方式存储,每个元素占 k 个存储单元,并且第一个元素的存储地址是LOC(A00),则 Aij的地址是_loc(a00)+(n*i+j)*k。二维数组有两种存储方式,第一种是以_行 为主序的存储方式,第二种是以_列_为主序的存储方式。设有二维数组 A1020,其中每个元素占 2 个字节,数组按行优先顺序存储,第一个元素的存储地址为 100,那么元素 A812的存储地址为_100+(20*8+12)*2 对于稀疏矩阵的压缩存储,通常用一个三元组表示非零元素的信息,其中包括非零元素的值、行、列 。这些信息可用一个三元组 数组表示,也称此为 三元组顺序表 。设有一个 10 阶的对称矩阵 A,采用压缩存储方式,以行序为主序存储,a0,0为第一个元素,其存储地址为1,每个元素占 1 个字节,则 a8,5的地址为_。A.13 B.33 C.18 D.42 第五章 树与二叉树 采用二叉链表存储结构,具有 n 个结点的二叉树中,一共有_2n_个指针域,其中有_n-1_个指针域指向孩子结点,有_n+1_个指针域为空.一棵非空二叉树,其第 i 层上最多有_2i-1_结点。满二叉树是一棵深度为 k 且恰有_2k-1_结点的二叉树.一棵哈夫曼树有个 m 叶子结点,则其结点总数为_2m-1_.三个结点的二叉树,最多有_5_种形状。将一棵完全二叉树按层次编号,对任一编号为i的结点有:如有左孩子,则其编号为_2i_;如有右孩子,则其编号为_2i+1.深度为 k 的非空二叉树最多有 2k-1 个结点,最少有 k 个结点,其第 i 层最多有_2i-1 个结点。树最适合用来表示_。A.有序数据元素 B.无序数据元素 C.数据之间具有分支层次关系的数据 D.元素之间无联系的数据 在下列存储形式中,不是树的存储形式的是_。A双亲表示法 B.孩子表示法 C.孩子双亲表示法 D.孩子兄弟表示法 一棵高度为 h 的满二叉树中结点的个数为_。A.2h B.2h-1 C.2h-1 +1 已知一棵二叉树的先序遍历序列为 ABCDEFG,中序遍历序列为:CBDAFEG,则该二叉树的后序遍历序列是()ACDBFGEA BCDFGBEA CCDBAFGE DCDBFEGA 具有 100 个结点的完全二叉树,其中含有_个度为 1 的结点。B.0 C.2 D.不确定 已知一棵二叉树的先序遍历序列为 EFHIGJK,中序遍历序列为:HFIEJGK,则该二叉树的右子树的根是()A B C D 如下左图所示二叉树的中序遍历序列是_ A.abcdgef B.dfebagc C.dbaefcg D.defbagc 一棵二叉树如上右图所示,其中序遍历的序列为_ Aabdgcefh Bdgbaechf Cgdbehfca Dabcdefgh 在非空二叉树的中序遍历序列中,二叉树的根结点的左边应该()A.只有左子树上的所有结点 B.只有左子树上的部分结点 C.只有右子树上的所有结点 D.只有右子树上的部分结点 在一非空二叉树的中序遍历序列中,根结点的右边应该_。A.只有右子树上的所有结点 B.只有右子树上的部分结点 C.只有左子树上的部分结点 D.只有左子树上的所有结点 有一棵树如下左图所示,回答下列问题:这棵树的根结点是_k1_;这棵树的叶子结点是_k2,k4,k5,k7_ 结点 k3 的度为_2_;这棵树的度为_3_ 这棵树的深度为_4_;结点 k3 的孩子结点是_ k5,k6_ 结点 k3 的双亲结点是_ k1_ 由上右图所示的二叉树,回答以下问题。其中序遍历序列为_ 其先序遍历序列为_ 其后序遍历序列为_ (4)该二叉树对应得森林是_ 某二叉树的先序遍历序列为 abdgcefh,中序遍历序列是 dgbaechf,请画出该二叉树并给出其后序遍历序列。gdbehfca 如下左图所示,以数据集4,5,6,7,10,12,18为结点权值所构成的二叉树为_哈夫曼树_,其带权路径长度为_165_。对如上右图所示的树,该树的高度为_,该树的度为_,结点 E 的层次为_,结点 H 的双亲为_,结点 H 的兄弟为_,结点 B 的度为_。若二叉树中度为 2 的结点有 15 个,该二叉树则有 16 个叶结点。若深度为 6 的完全二叉树的第 6 层有 3 个叶结点,则该二叉树一共有 34 个结点。二叉树的前序遍历序列为A,B,C,E,F,D,G,H,中序遍历序列为A,E,C,F,B,G,D,H,其后序遍历序列为 。一个深度为 k 的二叉树,当具有 2k-1 个结点时称之为_满二叉树。下面关于哈夫曼树的说法,不正确的是()A.对应于一组权值构造出的哈夫曼树一般不是唯一的 B.哈夫曼树具有最小带权路径长度 C.哈夫曼树中没有度为1的结点 D.哈夫曼树中除了度为 1 的结点外,还有度为 2 的结点和叶结点 在如图所示的表达式二叉树中,按中序遍历得到的序列为_。第六章 图 一个具有 n 个顶点的无向连通图至少有_n-1_条边,所有顶点的度数之和等于所有边数的 2_倍。6.2 在有向图的邻接矩阵中,第 i 行中 1 的个数为第 i 个顶点的_出度_。第 i 列中 1 的个数为第 i 个顶点的_入度_。6.3 一个无向图有 n 个顶点和 e 条边,则所有顶点的度的和为_2e。具有 n 个顶点的无向完全图的边数为_n(n-1)/2_。具有 n 个顶点的有向完全图的弧个数为_ n(n-1)_。6.4 设连通图 G 的顶点数为 n,则 G 的生成树的边数为_ n-1。6.5 若无向图中有 e 条边,则表示该无向图的邻接表中就有_2e 个结点。6.6 Dijkstra 算法是按_路径长序依次递增_的次序产生一点到其余各顶点最短路径的算法。6.7 可以进行拓扑排序的有向图一定是_无环的_。在拓扑排序序列中第一个顶点一定是_入度为零_的顶点。6.8 设一个无向图为如下左图所示,画出该图的邻接表和邻接矩阵;写出从顶点 A 出发进行深度优先和广度优先搜索得到的顶点序列。331323322122321321 6.9 设一个无向图为G=(V,E),其中V=v1,v2,v3,v4,v5,v6,v7,E=(v1,v2),(v1,v3),(v2,v4),(v2,v5),(v3,v6),(v3,v7),(v6,v7),画出该无向图,画出其邻接表和邻接矩阵,写出从顶点 v1 出发进行深度优先和广度优先搜索得到的顶点序列。6.10 设一个无向图为 G=(V,E),其中 V=v1,v2,v3,v4,v5,v6,其邻接矩阵如上右图所示:(1)画出该无向图;(2)画出其邻接表和邻接矩阵;(3)写出从顶点 v1 出发进行深度优先和广度优先搜索得到的顶点序列;(4)分别用 Prim 和 Kruskal 算法,从顶点 v1 顶点出发,写出求该网的最小生成树的产生过程。6.11 设一个图为 G=(V,E),其中 V=a,b,c,d,e,f,E=,,,(1)画出该图;(2)画出其邻接矩阵和邻接表;(3)写出从顶点 a 出发进行深度优先和广度优先搜索得到的顶点序列;对如下无向图,分别用 Prim 和 Kruskal 算法,分别从顶点 1 和顶点 a 出发,写出求该网的最小生成树的产生过程。对下图,写出拓扑有序序列 6 21 7 4 11 2 19 10 10 8 3 6 A1a11B2D4C3E5F6 对下图所示的带权有向图,利用 Dijstra 算法求出从源点 A 到其余各顶点的最短路径及其长度。第七章 查找 用顺序查找法在具有各结点的线性表中查找一个结点所需的平均查找时间为()。(n)(nlog2n)(n)(log2n)使用折半查找,线性表必须()。、一顺序方式存储 、以链式方式存储,且元素已按值排好序、以链式方式存储 、以顺序方式存储,且元素已按值排好序 采用顺序查找法查找长度为 n 的线性表时,每个元素的平均查找长度为_。A.n B.n/2 C.(n+1)/2 D.(n-1)/2 顺序查找法适合于存储结构为_ 的线性表。A散列存储 B.顺序存储或链式存储 C.压缩存储 D.索引存储 采用折半查找法查找长度为 n 的线性表时,每个元素的平均查找长度为_。A.O(n2)B.O(nlog2n)C.O(n)D.O(log2n)采用顺序查找法检索长度为 n 的线性表,则检索每个元素的平均比较次数为_n-i+1_。有一个有序表为:(1,3,9,12,32,41,45,62,75,77,82,95,100),当折半查找值82的结点时,经过_A11B2D4C3E5F 25 10 8 3 16 7 2 10 12 4 次比较后查找成功。A.1 B.2 C.4 D.8 折半查找有序表6,15,30,37,65,70,72,89,99,若要查找元素 37,需要依次与表中元素_进行比较。A.65,15,37 B.68,30,37 C.65,15,30 D.65,15,30,37 已有序表为(20,18,24,35,47,50,62,83,90,115,134),当用折半法查找 90 时,需要进行_2_ 次查找可确定成功。查找 47 时需进行_4_ 次查找可确定成功,查找 100 时,需进行_4_ 次查找才能确定不成功。按序列60,17,38,40,7,32,73,65,85的输入顺序建立一颗二叉排序树.(1)画出该二叉排序树;(2)在(1)的基础上插入结点 80 后,画出对应的二叉排序树;(3)在(2)的基础上删除结点 38 后,画出对应的二叉排序树。按序列(53,49,26,78,63,35,19,99)的输入顺序建立一颗二叉排序树.(1)画出该二叉排序树;(2)在(1)的基础上插入结点 50 后,画出对应的二叉排序树;(3)在(2)的基础上删除结点 26 后,画出对应的二叉排序树。已知一组关键字序列为(75,33,52,41,12,88,66,27),请按哈希函数 H(key)=key MOD 7,分别用线性探测和二次探测处理冲突方法构造一个表长为 10 的哈希表。已知一组关键字为(17,12,21,01,66,35,82,37),请按哈希函数 H(key)=key MOD 13,分别用线性探测和二次探测处理冲突方法构造一个表长为 14 的哈希表。已知:哈希表长为 10,哈希函数 H(key)=key MOD 9,给出关键字序列为(23,45,14,17,9,29,37,18,25,41,33),采用链地址法解决冲突,请画出哈希表。第八章 排序 对于给定的 12 个整数:23,37,7,79,29,43,73,19,31,61,23,47,分别写出用直接插入序、冒泡和直接选择、快速、归并排序的各趟结果。排 序 可 分 为 _ 和 _ 两 类;衡 量 排 序 算 法 的 两 个 主 要 性 能 指 标 分 别是:_、_。假设待排序数据元素序列为,应用快速排序方法按递增序排序,得到第一次划分后的结果为_2_3_4_6_5_。排序算法的稳定性是指_相同的纪录经过排序后的_是否发生变化,不发生变化的排序算法,就是_;否则就是_。排序算法的基本操作是_和_。排序算法的_取决于关键字的比较和记录的移动等基本操作的次数。排序算法的空间效率取决于算法所占用的_的大小。下面排序算法的平均时间复杂度最小的是_。A直接插入排序 B简单选择排序 C冒泡排序 D快速排序 以下排序方法中,稳定的排序方法是_。A.直接插入排序和冒泡排序 B.简单选择排序和归并排序 C.堆排序和快速排序 D.冒泡排序和快速排序 一组纪录的关键码为(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 快速排序方法在_ 情况下最不利于发挥其长处。A.要排序得数据量太大 B.要排序得数据种含有多个相同值 C.要排序的数据已基本有序 D.要排序的数据个数为奇数 已知序列53,87,12,61,98,17,87,27,63,46,画出与该序列对应的完全二叉树;判断该序列是否为堆,如果不是,请调整为大根(顶)堆。914 已知序列27,10,14,55,39,19,84,68,11,23,85,画出与该序列对应的完全二叉树;判断该序列是否为堆,如果不是,请调整为大根(顶)堆。915 已知序列20,15,4,18,9,6,25,12,3,22,画出与该序列对应的完全二叉树;判断该序列是否为堆,如果不是,请调整为小根(顶)堆。