数据结构复习资料.docx
《数据结构复习资料.docx》由会员分享,可在线阅读,更多相关《数据结构复习资料.docx(14页珍藏版)》请在冰豆网上搜索。
![数据结构复习资料.docx](https://file1.bdocx.com/fileroot1/2023-2/26/3b24472e-d165-487c-a924-6aa91a318b72/3b24472e-d165-487c-a924-6aa91a318b721.gif)
数据结构复习资料
《数据结构》习题
练习题一
1.何谓算法?
简述算法的基本特性和表示方法。
3.简述算法与程序的联系与区别,并列举常见的算法设计方法。
6.常见的时间(或空间)复杂度量级有O
(1)、O(n)、O(n2)、O(n3)、O(n
)、O(
)和O(2n)等,试将它们按增长率由小到大排列。
练习题二
1.简述下列概念
⑴数据、数据元素、数据类型、数据结构;
⑵数据类型与数据结构的联系与区别;
⑶数据类型的六个显著特征;
4.数组B[1..10,-2..6,2..8]以行为主序顺序存储;设基地址(第一个元素的地址)为100,每个元素的存储长度为3;试求元素B[5,0,7]的存储地址。
16.简述下列每对术语的区别:
⑴空串和空格串⑵串变量和串常量
⑶主串和子串⑷串名和串值
18.令s=“aabb”,t=“abcabaa”,u=“abcaabbabcabaacbacba”,试分别求其next函数值。
练习题三
1.线性表可用顺序表和单链表作为存储结构。
试问:
⑴两种存储表示各有哪些主要优缺点?
⑵如果有n个表同时并存,且处理过程中各表的长度会动态发生变化,表的总数也可能自动改变;在此情况下应选用哪种存储表示?
为什么?
⑶若表的总数基本稳定,且很少进行插入和删除,但要求以最快速度存取表中元素;这时应采用哪种存储表示?
为什么?
4.设计一个算法,它通过一趟遍历在单链表中确定值最大的结点。
5.设计一个算法,它在非递减有序的单链表中删除值相同的多余结点。
8.设计一个计算不带表头结点的单链表的表长的算法。
9.已知线性表中元素是无序的,且以带表头结点的单链表作为存储结构。
试设计删除表中所有的元素值大于min且小于max的元素的算法。
12.设有一个单循环链表,其表长大于1且表中既无表头结点又无表头指针。
已知P为指向表中某结点的指针,试编写在该循环链表中删除指针P所指结点的前趋结点的算法。
17.设有一个栈,元素的进栈次序依次为A、B、C、D、E,试问能否得到下面的出栈序列?
若能请写出操作序列,若不能请说明原因。
⑴C,E,A,B,D⑵C,B,A,D,E
⑶D,C,A,B,E⑷A,C,B,E,D
⑸A,B,C,D,E⑹E,A,B,C,D
19.已知表达式的中缀表示为(A+B)*D+E/(F+A*D)+C,试利用栈把它改写成为后缀表示,并写出转换过程中栈的变化。
20.何谓队列的上溢现象?
解决方法有哪些?
各种方法的工作原理是什么?
23.试写一个算法,它借助栈判断一个算术表达式中的圆括号是否配对。
练习题四
1.已知一棵树边的集合为{(i,m),(i,n),(e,i),(b,e),(b,d),(a,b),(g,j),(g,k),(c,g),(c,f),(h,l),(c,h),(a,c)},请画出这棵树并回答如下问题:
⑴哪个是根结点?
⑵哪些是叶子结点?
⑶哪个是结点g的双亲?
⑷哪些是结点g的祖先?
⑸哪些是结点g的孩子?
⑹哪些是结点e的子孙?
⑺哪些是结点e的兄弟?
哪些是结点f的兄弟?
⑻结点b和结点n的层次号分别是多少?
⑼树的深度是多少?
树的度是多少?
⑽以结点c为根的子树的深度是多少?
2.一棵度为2的树与一棵二叉树有何区别?
5.一棵深度为h的满k叉树是这样的一棵树,它的第h层上的结点全部是叶子结点,其余各层上的每个结点都有k棵非空子树。
如果对深度为h的满k叉树按层次自上而下,同层次自左至右的顺序从1开始对所有结点编号,问:
⑴各层的结点数目是多少?
⑵编号为n的结点的双亲结点若存在,其编号是多少?
⑶编号为n的结点的第i个孩子结点若存在,其编号是多少?
⑷编号为n的结点有右兄弟的条件是什么?
其右兄弟编号是多少?
6.一棵含有n个结点的k叉树,可能达到的最大深度和最小深度各为多少?
7.对于如图4-32所示的两棵二叉树,分别写出
⑴前序遍历序列;
⑵中序遍历序列;
⑶后序遍历序列;
⑷层次遍历序列。
8.找出满足下列条件的所有二叉树:
⑴前序遍历序列和中序遍历序列相同;
⑵后序遍历序列和中序遍历序列相同;
⑶前序遍历序列和后序遍历序列相同;
⑷前序遍历序列和层次遍历序列相同。
9.已知一棵二叉树的前序序列为EBADCFHGIKJ,中序序列为ABCDEFGHIJK。
请画出该二叉树,并写出它的后序序列和层次序序列。
10.已知一棵二叉树的后序序列为DCEGBFHKJIA,中序序列为DCBGEAHFIJK。
请画出该二叉树,并写出它的前序序列和层次序序列。
11.已知一棵二叉树的层次序序列为ABCDEFGHIJ,中序序列为DBGEHJACIF,请画出该二叉树,并写出它的前序序列和后序序列。
12.把图4-33所示的两棵树,分别转换为相应的二叉树。
13.把图4-34所示森林转换为相应的一棵二叉树。
14.把图4-35所示二叉树转换为相应的树或森林,然后分别写出其先根序列和后根序列。
16.给定一个权重集合为W={3,15,17,14,6,16,9,2},请画出相应的哈夫曼树,并计算其带权路径长度WPL。
17.假设用于通信的电文仅由8个字母字符组成,各字母字符在电文中出现的频率分别为7、19、2、6、32、3、21、10。
试为这8个字母字符设计哈夫曼编码。
对这8个字母字符分别用0到7的三位二进制表示形式编码是另一种编码方案,试比较这两种编码方案的优缺点。
20.试编写一个算法,它交换以二叉链表作存储结构的二叉树中所有结点的左、右子树。
24.试以二叉链表作为存储结构,编写计算二叉树中叶子结点数目的非递归算法。
28.试以二叉链表作为存储结构,编写计算二叉树深度的算法。
练习题五
1.对于图5-40给出的有向图和无向图,分别给出其邻接矩阵、邻接表和逆邻接表,并计算每个顶点的度(对有向图需先确定入度和出度)。
2.对于图5-41给出的无向网,分别给出:
⑴邻接多重表;
⑵深度优先搜索遍历序列(分别从v1和v4开始)和深度优先生成树;
⑶广度优先搜索遍历序列(分别从v1和v4开始)和广度优先生成树;
⑷用Prim算法求得最小生成树的过程;
⑸用Kruskal算法求得最小生成树的过程。
3.对于图5-42给出的有向网,分别给出:
⑴邻接矩阵;
⑵用Dijkstra算法求从v1出发到各顶点的最短路径。
5.给出图5-40(a)所示有向无环图的所有拓朴有序序列,并指出按拓朴排序算法求得的序列是哪一个。
17.用邻接矩阵表示图时,矩阵中元素的个数与顶点个数是否相关?
与边的条数是否相关?
18.有n个顶点的无向连通图至少有多少条边?
有n个顶点的有向强连通图至少有多少条边?
试分别举例说明之。
19.对于有n个顶点的无向图,若采用邻接矩阵表示如何判断以下问题:
⑴图中有多少条边?
⑵任意两个顶点i和j之间是否有边相连?
⑶任意一个顶点的度是多少?
练习题七
4.若对大小均为n的顺序表和有序表分别进行顺序检索,试分别讨论在等概率的前提下,下述三种情况时的平均检索长度是否相同:
⑴检索不成功,即表中没有关键字值等于给定值k的记录;
⑵检索成功,表中只有一个关键字值等于给定值k的记录;
⑶检索成功,表中有若干个关键字值等于给定值k的记录,一次检索要求能全部找出所有关键字值等于给定值k的记录。
5.对长度为20的有序表进行二分法检索,试画出它的一棵判定树;并求出在等概率情况下检索成功和不成功时的平均检索长度。
6.试把二分法检索算法改写为非递归算法。
9.设结点序列为(60,30,90,50,120,70,40,80),试用二叉检索树的插入算法,画出按此结点序列建立的一棵二叉检索树T1;再用二叉检索树的删除算法,画出依次删除结点40、70、60之后的二叉检索树T2。
10.试编写一个判断给定二叉树是否为二叉排序树的算法;二叉树以二叉链表作为存储结构,且各结点的关键字值均不相等。
11.已知长度为12的表如下所示:
(Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)
⑴按表中元素的顺序依次插入一棵初始为空的二叉检索树中,画出最终的二叉检索树,并求在等概率情况下检索成功时的平均检索长度。
⑵若先对表中元素排序形成有序表,求在等概率情况下进行二分法检索时检索成功的平均检索长度。
⑶构造一棵二叉平衡树,求在等概率情况下检索成功的平均检索长度。
14.具有n个结点的二叉检索树有多少种不同的形态?
一个高度为h的二叉平衡树至少有多少个结点?
具有n个结点的二叉平衡树的最大高度和最小高度各是多少?
18.给定关键字序列为(19,14,23,1,68,20,84,27,55,11,10,79),设哈希表长为13,哈希函数为h(k)=k%13。
⑴试画出用线性探查法消解地址冲突时所构造的哈希表;
⑵试画出用链地址法消解地址冲突时所构造的哈希表;
⑶并求出以上两种哈希表的平均检索长度。
19.选取哈希函数为h(k)=(3*k)%11;用开放定址法消解地址冲突:
d1=h(k),di=(di-1+(7*k)%10+1)%11(i=2,,3,4,…)。
试在0~10的散列地址空间中对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,并求在等概率情况下检索成功与不成功时的平均检索长度。
25.试设计一个算法,它从二叉检索树中删除一个结点,并仍然保持二叉检索树的特性不变。
练习题八
2.排序方法稳定性的含意是什么?
试各举三种稳定的和不稳定的排序方法。
3.给定排序码序列为(17,8,21,35,32,15,
,25,12,23),试分别写出使用以下排序方法进行排序的过程,并说明关键字的比较次数。
⑴直接插入排序 ⑵希尔排序(增量为5,2,1)⑷折半插入排序 ⑹冒泡排序
⑺快速排序 ⑻直接选择排序 ⑽堆排序
7.在冒泡排序过程中,什么情况下排序码会朝着与最终位置相反的方向移动?
试举例说明。
9.对于n个排序码进行快速排序时,所需的比较次数与排序码的初始序列有关。
当n=7时,回答下列问题:
⑴在最好情况下需要进行多少次比较?
请说明理由;
⑵给出在最好情况下的排序码初始序列的一个实例;
⑶在最坏情况下需要进行多少次比较?
请说明理由;
⑷给出在最坏情况下的排序码初始序列的一个实例。
15.判断下列序列是否为堆。
若不是堆则把它们调整为堆。
⑴(100,85,98,77,80,60,82,40,20,10,66)
⑵(100,98,85,82,80,77,66,60,40,20,10)
⑶(100,85,40,77,80,60,66,98,82,10,20)
⑷(10,20,40,60,66,77,80,82,85,98,100)
16.写出对于排序码(tim,dot,eva,rom,kim,guy,ann,jim,kay,ron,jan)按字母顺序排序的堆排序过程,要求给出形成初始堆和每选出一个关键码后堆的变化情况。
17.希尔排序、直接选择排序、快速排序、堆排序都是不稳定的排序方法,试举例说明之。