数据结构王翠茹数据结构习题.docx
- 文档编号:24462402
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:20
- 大小:1.03MB
数据结构王翠茹数据结构习题.docx
《数据结构王翠茹数据结构习题.docx》由会员分享,可在线阅读,更多相关《数据结构王翠茹数据结构习题.docx(20页珍藏版)》请在冰豆网上搜索。
数据结构王翠茹数据结构习题
习题一
1.简述下列术语:
数据、数据元素、数据对象、数据结构、逻辑结构、存储结构、基本运算、运算实现和数据类型。
2.设有数据结构(D,R),其中D={d1,d2,d3,d4},R={r},r={(d1,d2),(d2,d3),(d3,d4)}.试按图论中图的画法惯例画出其逻辑结构图。
3.函数f(M,n)按下式定义(m,n为≥0的整数):
f(m,n)=﹛m+n+1当m*n=0时f(m-1,(m,n-1))当m*n≠0时
(1)试写出计算该函数的递归过程;
(2)写出递归过程转换成非递归过程的转换规则。
4.把数组A[1…n]按递减顺序排序,并分析其最坏情况时间复杂性量级。
5.为了用计算机实现学生档案管理,需要经过哪些主要步骤?
每个步骤的主要工作是什么?
试用本章讲到的从“具体到抽象”、再“从抽象到具体”的观点加以分析。
6.试设定若干n值,比较两函数n2和50nlog2n的增长趋势,并确定n在什么范围内,函数n2值大于50nlog2n的值。
习题二
1.设线性表存于a(1:
n)的前elenum个分量中,且递增有序。
试写一算法,将X插入到线性表的适当位置上,以保持线性表的有序性。
2.写一个逆置线性表的算法。
即由A[1:
n]产生B[1:
n],使得B[1]=A[n],B[2]=A[n-1],…B[n]=A[1]。
要求用最少的附加空间。
3.设有编号为1,2,3,4的四辆列车,顺序进入一个栈式结构的站台,试写出这四辆列车开出车站的所有可能顺序。
4.设有六辆火车编号为1,2,3,4,5,6利用栈,将它们重新编成3,2,5,6,4,1的顺序。
请写出操作序列,设X表示将一列火车从栈中开出;S表示将一列火车从输入端开入栈中。
5.假设栈中每个数据项占K个空间位置,试改写入栈和出栈的算法。
6.假设有两个栈如图所示共享空间[1..m]。
试写一个对任一栈作入栈push(s,x,i)和出栈pop(s,i)。
(i=1,2)的算法,只有在整个[1…m]空间均满时才产生溢出。
6题图两个栈共享一个数组示意图
7.按照四则运算加、减、乘、除和幂运算优先关系的惯例,画出对下列算术表达式求值时操作数栈和运算符栈的变化过程。
A-BXC/D+E↑F
8.假设以数组cycque(0…m-1)存放循环队列的元素,同时设变量rear和quelen分别表示循环队列中队尾元素位置和内含元素的个数。
试给出此循环队列的队满条件。
并写出相应的入队列和出队列算法。
(在出队列的算法中要返回队头元素)。
9.已知Ackerman函数的定义如下:
(1)试写出递归算法并画出m,n取值时工作栈状态变化情况。
(2)写出非递归算法
10.联系现实生活理解限制存取点的线性表。
限制存取点的线性表有
(1)栈和队列:
本章中巳介绍.
(2)双端队列:
对所有的插入和删除都限定在表的两端进行的线性表。
10题图
(1)双端队列
(3〉双栈:
规定从端1插入的元素只能从端1端删除,而从端2插入的元素只能从端2端删除。
它是一种加限制的双端队列。
好象两个底部相连的栈。
10题图
(2)双栈
习题三
1.描述以下三个概念的区别:
头指针、头结点、首元结点。
2.试编写在无头结点的单链表上实现线性表基本运算LOCATE(L,X)、INSERT(L、X、i)和DELETE
(L、i)的算法,并和在带头结点的单链表上实现相同运算的算法进行比较。
3.试写出在不带头结点的单链表上实现线性表基本运算LENGTU(L)的算法。
4.试写出一个把不带头结点的单链表逆转的算法。
即将链表X=(a1,a2,…,an)变成(an,an-1,…a2,a1),且将原来指向a1的头指针改为指向an。
(要求用修改指针的方法来实现)。
5.假设两个按元素值递增有序排列的线性表A和B,均以单链表作存储结构.编写算法将A和B表归并成一个按元素值递减有序〈允许值相同〉排列的线性表C,并要求利用原表〈EPA和B表〉结点空间存放表C。
6.设有两个线性表x=(x1,x2,…,xm)和y=〈y1,y2,…,yn〉.均以单链表为存储结构。
写出一个将x,y合并为线性表z〈也是用链表方式存储〉的算法,使得
Z={(x1,y1,x2,y2,…xmymym+1,…yn)当m≤n;(x1,y1,x2,y2,…xnynxn+1,…xm)当m>n
要求:
z表利用单链表x,y的结点空间
7.已知单链表L中的结点是按值非递减有序排列的,试写一算法将值为x的结点插入表L中,使得L仍然有序
8.假设分别以两个元素值递增有序的线性表A、B表示两个集合〈即同一个线性表中的元素各不相同〉,现要求构成一个新的线性表C,C表示集合A与B的交,且C中元素也递增有序.试以单链表为存储结构,编写实现上述运算的算法
9.已知A、B和C为三个元素值递增有序的线性表,现要求对表A作如下运算删除那些既在表B中出现又在表C中出现的元素.试以链式存储结构,编写实现上述运算的算法
10.假设在长度大于1的循环链表中,既无头结点也无头指针.s为指向链表中某个结点的指针,试编写算法删除结点S↑的前趋结点
11.已知一单链表中的数据元素含有三类字符〈即:
字母字符、数字字符和其它字符〉.试编写算法,构造三个循环链表,使每个循环链表中只含同一类的字符,且利用原表中的结点空间作为这三个表的结点空间〈头结点可另开辟空间
12.试用两种存储结构来解约瑟夫(Josephus)问题,其问题如下Zn个人围在圆桌周围.从某个位置上的人开始报数,数到m的人便出列F;下一个人〈第m+1个〉又从1数起,数到m的人便是第2个出列的人,依次重复下去,直到最后一个人出列.于是得到一个新的次序.例如,当n=8,m=4时,若从第一个位置数起,则所得到的次序为:
48521376
13.假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点〈不设头指针〉,试编写相应的置空队列、入队列和出队列的算法
14.写一个算法,借助栈将一个单链表倒置。
15.在双链表上实现线性表的下列基本运算:
〈a〉初始化;〈b〉定位;〈c〉在第i个结点前插入一个新的元素x;(d)删除第i个结点
16.假设用循环链表来表示多项式A和B.试写出一个将多项式B加到多项式A上去的算法
17.假设民航公司有一个自动预定飞机票系统,该系统中有一张双重链表所表示的乘客表.表中结点按乘客的姓氏字母顺序相链.例如,下面是一张某个时刻的乘客表.试为该系统写出一个当任一乘客订票或退票时修改乘客表的算法。
序号dataLlinkRlink
0zz…z74
1L165
2chang49
3wang57
4bai02
5ma13
6du81
7xia30
8ding96
9chen28
18.假设利用边界标识法首次适配策略分配,巳知在某个时刻的可利用空间表的状态如图所示:
(1)请画出当系统回收「个起始地址为559,大小为45的空闲块之后的链表状态
(2)请画出系统继而在接受存储块大小为100的请求之后又回收一块起始地址为515,大小为44的空闲块之后的链表状态
注:
存储块头部中大小域的值和申请分配的存储量均包括头和尾的存储空间
18题图
19.组织成循环链表的可利用空间附加什么条件时,首次适配策略就转为最佳适配策略?
20.另一种动态分配的方案是伙伴〈buddy〉系统,也就是,在每次遇到请求时,只分配大小为2的幂次的存储块.当用户请求大小为n的存储区时,系统将分配给大小为2k的存储块,这里,k=[log2n].于是自由块的大小也总是2的幂次.若总的内存为2m(地址从0到2m-1,则自由块可能的大小为2k(0≤k≤m)将所有大小相同的自由块放在同一个自由区链表中,则伙伴系统共有m+1个自由区链表,每张表是一个带
表头结点avail(i)的双重循环链表(0≤i≤m),每个自由块的结点结构为:
系统开始运行时,只有一块从0开始,大小为2m的自由块。
当用户请求大小为i的存储区时,系统将分配一大小为2k,k=[log2n]的存储区。
首先搜索所有的自由区链表,找到一个非空表avai(i)k≤i≤m,然后从此表中删除一个结点.假设它的初始化地址为p,则当i=k时,便将此结点分配给用户,当i〉k时,便将此自由区分割为起始地址为p和p+2i-1的两部分,并将起始地址为p+2i-1的自由区插入到相应的链表中,若i-1=k,则将起始地址为p的块分配给用户,否则再予以分割,直至得大小为2k的自由区分配给用户为止.分配了的结点结构为:
试做如下练习:
(1)写出一个对自由区链表进行初始化的算法。
(2)写出一个如上所述的动态分配算法。
习题四
1.顺序列出数组A(2:
3,-4:
-3,-1:
1,7:
9)中所有元素aij,u,v为了简化表达,可以只列出(i,j,u,v)的序列。
2.设有上三角矩阵(aij)n*n,将其上三角元素逐行存于数组B(1:
m)中,使得B[K]=aij,k=f1(i)+f2(j)+c。
试推导出函数f1,f2和常数C(要求f1和f2中不含常数项)
3.设有三对角矩阵(aij)n*n,将其三条对角线上的元素逐行地存于数组B(1:
3n-2)中,使得B[K]=aij,求:
(1)用i,j表示k的下标变换公式;
(2)用k表示i,j的下标变换公式。
4.设有三对角矩阵A,用一组数组B存放A中三对角上的元素a(i,j)(1≤i≤n,i-1≤j≤i+j),试写出一个由B确定A的元素值的算法。
5.若用三元组形式表示稀疏矩阵A和B试写一个A+B的算法,并分析所写算法的时间。
6.若在m*m的矩阵中有一个元素aij,满足下述条件:
aij即是第i行元素上最小的值,又是第j列元素中最大的值(此时,称矩阵A有鞍点)。
试写一求矩阵鞍点的算法,并分析你的算法所需的时间,若不存在鞍点,则给出某个信息。
7.试设计一个算法,将数组A(O:
n-1)中的元素循环右移K位,并要求只用一个元素大小的附加存储;元素移动或交换次数为o(n)。
8.设有二维数组M:
array[-1..4,0..3]ofinteger,每个元素(整数)占2个存储单元,数组的起始地址为2000,试给出元素M[2,1]和M[4,3]的存储位置。
9.用计算机模拟“迷宫问题”,求出其中一条通路,用数组MAZE[1..m,1..n]表示迷宫,数组元素为1表示死路,为O表示通路,MAZE[1,1]为迷宫入口,MAZE[m,n]为迷宫出口,试设计一个判别迷宫问题是否有解的算法,在有解时,将一个解的路经打印出来。
10.设有广义表
K1(K2(k5(a,k3(c,d,e)),K6(b,g)),k3,K4(k3,f))
1试画出广义表K1的逻辑图形表示;
2请给出凡的单链表表示法。
11.求下列广义表运算的结果
(1)head(p,h,w);
(2)tall(b,k,p,h);
(3)head((a,b),(c,d));
(4)tall((a,b),(c,d));
(5)head(tall((a,b),(c,d)));
(6)tall(head((a,b),(c,d)));
(7)head(tall(head((a,b),(c,d))));
(8)tall(head(tall((a,b),(c,d))))。
习题五
1.简述空串和空格串的区别
2.设a$=’iφamφaφstudentφ’
b$=’good’,
c$=’worker’
求LEN(a$);LEN(c$);SUB(a$,8,14);SUB(b$,2,2);index(a$,'A');index(a$,b$);d$=SUB
(a$,6,7)//b$//SUB(a$,7,14);e$=repl(d$,'student',c$)。
3.问,执行下列一段程序后的输出结果是什么?
PROCq;
(a,b,n,m,p都为串变量}
BEGIN
a='thisφisφaφbook';
SUB(a,3,9):
='escφare';
b=a//'s';
write('a$=',b);
n='xyxyxyxy';
m=SUB(n,6,8);
p:
=’t’;
vrite('m$=',m,'n$=',repl(n,m,p))
END;
4.设a$=’(xyz)+*’,b$=’(x+z)*y’,问,应该对a$进行哪些运算,才能得到如b$的运算结果?
5.给定两个串st1及st2,求在st1中第一次出现的,而在st2中不出现的字符的序号,写出其算法.
6.试写出一个串匹配的算法。
并请估计你所写的算法的效率。
(设m=模式长度;n=正文长度;mn=m+n;s:
为数组,用来存放正文字符串的位置为1..n存放模式字符串的位置为n+1..n+m)。
7.若s和T是用结点大小为1的单链表存储的两个串,设计一个算法将串S中首次与串T匹的子串逆置。
8.令S=’aaab’,t=’abcabaa’,n=’abcaabbabcabacba’。
试分别求出它们的next函数值和nextval函数值。
9.试设计一个算法,求串s和串t的一个最长公共子串,并分析你的算法的时间复杂度,若要求第一个出现的最长公共子串(即它在串s和串t的最左边的位置上出现)和所有的最长公共子串,并讨论你的算法的时间复杂度。
10.给定三个串st1$=’aaab’,st2$=’ababaa’,st3$=’ababaababb’。
试用链表方式存储映象。
习题六
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)},画出这棵树,并回答下列问题:
(1)哪个是根结点?
(2)哪些是叶子结点?
(3)哪个是结点G的双亲?
(4)哪些是结点G的祖先?
(5)哪些是结点G的孩子?
(6)哪些是结点E的子孙?
(7)哪些是结点E的兄弟?
(8)结点B和N的层次号分别是什么?
(9)树的深度是多少?
(10)以结点C为根的子树的深度是多少?
2.试分别画出具有3个结点的树和3个结点的二叉树的所有不同形态。
3.一个深度为h的满k叉树有如下性质:
(1)各层的结点数目是多少?
(2)编号为n的结点的父结点(若存在)的编号是多少?
(3)编号为n的结点的第i个儿子结点(若存在)的编号是多少?
(4)编号为n的结点有右兄弟的条件是什么?
其右兄弟的编号是多少?
4.已知一棵度为m的树中有n1个度为1的结点,n2个度为2的结点,…,nm个度为m的结点,问该树中有多少个叶子节点?
5.假设以二叉链表作存储结构,试分别写出前序和后序遍历的非递归算法。
6.假设n和m为二叉树中两结点,用“1”、“0”或“φ”扩分别表示肯定、相反或不一定填写下表:
7.以二叉链表作存储结构,编写算法将二叉树中所有结点的左﹑右子树相互交换.
8.假设在二叉链表的结点中增设两个域,双亲域(parent)以指示其双亲结点;标志域(mark):
0..2;以区分在遍历过程中到达该结点时应继续向左或向右或访问该结点.试以此存储结构编写不用栈的后序遍历的算法.
9.已知一棵以二叉链表作存储结构的二叉树,试编写复制这棵二叉树的非递归算法.
10.已知条件同题9.试编写按层次顺序(同一层自左至右)遍历二叉树的算法.
11.编写一个算法,输出以二叉树表示的算术表达式、若设表达式中含有括号,则在输出
应添上.已知二叉树的存储结构为二叉链表.(提示:
利用后序遍历)
12.请对图示二叉树进行后序线索化,为每个空指针建立相应的前驱或后继线索.
12题图
13.试写一个算法,在中序全线索化二叉树中.结点p↑之下插入一棵以结点x↑只有左子树的中序全线索化二叉树,使x↑为根的二叉树成为P↑左子树.若P+原来有左子树,则令它为x↑的右子树.完成插入之后的二叉树应保持全线索化特性.
14.试找出分别满足下列条件的所有二叉树.
<1>先根序列和中根序列相同.
<2>根序列和后根序列相同.
<3>根序列和后根序列相同.
15.试分别画出图中所示树的孩子链表、孩子兄弟链表和静态双亲链表.
15题图
16.将图示树林转换成二叉树
16题图
17.分别画出图示各二叉树对应的树林.
17题图
18.假设用于通讯的电文仅由8个字母组成,字母在电文中出现的频率分别为7,19,2,6,32,3,21,10.试为这8个字母设计哈夫曼编码.使用0~7的二进制表示是另一种编码方案.对于上述实例,比较两种方案的优缺点.
19.下面的结论正确吗?
“不管是(a)先根顺序,(b)中根顺序,(c)后根顺序穿越二叉树并列出二叉树的结点序列.其终端结点都以相同的相对顺序出现”.如果你认为结论是正确的,试证明之.
20.请说明什么样的二叉树可以实现对后序线索树进行后序遍历时不使用栈?
对前序线索树进行前序遍历时,什么样的二叉树可不使用栈?
21.试证明若n个结点的二叉树在机内表示成非线索形式则全部空链的个数表示成n的简单函数.而且这个量不依赖于二叉树的形式.
22.二叉树有n个结点,按先根排列时为U1,U2,…,Um而按中根排列时为UP1,UP2,…,UPn.试证明排列P1,P2,…,Pn可借助于栈由1,2,…,n获得.相反,若P1,P2,…,Pn是可以用栈由1,2,…,n得到的任一排列,则可以使它对应于某二叉树.
习题七
1.对于下图所示的有向图,试求出:
(1)每个顶点的入度和出度;
(2)它的邻接矩阵;
(3)它的邻接表;
(4)它的邻接多重表;
(5)它的强连通分量。
1题图
2.写出将一个无向图的邻接矩阵转换成邻接表的算法。
3.试以邻接矩阵为存储结构,分别写出连通图的深度优先和广度优先搜索算法。
4.已知带权连通图G(V,E)的邻接表如下,试画出G的一棵最小生成树。
其中顶点的三个域含义如下:
(∧表示指针值为空)
5.设有一个图如下所示,试列出从B至B的所有闭路。
5题图
6.试利用深度优先搜索求无向图中通过给定点Vk的简单回路的算法。
7.试对图7.4(a)所示的的无向图G4画出其广度优先生成树林。
8.请对下图,
(1)写出它的邻接矩阵,并按普里姆算法示其最小生成树;
(2)写出它的邻接表,并按克鲁斯卡尔算法求最小生成树。
8题图
9.试利用Dijkstra算法求下图中从顶点1到其它各顶点间的最短路径。
写出执行算法过程中各步的状态。
9题图
10.写出如下的有向图的拓扑序列。
10题图
11.对下图所示AOE-网,求出每项活动的最早开始时间e(i)和最迟开始时间l(i)。
并问:
工程完成的最短时间是什么?
那些活动是关键活动?
是否有哪项活动提高速度后能导致整个工程缩短工期?
11题图
习题八
1.试述顺序查找法,折半查找法和分块查找法对被找的表中元素的要求。
对长度为n的表的三种查找法的查找长度怎样?
(设出现的概率相同)。
2.试将折半查找的算法改写成递归调用形式的算法。
3.画出对长度为10的有序表进行折半查找的判定树,并求其等概率时查找成功的平均查找长度。
4.试编写利用折半查找确定记录所在块的分块查找算法。
5.已知如下所示长度为12的表
(Jan,Feb,Mar,June,July,Aug,Sep,Oct,Nov,Dec)
1试按表中元素的顺序依次插入一棵初始为空的二叉排序树,请画出插入完成之后的二叉排序树,并求其在等概率情况下查找成功的平均查找长度。
2按表中元素顺序构造一棵二叉平衡树,并求其在等概率情况下查找成功的平均查找长度。
6.有144项的表分成几块最好?
每块的最佳长度为多少?
假定每块长度为8,则其平均查找长度是多少?
7.试推导含12个结点的平衡二叉树的最大深度,并画出一棵这样的树。
8.试从空树开始,画出按以下次序向2-3树中插入关键码的建树过程:
20,30,50,52,60,68,70。
然后再在此树上删除50,68,画出每执行后2-3树的状态。
9.选取哈希函数H(k)=(3k)MOD11。
用开放定址法处理冲突,d1=H(k);di=(di-1+(7k)MOD10+l)MOD11(i=1,2,3,…)。
试在0~10的散列地址空间中对关键字序列(22,41,53,46,30,13,01,67)造哈希表,并求等概率情况下查找成功与不成功时的平均查找长度。
10.试写出一个判别给定二叉树是否为二叉排序树的算法。
设此二叉树以二叉链表作存储结构。
且树中结点的关键字均不同。
11.证明二叉排序树按中序遍历打印出的信息,是从小到大排序的。
12.试编写算法求出指定结点在给定的二叉排序树中所在的层数。
习题九
1.在内排序算法中,用阶的形式给出完成排序所需时间的范围,即分别给出最快和最慢排序算法平均所需的时间)。
2.在执行某个排序算法过程中,出现了排序码朝着最终排序序列相反方向的移动。
从而认为该排序算法是不稳定的。
这种说法对吗?
为什么?
3.设有1000个无序的元素。
希望用最快的速度挑出其中前10个最大元素;在以下的排序方法中采用哪一种最好?
为什么?
(1)快速排序,
(2)选择排序,(3)插入排序,(4)堆排序,(5)基数排序
4.作为输入的是四个俱乐部C1,C2,C3.C4的未排好次序的成员的名单。
各俱乐部的成员数都不超过250人。
试编写一个程序,用来找出那些至少属于三个俱乐部的所有的人。
提示,为简单起见,可以假定成员名单中写的不是名字而是正整数编号(一个人一个编号)。
5.希尔排序、选择排序、堆排序及快速排序是不稳定的。
试给出一个有相同关键字的记录的例子。
说明其不稳定性。
6.如果输入的已为有序表,试证明使用快速排序时其时间为O(n2)。
7.若存于1页序存储结构中的n个元素的序列近似有序,即若去掉其中少数k个元素后的序列是有序序列,试对这种文件讨论各种简单排序方法的时间复杂度。
8.假设有1000个值小于10000的整数数列,请设
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 王翠茹 习题