数据结构与算法分析专题实验-西安交大-赵仲孟
数据结构与算法

数据结构与算法数据结构与算法是北京大学于2018年02月26日首次在中国大学MOOC开设的慕课课程,是国家精品在线开放课程。
该课程授课教师为张铭、陈斌、卢宗青、刘云淮、赵海燕、宋国杰、黄骏、邹磊、王腾蛟。
据2021年2月中国大学MOOC官网显示,该课程已开课4次。
数据结构与算法课程内容包括数据结构与抽象数据类型、算法特性及分类、算法效率与度量、线性结构、顺序表、链表、栈与队列、栈与递归、递归转非递归、字符串的存储结构、字符串运算的算法实现、字符串的快速模式匹配、二叉树的抽象数据类型、二叉树的搜索、二叉树的存储结构、树与二叉树的等价转换、树的抽象数据类型及树的遍历、树的链式存储结构、树的父指针表示法、树的顺序存储和K叉树、图的概念和抽象数据类型、图的存储结构、图的遍历、内排序、检索等内容。
课程性质:课程背景计算机是现代社会中用于解决问题的重要工具,支撑这个工具高效运转的就是其后的各种系统程序、应用程序。
数据结构,是抽象的表示数据的方式;算法,则是计算的一系列有效、通用的步骤。
算法与数据结构是程序设计中相辅相成的两个方面,是计算机学科的重要基石。
课程定位数据结构与算法是介绍基本数据结构以及相关的经典算法,强调问题-数据-算法的抽象过程,关注数据结构与算法的时间空间效率,培养学生编写出高效程序从而解决实际问题的综合能力的一门课程。
适应对象数据结构与算法适合计算机以及相关理工专业的本科生学习。
对于具有C语言结构化程序设计基础的学生,该课程第0章补充了一些面向对象的基本内容。
课程简介:数据结构与算法围绕着“算法+数据结构=程序”的思路,以问题求解为导向进行学习,运用问题抽象、数据抽象、算法抽象来分析问题,应用适当的数据结构和算法来设计和实现相应的程序。
在求解实际问题方面,该课程会学习到通过权衡时空和其他资源开销,利用数据结构来组织数据、设计高效的算法、完成高质量的程序以满足错综复杂的实际应用需要。
课程所学到的内容会被利用到计算机科学后续的各个课程中,如操作系统、软件工程、数据库概论、编译技术、计算机图形学、人机交互等。
西交大数据结构习题及答案.

习题1一、单项选择题1. 数据结构是指()。
A.数据元素的组织形式B.数据类型C.数据存储结构 D.数据定义2. 数据在计算机存储器内表示时,物理地址与逻辑地址不相同的,称之为()。
A.存储结构B.逻辑结构C.链式存储结构D.顺序存储结构3. 树形结构是数据元素之间存在一种()。
A.一对一关系B.多对多关系C.多对一关系D.一对多关系4. 设语句x++的时间是单位时间,则以下语句的时间复杂度为()。
for(i=1;i<=n; i++)for(j=i;j<=n; j++)x++;A.O(1) B.O() C.O(n)D.O( )5. 算法分析的目的是(1),算法分析的两个主要方面是(2)。
(1) A.找出数据结构的合理性B.研究算法中的输入和输出关系C.分析算法的效率以求改进D.分析算法的易懂性和文档性(2) A.空间复杂度和时间复杂度 B.正确性和简明性C.可读性和文档性D.数据复杂性和程序复杂性6.计算机算法指的是(1),它具备输入,输出和(2)等五个特性。
(1) A.计算方法B.排序方法C.解决问题的有限运算序列D.调度方法(2)A.可行性,可移植性和可扩充性B.可行性,确定性和有穷性C.确定性,有穷性和稳定性 D.易读性,稳定性和安全性7. 数据在计算机内有链式和顺序两种存储方式,在存储空间使用的灵活性上,链式存储比顺序存储要()。
A.低B.高C.相同D.不好说8. 数据结构作为一门独立的课程出现是在()年。
A.1946B.1953 C.1964 D.19689. 数据结构只是研究数据的逻辑结构和物理结构,这种观点()。
2019年西安交通大学814数据结构真题回忆

31842-2019年西安交通大学814数据结构真题回忆814.数据结构。
选择五个。
忘了-大题avIl的题告诉11个数然后进行排序求平均长度二大题哈希表公共溢出区告诉12个数然后求平均长度三(1) 写图的邻接表结构(2)对一个图进行dfs与bfs(3) prim算法四编程题将一个链表进行逆置求时间复杂空间复杂oS填空10个吧。
忘了问答题三个1、三个调度。
然后进程挂起是靠那个调度完成的为什么?2、3、忘了。
大题一(1) 用ru调度进行22个关键数的页面置换(2) 设计一个ru (用计数器和栈) 有标志位(我好像见过原题)二pv 100个学生50台计算机两个学生必须--组才能去申请一个电脑然后管理员才让他们进去。
然后上机操作操作完了要让老师检查。
然后管理员才让走。
计算机组成原理。
四道大题忘了第一道大题告诉16位指令15-11指令10-8是寻址方式7-5通用寄存器4-0是地址。
有000是一次间接寻址001 010011分布是寄存器间接寻址变址寻址相对寻址第一问指令数量寄存器数量。
还有多少种寻址方式第二问问各个寻址的范围第三问问一个指令的数据是多少。
那个画成2进制然后是相对寻址第二道大题。
10位阶补尾补各带一个符号位,第一问写正数负数的最大值最小值第二问写出x= (-23/32) *2^7与y= (23/32) *2^6第三问x+y=?第四问把第三问结果表示出来915[题型分布与分值]选择10*2判断5*2.填空5*2简答7道应该是15*2+16*1+7*4编程题15*2+10*1代码题1输入有限个xy。
xy代表二伟空间一个点,寻找-个最小矩形,包含所输入的所有点要求输出该矩形左下顶点和右上的顶点2.判断一个字符串是否是回文串(其中有空格,需要排除空格),第一问递归解决。
第二问用栈解决3.-个无序序列,找出其中的逆序对,要求O(nlogn), 如果不能在这个时间复杂度下实现,自己写一个程序,声明其时间复杂度.大题第一个满k叉树的分支节点数为n其叶子结点满足(K-1)n+1数归法证明第二个是用队列的基本操作实现栈的push和pop后题, hash表, 10个数据,表长17,哈希函数H1(key) = key%17,冲突解决采用双重散列H2(key)= (key%7 ==0 ? 8:key%7),第一问画表,第二问求查找成功ASL还有个是.支撑树定义最小支撑树mst什么的,我不懂还有4个任务abcd,问分别用哪些数据类型可以解决,写出基本算法还有个相似二叉树算法填空题有广义表快排递归时间复杂度深度优先搜索邻接两种复杂度。
2022年西安交通大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)

2022年西安交通大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是()。
A.60B.66C.18000D.332、将两个各有N个元素的有序表归并成一个有序表,其最少的比较次数是()。
A.NB.2N-1C.2ND.N-13、某线性表中最常用的操作是在最后一个元素之后插入一个元素和删除第一个元素,则采用()存储方式最节省运算时间。
A.单链表B.仅有头指针的单循环链表C.双链表D.仅有尾指针的单循环链表4、已知有向图G=(V,E),其中V={V1,V2,V3,V4,V5,V6,V7}, E={<V1,V2>,<V1,V3>,<V1,V4>,<V2,V5>,<V3,V5>, <V3,V6>,<V4,V6>,<V5,V7>,<V6,V7>},G的拓扑序列是()。
A.V1,V3,V4,V6,V2,V5,V7B.V1,V3,V2,V6,V4,V5,V7C.V1,V3,V5,V2,V6,V7D.V1,V2,V5,V3,V4,V6,V75、用不带头结点的单链表存储队列,其队头指针指向队头结点,队尾指针指向队尾结点,则在进行出队操作时()。
A.仅修改队头指针B.仅修改队尾指针C.队头、队尾指针都可能要修改D.队头、队尾指针都要修改6、已知字符串S为“abaabaabacacaabaabcc”,模式串t为“abaabc”,采用KMP算法进行匹配,第一次出现“失配”(s!=t)时,i=j=5,则下次开始匹配时,i和j的值分别()。
A.i=1,j=0 B.i=5,j=0 C.i=5,j=2 D.i=6,j=27、循环队列放在一维数组A中,end1指向队头元素,end2指向队尾元素的后一个位置。
数据结构与算法分析专题实验-西安交大-赵仲孟

西安交通大学数据结构与算法课程实验实验名称:数据结构与算法课程专题实验所属学院:电信学院专业班级:计算机32班小组成员:指导老师:赵仲孟教授实验一背包问题的求解1.问题描述假设有一个能装入总体积为T的背包和n件体积分别为w1,w2,…w n的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+…+w m=T,要求找出所有满足上述条件的解。
例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)(1,4,5)(8,2)(3,5,2)。
2.实现提示可利用回溯法的设计思想来解决背包问题。
首先,将物品排成一列,然后,顺序选取物品装入背包,若已选取第i件物品后未满,则继续选取第i+1件,若该件物品“太大”不能装入,则弃之,继续选取下一件,直至背包装满为止。
如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入的物品“不合适”,应将它取出“弃之一边”,继续再从“它之后”的物品中选取,如此重复,直到求得满足条件的解,或者无解。
由于回溯求解的规则是“后进先出”,自然要用到“栈”。
3.问题分析1、设计基础后进先出,用到栈结构。
2、分析设计课题的要求,要求编程实现以下功能:a.从n件物品中挑选若干件恰好装满背包b. 要求找出所有满足上述条件的解,例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)、(1,4,5)、(8,2)、(3,5,2)3,要使物品价值最高,即p1*x1+p2*x1+...+pi*xi(其1<=i<=n,x取0或1,取1表示选取物品i) 取得最大值。
在该问题中需要决定x1 .. xn的值。
假设按i = 1,2,...,n 的次序来确定xi 的值。
如果置x1 = 0,则问题转变为相对于其余物品(即物品2,3,.,n),背包容量仍为c 的背包问题。
若置x1 = 1,问题就变为关于最大背包容量为c-w1 的问题。
数据结构与算法设计课后习题及答案详解

第一章1.数据结构研究的主要内容包括逻辑结构、存储结构和算法。
2.数据元素是数据的基本单位,数据项是数据的最小标示单位。
3.根据数据元素之间关系的不同,数据的逻辑结构可以分为集合、树形、线性、图状。
4.常见的数据存储结构有四种类型:顺序、链式、索引、散列。
5.可以从正确性、可读性、健壮性、高效性四方面评价算法的质量。
6.在一般情况下,一个算法的时间复杂度是问题规模的函数。
7.常见时间复杂度有:常数阶O(1)、线性阶O(n)、对数阶O(log2 n)、平方阶O(n²)和指数阶O(2ⁿ)。
通常认为,具有常数阶量级的算法是好算法,而具有指数阶量级的算法是差算法。
8.时间复杂度排序由大到小(n+2)!>2ⁿ+²>(n+2)4次方>nlog2 n>100000.问答题:1.什么叫数据元素?数据元素是数据的基本单位,是数据这个集合的个体,也称为元素、结点、顶点、记录。
2.什么叫数据逻辑结构?什么叫数据存储结构?数据逻辑结构:指数据元素之间存在的固有的逻辑结构。
数据存储结构:数据元素及其关系在计算机内的表示。
3.什么叫抽象数据类型?抽象数据类型是指数据元素集合以及定义在该集合上的一组操作。
4.数据元素之间的关系在计算机中有几种表示方法?顺序、链式、索引、散列。
5.数据的逻辑结构与数据的存储结构之间存在着怎样的关系?相辅相成,不可分割。
6.什么叫算法?算法的性质有哪些?算法:求解问题的一系列步骤的集合。
可行性、有容性、确定性、有输入、有输出。
7.评价一个算法的好坏应该从哪几方面入手?正确性、可读性、健壮性、高效性。
第二章1.线性表中,第一个元素没有直接前驱,最后一个元素没有直接后继。
2.线性表常用的两种存储结构分别是顺序存储结构和链式存储结构。
3.在长度为n的顺序表中,插入一个新元素平均需要移动表中的n/2个元素,删除一个元素平均需要移动(n-1)/2个元素。
4.在长度为n的顺序表的表头插入一个新元素的时间复杂度为O(n),在表尾插入一个新元素的时间复杂度为O(1)。
第三章栈和队列

续8
//循环队列实现方案二 在SqQueue结构体中增设计数变量c,记录队列中当前 元素个数 void clearQueue(SqQueue &q) { q.r=q.f=-1; q.c=0; //r=f=-1~n-1区间任意整数均可 } int empty(SqQueue &q) { return q.c==0; } int full(SqQueue &q) { return q.c==q.n; } //队空、队满时q.f==q.r均为真 //优点:队满时没有空闲元素位置(充分利用了空间)
西南交通大学信息科学与技术学院软件工程系‐赵宏宇 数据结构A 第3章‐19
西南交通大学信息科学与技术学院软件工程系‐赵宏宇
数据结构A 第3章‐20
3.3 栈的应用
续1
3.3 栈的应用
续2
2. 栈与递归 (1) 递归程序的存储空间消耗 由于函数调用的指令返回地址、形式参数以及断 点状态均用系统堆栈实现存储,因此递归调用的层次 数(深度)决定了系统堆栈必须保留的存储空间容量大小。 例1 以下函数用递归法实现n元一维数组元素逆序存储, 试分析所需栈的深度。 void reverse(ElemTp a[], int i, int j) //数组a下标范围i..j实现元素逆序存储 { if(i<j) { a[i]a[j]; reverse(a, i+1, j-1); } }
西南交通大学信息科学与技术学院软件工程系‐赵宏宇 数据结构A 第3章‐7
3. 堆栈习题举例 例1 若元素入栈次序为ABC,写出所有可能的元素出栈 次序。 答: 所有可能的元素出栈次序共5种,即 ABC 操作PXPXPX (P表示入栈,X表示退栈) ACB PXPPXX BAC PPXXPX BCA PPXPXX CBA PPPXXX
树与二叉树上机实验

西安交通大学实验报告课程数据结构(C语言描述)实验报告名称树与二叉树上机实验系别专业班级姓名学号一.实验目的掌握二叉树的建立方法;理解二叉树的结构和前序遍历、中序遍历、后序遍历及按层次遍历的方法;学会用二叉树解决问题。
二.实验内容(-)实验题目一:设树中结点的定义为:struct BTreeNode {ElemType data;struct BTreeNode* left;struct BTreeNode* right;};下面是根据二叉树的前序序列来建立二叉树的子程序:void CreatBiTree(struct BTreeNode** T){char ch;scanf("\n%c",&ch);if(ch=='#') *T=NULL; /* “#” 代表空子树*/else {(*T)=malloc(sizeof(struct BTreeNode));(*T)->data=ch;CreatBiTree(&((*T)->left));CreatBiTree(&((*T)->right));}}设输入该二叉树的前序序列为:ABC##DE#G##F##HI##J#K##(#代表空子树)请编程完成下列任务:⑴请根据此输入来建立该二叉树,并输出该二叉树的前序、中序和后序序列,⑵按层次遍历的方法来输出该二叉树按层次遍历的序列;⑶求该二叉树的高度;⑷交换该二叉树的左右子树,并输出交换后新的二叉树中序遍历的结果;1.要点分析理解并正确运用二叉树的结构和遍历方法。
前序序列:ABC##DE#G##F##HI##J#K## 表示的二叉树为:所以根据二叉树的结构可知:其前序序列为:ABCDEGFHIJK中序序列为:CBEGDFAIHJK后序序列为:CGEFDBIKJHA按层次遍历的结果为:ABHCDIJEFKG交换左右子树后中序遍历的结果为:KJHIAFDGEBC深度为5。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安交通大学数据结构与算法课程实验实验名称:数据结构与算法课程专题实验所属学院:电信学院专业班级:计算机32班小组成员:指导老师:赵仲孟教授实验一背包问题的求解1.问题描述假设有一个能装入总体积为T的背包和n件体积分别为w1,w2,…w n的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+…+w m=T,要求找出所有满足上述条件的解。
例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)(1,4,5)(8,2)(3,5,2)。
2.实现提示可利用回溯法的设计思想来解决背包问题。
首先,将物品排成一列,然后,顺序选取物品装入背包,若已选取第i件物品后未满,则继续选取第i+1件,若该件物品“太大”不能装入,则弃之,继续选取下一件,直至背包装满为止。
如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入的物品“不合适”,应将它取出“弃之一边”,继续再从“它之后”的物品中选取,如此重复,直到求得满足条件的解,或者无解。
由于回溯求解的规则是“后进先出”,自然要用到“栈”。
3.问题分析1、设计基础后进先出,用到栈结构。
2、分析设计课题的要求,要求编程实现以下功能:a.从n件物品中挑选若干件恰好装满背包b. 要求找出所有满足上述条件的解,例如:当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)、(1,4,5)、(8,2)、(3,5,2)3,要使物品价值最高,即p1*x1+p2*x1+...+pi*xi(其1<=i<=n,x取0或1,取1表示选取物品i) 取得最大值。
在该问题中需要决定x1 .. xn的值。
假设按i = 1,2,...,n 的次序来确定xi 的值。
如果置x1 = 0,则问题转变为相对于其余物品(即物品2,3,.,n),背包容量仍为c 的背包问题。
若置x1 = 1,问题就变为关于最大背包容量为c-w1 的问题。
现设r={c,c-w1} 为剩余的背包容量。
在第一次决策之后,剩下的问题便是考虑背包容量为r 时的决策。
不管x1 是0或是1,[x2 ,.,xn ] 必须是第一次决策之后的一个最优方案。
也就是说在此问题中,最优决策序列由最优决策子序列组成。
这样就满足了动态规划的程序设计条件。
4.问题实现代码1:#include"iostream"using namespace std;class Link{public:int m;Link *next;Link(int a=0,Link *b=NULL){m=a;next=b;}};class LStack{private:Link *top;int size;int a[100];public:LStack(int sz=0){top=NULL;size=0;a[0]=0;}~LStack(){clear();}void clear(){while(top!=NULL){Link *temp=top;top=top->next;delete temp;}size=0;}void push(int it, int b){top=new Link(it,top);a[size]=b;size++;}int pop(){int it=top->m;Link * ltemp=top->next;delete top;top=ltemp;size--;return it;}int topValue(){return top->m;}int length(){return size;}int sum(){int s=0;for(int i=0;i<size;i++)s=s+a[i];return s;}void print(){for(int i=0;i<size;i++)cout<<a[i]<<" ";cout<<endl;}};void panduan(int x1,int n, int x2[],LStack *x4){ int i,ss=0;for(i=x4->pop()+1;i<n;i++){if(x4->sum()+x2[i]<=x1){x4->push(i,x2[i]);}if(x4->sum()==x1){x4->print();break;}}if(x4->length()==1&&x4->topValue()==n-1) return ;else panduan(x1, n,x2,x4);}int main(){LStack *ll=new LStack(0);int m[100];int n,z;cout<<"输入物品个数"<<endl;cin>>n;cout<<"输入物品大小"<<endl;for(int i=0;i<n;i++)cin>>m[i];cout<<"输入背包大小"<<endl;cin>>z;ll->push(-1,0);cout<<"符合条件的解"<<endl;panduan(z,n,m,ll);return 0;}结果1:代码2:#include<iostream># include<cstring>using namespace std;struct Bag{int V; //背包体积int number; //物品数量int v[20]; //物品体积int value[20]; //物品价值int dp[20][20]; //最大价值}bag;int max(int a,int b){return a>b?a:b;}int main(){cout<<"请输入背包的容量:"<<endl;cin>>bag.V;cout<<"请输入物品的数量:"<<endl;cin>>bag.number;cout<<"请输入每件物品的体积:"<<endl;for(int i=1;i<=bag.number;i++){cin>>bag.v[i];}cout<<"请输入每件物品的价值:"<<endl;for(int i=1;i<=bag.number;i++){cin>>bag.value[i];}memset(bag.dp,0,sizeof(bag.dp)); //dp中的每一个元素置零for(int i=1;i<=bag.number;i++)for(int j=0;j<=bag.V;j++){if(j>=bag.v[i])bag.dp[i][j]=max(bag.dp[i-1][j],bag.dp[i-1][j-bag.v[i]]+bag.value[i]);elsebag.dp[i][j]=bag.dp[i-1][j];}cout<<"最大价值:"<<bag.dp[bag.number][bag.V]<<endl;return 0;}结果2:熟悉了堆栈的使用,设用数组weight[1..N]存放物品重量,MaxW表示背包的最大装载量。
每进栈一个物品,就从sum中减去该物品的质量,设i为待选物品序号,若sum-weight[i]>=0,则该物品可选;若sum-weight[i] < 0,则该物品不可选,且若i>n,则需退栈,若此时栈空,则说明无解。
实验二二叉排序树的实现1.问题描述分别采用二叉链表和顺序表作存储结构,实现对二叉排序树的操作。
2. 基本要求(选择其中之一方式实现)(1)用二叉链表作存储结构实现二叉排序树。
(2)以回车符(‘\n’)为输入结束标志,输入数列L,生成一棵二叉排序树T;(3)对二叉排序树T作中序遍历,输出结果;(4)计算二叉排序树T查找成功的平均查找长度,输出结果;(5)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则,输出信息“无x”;3.问题分析可以再二叉树建立时记录每个节点移动到正确位置所需要的移动步数,再用总的移动步数除以总的节点数就是平均查找步数。
4.算法实现代码:#include"iostream"#include"math.h"#include"string.h"#include"stdlib.h"using namespace std;class BSTNode{public:double it;BSTNode *lc;BSTNode *rc;BSTNode(){lc=rc=NULL;}BSTNode(double a,BSTNode* l=NULL, BSTNode* r=NULL){it=a;lc=l;rc=r;}~BSTNode(){}double getele(){return it;}void setele(double a){it=a;}inline BSTNode* getlc(){return lc;}inline BSTNode* getrc(){return rc;}inline void setlc(BSTNode* a){lc=a;}inline void setrc(BSTNode * a){rc=a;}bool isleaf(){return (lc==NULL&&rc==NULL);}};class BST{friend class BSTNode;private:BSTNode *root;int nodecount;int cd;void clearhelp(BSTNode*);bool findhelp(BSTNode*, double );BSTNode* getmin(BSTNode*);BSTNode*deletemin(BSTNode*);BSTNode* insethelp(BSTNode*, double);BSTNode* removehelp(BSTNode*, double);void printhelp(BSTNode* ,int );public:BST(){root=NULL;nodecount=0;cd=0;}~BST(){clearhelp(root);}void clear(){clearhelp(root);nodecount=0;}void inset(double a){root=insethelp(root, a);}double remove(double a){if(findhelp(root,a)){root=removehelp(root,a);nodecount--;cd--;}elsecout<<"无"<<a<<endl;}void print(){if(root==NULL)cout<<"Tree is empty"<<endl;elseprinthelp(root,0);}void chazhaochangdu(){int a;a=cd/nodecount;cout<<a<<endl;}};bool BST::findhelp(BSTNode* root, double a){if(root==NULL)return false;if(a<root->it)return findhelp(root->lc,a);else if(a>root->it)return findhelp(root->rc,a);else if(a==root->it)return true;}BSTNode* BST::insethelp(BSTNode* root, double a){ if(root==NULL){ cd++;nodecount++;return new BSTNode(a,NULL,NULL);}if(a<=root->it){ cd++;root->setlc(insethelp(root->lc,a));}else if(a>root->it){ cd++;root->setrc(insethelp(root->rc,a));}return root;}BSTNode* BST:: deletemin(BSTNode* rt){if(rt->lc==NULL)return rt->rc;else {rt->setlc(deletemin(rt->lc));return rt;}}BSTNode* BST:: getmin(BSTNode* rt){if(rt->lc==NULL)return rt;else return getmin(rt->lc);}BSTNode* BST::removehelp(BSTNode* rt,double a){ if(rt==NULL) return NULL;else if(a<rt->it)rt->setlc(removehelp(rt->lc,a));else if(a>rt->it)rt->setrc(removehelp(rt->rc,a));else{BSTNode* temp=rt;if(rt->lc==NULL){rt=rt->rc;delete temp;}else if(rt->rc==NULL){rt=rt->lc;delete temp;}else {BSTNode* temp=getmin(rt->rc);rt->it=temp->it;rt->setrc(deletemin(rt->rc));delete temp;}}return rt;}void BST:: clearhelp(BSTNode* root){if(root==NULL) return;clearhelp(root->lc);clearhelp(root->rc);delete root;}void BST:: printhelp(BSTNode* root ,int level){ if(root==NULL)return ;printhelp(root->lc,level+1);cout<<root->it<<" ";printhelp(root->rc,level+1);}int main(){BST a;string b;int i;cout<<"输入数据以\\n结束"<<endl;for(;;){cin>>b;if(b.at(0)=='\\'){break;}else{a.inset(atof(b.c_str()));}}a.print();cout<<endl<<"二叉树的平均搜索长度";a.chazhaochangdu();for(; ;){cout<<"输入要删除的数"<<endl;double x;cin>>x;a.remove(x);a.print();}return 0;}结果:实验三约瑟夫环1.问题描述设编号为1,2,…,n(n>0)个人按顺时针方向围坐一圈,每人持有一个正整数密码。