数据结构习题 (4)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

树和二叉树习题(39)

1.请编写一个判别给定二叉树是否为二叉排序树的算法,设二叉树用llink-rlink 法存储。2.假设K1,…,Kn 是n 个关键词,试解答:

(1) 试用二叉查找树的插入算法建立一棵二叉查找树,即当关键词的插入次序为K1,

K2,…,Kn 时,用算法建立一棵以LLINK / RLINK 链接表示的二叉查找树。

(2) 设计一个算法,打印出该二叉查找树的嵌套括号表示结构。例如,K1=B,K2=A,K3=D,K4=C,K5=E,则用二叉查找树的插入算法建立的二叉查找树为:

该二叉查找树的嵌套括号表示结构为:B(A,D(C,E))

3.写出在二叉排序树中删除一个结点的算法,使删除后仍为二叉排序树。设删除结点由指针p 所指,其双亲结点由指针 f 所指,并假设被删除结点是其双亲结点的右孩子。用类PASCAL(或C)语言将上述算法写为过程形式。

4. 已知二叉树排序树中某结点指针p,其双亲结点指针为fp,p 为fp 的左孩子,试编写算法,删除p 所指结点。

5.二叉排序树采用二叉链表存储。写一个算法,删除结点值是X 的结点。要求删除该结点后,此树仍然是一棵二叉排序树,并且高度没有增长(注:可不考虑被删除的结点是根的情况)。

6. 设记录R1,R2,…,Rn 按关键字值从小到大顺序存储在数组r[1..n]中,在r[n+1]处设立一个监督哨,其关键字值为+∞; 试写一查找给定关键字k 的算法;并画出此查找过程的判定树,

求出在等概率情况下查找成功时的平均查找长度。

7.设计算法以求解编号为i和j的两个结点的最近的公共祖先结点的编号。

8.元素集合已存入整型数组A[1..n]中,试写出依次取A 中各值A[i](1<=i<=n)构造一棵二叉排序树T 的非递归算法:CSBT(T,A)

9.写出折半查找的算法,并要求它返回整型值i,当查找成功时,返回查找位置,查找不成功时返回0。

10.请编写算法:键树,又称数字查找树。它是一棵度为>=2 的树,树中的每个结点中不

是包含一个或几个关键字,而是只含有组成关键字的符号。编写一个在键(TIRE)树T 上查找关键字等于给定值KEY 的记录的算法。若查找成功,返回指向该记录的指针;否则返回空指针。

11.写出从哈希表中删除关键字为K 的一个记录的算法,设哈希函数为H,解决冲突的方法为链地址法。

12.编写一用链接表(LINKED LIST)解决冲突的哈希表插入函数。

13.在用除余法作为散列函数、线性探测解决冲突的散列表中,写一删除关键字的算法,要求将所有可以前移的元素前移去填充被删除的空位,以保证探测序列不致于断裂。

14.设排序二叉树中结点的结构为下述三个域构成: data: 给出结点数据的值;left: 给出本结点的左儿子结点的地址;right: 给出本结点的右儿子结点的地址设data 域为正整数,该二叉树树根结点地址为T。现给出一个正整数x。请编写非递归程序,实现将data 域的值小于等于x 的结点全部删除掉。

15.已知二叉树T 的结点形式为(llink, data,count,rlink,),在树中查找值为X 的结点,若找到,则记数(count)加1;否则,作为一个新结点插入树中,插入后仍为二叉排序树,写出其非递归算法。

16.假设一棵平衡二叉树的每个结点都标明了平衡因子b,试设计一个算法,求平衡二叉树的高度。

17.设从键盘输入一个整数的序列:n,a1,a2,…,an,其中n 表示连续输入整数的个数。(1)试编写一程序按整数值建立一个二叉排序树

18.设二叉排序树的各元素值均不相同,采用二叉链表作为存储结构,试分别设计递归和

非递归算法按递减序打印所有左子树为空,右子树非空的结点的数据域的值。

19.在单链表中,每个结点含有5 个正整型的数据元素若(最后一个结点的数据元素不满5 个,以值0 充),试编写一算法查找值为n(n>0)的数据元素所在的结点指针以及在该结点中的序号,若链表中不存在该数据元素则返回空指针。

20.编写对有序表进行顺序查找的算法,并画出对有序表进行顺序查找的判定树。假设每次查找时的给定值为随机值,又查找成功和不成功的概率也相等,试求进行每一次查找时和给定值进行比较的关键字个数的期望值。

21. 在二叉排序树的结构中,有些数据元素值可能是相同的,设计一个算法实现按递增有序打印结点的数据域,要求相同的数据元素仅输出一个,算法还应能报出最后被滤掉,而未输出的数据元素个数,对如图所示的二叉排序树,输出为:10,12,13,15,18,21,27,

35,42.滤掉3 个元素。

22.已知二叉排序树采用二叉链表存储结构,根结点的指针为T,链结点的结构为(lchild,data,rchild),其中lchild、rchild 分别指向该结点左、右孩子的指针(当孩子结点不存在时,相应指针域为null),data域存放结点的数据信息。请写出递归算法,从小到大输出二叉排序树中所有数据值>=x 的结点的数据。要求先找到第一个满足条件的结点后再依次输出其他满足条件的结点。

23. 已知某哈希表HT 的装填因子小于1,哈希函数H(key)为关键字的第一个字母在

字母表中的序号。

(1)处理冲突的方法为线性探测开放地址法。编写一个按第一个字母的顺序输出哈希表中所有关键字的程序。

(2)处理冲突的方法为链地址法。编写一个计算在等概率情况下查找不成功的平均查找

长度的算法。注意,此算法中规定不能用公式直接求解计算。

24.有一个100*100 的稀疏矩阵,其中1%的元素为非零元素,现要求用哈希表作存储

结构。

(1)请你设计一个哈希表

(2)请写一个对你所设计的哈希表中给定行值和列值存取矩阵元素的算法;并对你的算法所需时间和用一维数组(每个分量存放一个非零元素的行值,列值,和元素值)作存储结构时存取元素的算法(注:此算法不需要写出,仅需说明存取的方法和所用时间)进行比较。25.将一组数据元素按哈希函数H(key)散列到哈希表HT(0:m)中,用线性探测法处理冲突(H(key)+1、H(key)+2、…、H(key)-1),假设空单元用EMPTY 表示,删除操作是将哈希表中结点标志位从INUSE标记为DELETED,试写出该散列表的查找、插入和删除三个基本操作算法。

相关文档
最新文档