1本程序在vc++6.0编译通过并能正常运行。
2主界面程序已经尽量做到操作简便了,用户只需要根据提示一步步进行操作就行了。
六思考和总结:这个课程设计的各个基本操作大部分都在我的综合性实验中实现了,所以做这个主要攻克插入和删除这两个算法!其中插入在书本上已经有了,其中的右平衡算法虽然没有给出,但通过给出的左平衡算法很容易就可以写出右平衡算法。
所以最终的点就在于删除算法的实现!做的过程中对插入算法进行了非常非常多次的尝试!花了非常多的时间,这其中很多时候是在对程序进行单步调试,运用了VC6。
0的众多良好工具,也学到了很多它的许多好的调试手段。
其中删除算法中最难想到的一点是:在用叶子结点代替要删除的非叶子结点后,应该递归的运用删除算法去删除叶子结点!这就是整个算法的核心,其中很强烈得体会到的递归的强大,递归的最高境界(我暂时能看到的境界)!其它的都没什么了。
选做的那两个算法很容易实现的:1合并两棵平衡二叉排序树:只需遍历其中的一棵,将它的每一个元素插入到另一棵即可。
2拆分两棵平衡二叉排序树:只需以根结点为中心,左子树独立为一棵,右子树独立为一棵,最后将根插入到左子树或右子树即可。
BSTreeEmpty(BSTreeT)初始条件:平衡二叉排序树存在。
操作结果:若T为空平衡二叉排序树,则返回TRUE,否则FALSE.BSTreeDepth(BSTreeT)初始条件:平衡二叉排序树存在。
操作结果:返回T的深度。
LeafNum(BSTreeT)求叶子结点数,非递归中序遍历NodeNum(BSTreeT)求结点数,非递归中序遍历DestoryBSTree(BSTree*T)后序遍历销毁平衡二叉排序树TR_Rotate(BSTree*p)对以*p为根的平衡二叉排序树作右旋处理,处理之后p指向新的树根结点即旋转处理之前的左子树的根结点L_Rotate(BSTree*p)对以*p为根的平衡二叉排序树作左旋处理,处理之后p指向新的树根结点,即旋转处理之前的右子树的根结点LeftBalance(BSTree*T)对以指针T所指结点为根的平衡二叉排序树作左平衡旋转处理,本算法结束时,指针T指向新的根结点RightBalance(BSTree*T)对以指针T所指结点为根的平衡二叉排序树作右平衡旋转处理,本算法结束时,指针T指向新的根结点Insert_AVL(BSTree*T,TElemTypee,int*taller)若在平衡的二叉排序树T中不存在和e有相同的关键字的结点,则插入一个数据元素为e的新结点,并返回OK,否则返回ERROR.若因插入而使二叉排序树失去平衡,则作平衡旋转处理布尔变量taller反映T长高与否InOrderTraverse(BSTreeT)递归中序遍历输出平衡二叉排序树SearchBST(BSTreeT,TElemTypee,BSTree*f,BSTree*p)在根指针T所指的平衡二叉排序树中递归的查找其元素值等于e的数据元素,若查找成功,则指针p指向该数据元素结点,并返回TRUE,否则指针p指向查找路径上访问的最后一个结点并返回FALSE,指针f指向T的双亲,其初始调用值为NULLDelete_AVL(BSTree*T,TElemTypee,int*shorter)在平衡二叉排序树中删除元素值为e的结点,成功返回OK,失败返回ERRORPrintBSTree_GList(BSTreeT)以广义表形式打印出来PrintBSTree_AoList(BSTreeT,intlength)以凹入表形式打印,length初始值为0Combine_Two_AVL(BSTree*T1,BSTreeT2)合并两棵平衡二叉排序树Split_AVL(BSTreeT,BSTree*T1,BSTree*T2)拆分两棵平衡二叉树}(2)存储结构的定义:typedefstructBSTNode{ TElemTypedata; intbf;//结点的平衡因子 structBSTNode*lchild,*rchild;//左.右孩子指针}BSTNode,*BSTree;
1
线性表某软件公司大约有30名员工,每名员工有姓名、工号、职务等属性,每年都有员工离职和入职。
把所有员工按照顺序存储结构建立一个线性表,建立离职和入职函数,当有员工离职或入职时,修改线性表,并且打印最新的员工名单。
约瑟夫(Josephus)环问题:编号为1,2,3,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。
一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。
报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列为止。
建立n个人的单循环链表存储结构,运行结束后,输出依次出队的人的序号。
栈和队列某商场有一个100个车位的停车场,当车位未满时,等待的车辆可以进入并计时;
当车位已满时,必须有车辆离开,等待的车辆才能进入;
当车辆离开时计算停留的的时间,并且按照每小时1元收费。
汽车的输入信息格式可以是(进入/离开,车牌号,进入/离开时间),要求可以随时显示停车场内的车辆信息以及收费历史记录。
某银行营业厅共有6个营业窗口,设有排队系统广播叫号,该银行的业务分为公积金、银行卡、理财卡等三种。
公积金业务指定1号窗口,银行卡业务指定2、3、4号窗口,理财卡业务指定5、6号窗口。
但如果5、6号窗口全忙,而2、3、4号窗口有空闲时,理财卡业务也可以在空闲的2、3、4号窗口之一办理。
客户领号、业务完成可以作为输入信息,要求可以随时显示6个营业窗口的状态。
5、4阶斐波那契序列如下:f0=f1=f2=0,f3=1,…,fi=fi-1+fi-2+fi-3+fi-4,利用容量为k=4的循环队列,构造序列的前n+1项(f0,f1,f2,…fn),要求满足fn≤200而fn+1>200。
6、八皇后问题:设8皇后问题的解为(x1,x2,x3,…,x8),约束条件为:在8x8的棋盘上,其中任意两个xi和xj不能位于棋盘的同行、同列及同对角线。
要求用一位数组进行存储,输出所有可能的排列。
7、迷宫求解:用二维矩阵表示迷宫,自动生成或者直接输入迷宫的格局,确定迷宫是否能走通,如果能走通,输出行走路线。
8、英国人格思里于1852年提出四色问题(fourcolourproblem,亦称四色猜想),即在为一平面或一球面的地图着色时,假定每一个国家在地图上是一个连通域,并且有相邻边界线的两个国家必须用不同的颜色,问是否只要四种颜色就可完成着色。
现在给定一张地图,要求对这张地图上的国家用不超过四种的颜色进行染色。
要求建立地图的邻接矩阵存储结构,输入国家的个数和相邻情况,输出每个国家的颜色代码。
9、以下问题要求统一在一个大程序里解决。
从原四则表达式求得后缀式,后缀表达式求值,从原四则表达式求得中缀表达式,从原四则表达式求得前缀表达式,前缀表达式求值。
数组与广义表鞍点问题:若矩阵A中的某一元素A[i,j]是第i行中的最小值,而又是第j列中的最大值,则称A[i,j]是矩阵A中的一个鞍点。
写出一个可以确定鞍点位置的程序。
稀疏矩阵转置:输入稀疏矩阵中每个元素的行号、列号、值,建立稀疏矩阵的三元组存储结构,并将此矩阵转置,显示转置前后的三元组结构。
用头尾链表存储表示法建立广义表,输出广义表,求广义表的表头、广义表的表尾和广义表的深度。
树和二叉树以下问题要求统一在一个大程序里解决。
按先序遍历的扩展序列建立二叉树的存储结构二叉树先序、中序、后序遍历的递归算法二叉树中序遍历的非递归算法二叉树层次遍历的非递归算法求二叉树的深度(后序遍历)建立树的存储结构求树的深度图输入任意的一个网,用普里姆(Prim)算法构造最小生成树。
要求建立图的存储结构(邻接表或邻接矩阵),输入任意的一个图,显示图的深度优先搜索遍历路径。
要求建立图的存储结构(邻接表或邻接矩阵),输入任意的一个图,显示图的广度优先搜索遍历路径。
查找设计一个读入一串整数构成一颗二叉排序树的程序,从二叉排序树中删除一个结点,使该二叉树仍保持二叉排序树的特性。
24、设定哈希函数H(key)=keyMOD11(表长=11),输入一组关键字序列,根据线性探测再散列解决冲突的方法建立哈希表的存储结构,显示哈希表,任意输入关键字,判断是否在哈希表中。
排序以下问题要求统一在一个大程序里解决。
25、折半插入排序26、冒泡排序27、快速排序28、简单选择排序29、归并排序30、堆排序
2023/12/3 17:25:33 13KB 数据结构 课程设计 C++ 排序
1
给出目录和文件信息,要求编程实现将其排列成一棵有一定缩进的树。
要求:(1)设计文件和目录信息树的存储结构。
(2)从文件或键盘输入目录和文件信息,输入格式采用绝对路径法,即:\A\A\AA1\A\AA1\aa1.doc…创建时要检查同一路径下不能有同名的目录或文件名。
(3)设计文件和目录信息树的输出格式(以凹入表的形式显示)。
(4)查找指定目录和文件。
(5)添加新目录或新文件。
(6)删除指定目录或文件,子目录能够被删除的前提是其为空,既不包含任何子目录和文件;
根目录不能删除。
(7)扩充目录或文件信息,如创建时间、读写权限、文件长度或子目录包含的子目录和文件数等。
(8)对同一层次下的子目录或文件按创建时间有序输出。
1
网络视频资源,如有侵权请留言/举报,资源过大上传乃是下载链接!!!!1.1.1线性表的逻辑结构1_10],r3`2t%j&?L&u(}2.1.2线性表的顺序存储结构_1_23.1.3线性表的链式存储结构_1_3_22h&A(D"j5F-i+I4N%S4.1.3线性表的链式存储结构1_3_1(C'z9h3~:v"q"k5.小结:顺序表和链表的比较与选择依据_1_46.章节总结及典型例题分析_1_57.2.1栈的类型定义_2_18.2.2栈的应用举例_2_2._)\%q6h*_6p!{9.2.3栈类型的实现_2_35X$M0sz0S&h7g:s10.2.4、2.5队列的类型定义及实现_2_40F.|1E$@,T/z2g7N(|,A11.2.6、2.7数组的类型定义、数组的顺序表示和实现_2_5'T*_$t*U5E'~:l'L%S&N7i5q12.2.8特殊矩阵的压缩存储_2_613.章节总结及典型例题分析_2_7*i1K%?#a:k+l;_C#Y/O14.3.1树的类型定义_3_1(I5J0P0o6}n15.3.2二叉树的类型定义_3_216.3.3二叉树的存储结构_3_3/X0p(f'd%|3p17.3.4遍历算法应用举例3_4_23f,WM;b5X+{)R9\#M:n/g18.3.4二叉树的遍历_3_4_1)c2Y+^*v"K2[:}2n"|19.3.5线索二叉树_3_520.3.6树和森林的表示法_3_6;a0?$C5K)|"K2[6t7}2i21.3.7树和森林的遍历_3_7+j4p(B5s6`"nN|3@22.3.8哈夫曼树和哈夫曼树编码_3_8'l)t*^(i*Y%a~.e,S-J23.章节总结及典型例题分析_3_9'j:?'j1u(u:q&y24.4.1抽象数据类型图的定义25.4.2图的存储表示!t)e!R(L3x"^:D*y-y26.4.3图的遍历'br0I;|4V-jt$y27.4.4最小生成树6Q9P3F.lJ/n28.4.5拓扑排序7Q1X(t!E,O)]4|/L29.4.6关键路径_4_66ce5N2D7B8d)D(n/v/~30.4.7两点之间的最短路径问题+u!d.o/s7b31.4.8章节总结及典型例题分析4S%p9G:}/s7w32.5.1静态查找表1gj8T7|"X.o#P&r.A33.5.2动态查找表p3c#L.[&y34.5.3散列表)n7y(K:K(o*H8E/_,}/S35.5.4字符串模式婚配6K2X(o[.C;|'F36.5.5章节总结及典型例题分析37.6.1排序的基本概念#s:J(L.W-X6Y#A#?!G1\1}38.6.2插入类排序*R"k'A3E5S:x39.6.3交换类排序法40.6.4选择类排序法41.6.5归并排序、6.6分配类排序5O'{1c+p1[:h2r)m42.6.7各种排序方法的综合比较5e8p%s*L$Y-P3G+K43.章节总结及典型例题分析
1
网络视频资源,如有侵权请留言/举报,资源过大上传乃是下载链接!!!!1.1.1线性表的逻辑结构1_10],r3`2t%j&?L&u(}2.1.2线性表的顺序存储结构_1_23.1.3线性表的链式存储结构_1_3_22h&A(D"j5F-i+I4N%S4.1.3线性表的链式存储结构1_3_1(C'z9h3~:v"q"k5.小结:顺序表和链表的比较与选择依据_1_46.章节总结及典型例题分析_1_57.2.1栈的类型定义_2_18.2.2栈的应用举例_2_2._)\%q6h*_6p!{9.2.3栈类型的实现_2_35X$M0sz0S&h7g:s10.2.4、2.5队列的类型定义及实现_2_40F.|1E$@,T/z2g7N(|,A11.2.6、2.7数组的类型定义、数组的顺序表示和实现_2_5'T*_$t*U5E'~:l'L%S&N7i5q12.2.8特殊矩阵的压缩存储_2_613.章节总结及典型例题分析_2_7*i1K%?#a:k+l;_C#Y/O14.3.1树的类型定义_3_1(I5J0P0o6}n15.3.2二叉树的类型定义_3_216.3.3二叉树的存储结构_3_3/X0p(f'd%|3p17.3.4遍历算法应用举例3_4_23f,WM;b5X+{)R9\#M:n/g18.3.4二叉树的遍历_3_4_1)c2Y+^*v"K2[:}2n"|19.3.5线索二叉树_3_520.3.6树和森林的表示法_3_6;a0?$C5K)|"K2[6t7}2i21.3.7树和森林的遍历_3_7+j4p(B5s6`"nN|3@22.3.8哈夫曼树和哈夫曼树编码_3_8'l)t*^(i*Y%a~.e,S-J23.章节总结及典型例题分析_3_9'j:?'j1u(u:q&y24.4.1抽象数据类型图的定义25.4.2图的存储表示!t)e!R(L3x"^:D*y-y26.4.3图的遍历'br0I;|4V-jt$y27.4.4最小生成树6Q9P3F.lJ/n28.4.5拓扑排序7Q1X(t!E,O)]4|/L29.4.6关键路径_4_66ce5N2D7B8d)D(n/v/~30.4.7两点之间的最短路径问题+u!d.o/s7b31.4.8章节总结及典型例题分析4S%p9G:}/s7w32.5.1静态查找表1gj8T7|"X.o#P&r.A33.5.2动态查找表p3c#L.[&y34.5.3散列表)n7y(K:K(o*H8E/_,}/S35.5.4字符串模式婚配6K2X(o[.C;|'F36.5.5章节总结及典型例题分析37.6.1排序的基本概念#s:J(L.W-X6Y#A#?!G1\1}38.6.2插入类排序*R"k'A3E5S:x39.6.3交换类排序法40.6.4选择类排序法41.6.5归并排序、6.6分配类排序5O'{1c+p1[:h2r)m42.6.7各种排序方法的综合比较5e8p%s*L$Y-P3G+K43.章节总结及典型例题分析
1
定义二叉树的存储结构,由给定的一棵二叉树的先序序列和中序序列来创建二叉树,并输出二叉树的其它遍历序列
2017/4/11 3:56:06 39KB 数据结构 C C++
1
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡