数据结构C++边学边做
文章平均质量分 71
数据结构C++边学边做学习笔记
AI Chen
悟已往之不谏,知来者之可追。实迷途其未远,觉今是而昨非。
展开
-
数据结构C++边学边做--单链表的实现
单链表的实现一、单链表定义二、单链表数据结构定义三、单链表的实现1.类声明2. LinkList->构造函数3.~ LinkList->析构函数4. Insert->插入函数5. PrintList->打印所有元素6. Length->求链表长度7. Get->按位查找8. Locate->按值查找9.Delete->删除指定元素四、单链表的测试1.主函数2.运行结果一、单链表定义 单链表是用一组任意的存储单元存放线性表中的元素。存储单元可以是连续的,也原创 2022-01-21 22:27:17 · 1690 阅读 · 0 评论 -
数据结构C++边学边做--线性表的折半查找
线性表的折半查找一、折半查找基本思想二、非递归法折半查找1.伪代码2.C++实现三、递归法折半查找一、折半查找基本思想 当使用顺序表存储线性表,并且表中的关检码有序时,可以采用效率更高的折半查找(binary search)。折半查找也称为二分查找或对分查找,一般只适用于静态查找。在有序表中,首先将待查找的关键字k和有序表中间记录的关键码值r[mid]作比较,如果k=r[mid],则查找成功,返回mid;如果k<r[mid],则在中间记录的左半区继续查找;如果k>r[mid],则在中间记录原创 2022-02-26 17:27:57 · 1227 阅读 · 0 评论 -
数据结构C++边学边做--二叉树的应用--求二叉树的镜像树
求二叉树的镜像树一、二叉树的镜像树二、二叉树的镜像树代码实现1.GetMrror类文件2.GetMrror类方法三、测试代码1.主函数2.测试程序四、完整源代码获取(免积分)一、二叉树的镜像树 将一颗二叉树的所有结点的左、右子树调换位置,就成了二叉树的镜像。下面两个二叉树就是镜像二叉树。二、二叉树的镜像树代码实现1.GetMrror类文件template <class ElemType>struct BiNode{ ElemType data; BiNode<ElemT原创 2022-02-22 22:20:01 · 875 阅读 · 0 评论 -
数据结构C++边学边做--二叉树的应用--判断二叉树是否对称
判断二叉树是否对称一、判断二叉树是否对称二、判断二叉树是否关于中轴线对称代码实现1.IsSymmetric类文件2.IsSymmetric类方法三、测试代码1.主函数2.输入一颗不对称二叉树3.输入一颗对称二叉树四、源代码获取(免积分)一、判断二叉树是否对称 与之前的判断二叉树是否结构对称不同,判断二叉树是否关于中轴线对称还要考虑结点的值。对于一个关于中轴线对称的二叉树,其任意一个非空结点,存在左、右孩子。并且左、右子树也都是关于中轴线对称的。判断二叉树是否关于中轴对称的算法与判断二叉树结构对称的算法类原创 2022-02-20 22:53:38 · 1103 阅读 · 0 评论 -
数据结构C++边学边做--二叉树的应用--判断二叉树的结构是否对称
判断二叉树的结构是否对称一、判断二叉树是否结构对称一、判断二叉树是否结构对称 二叉树结构性对称指的是不考虑结点的数据值,对于二叉树中任意一个非空的结点,左、右孩子都不存在,或者左、右孩子都存在;如果结点存在子树,则左、右子树的结构也分别是结构对称的。如下图1二叉树是结构不对称的,图2二叉树是结构对称的。 图1,结构不对称二叉树 图2,结构对称二叉树...原创 2022-02-15 09:58:23 · 981 阅读 · 0 评论 -
数据结构C++边学边做--二叉树的应用--求二叉树的最小深度
求二叉树的最小深度一、求二叉树的最小深度二、求二叉树最小深度实现1.SmallestDepth类文件2.SmallestDepth类方法三、求二叉树最小深度代码测试1.主函数2.输出结果四、源代码获取(免积分)一、求二叉树的最小深度 在前文二叉链表的实现的基础上添加一个求二叉树的最小深度的方法:SmallestDepth。二叉树的最小深度指的是从根节点到最近的叶子结点的距离。 当二叉树为空时,返回0; 当二叉树的左子树为空时返回右子树的最小深度+1; 当二叉树的右子树为空时返回左子树的深度原创 2022-02-14 14:47:48 · 1134 阅读 · 0 评论 -
数据结构C++边学边做--二叉树的遍历应用
二叉树的遍历应用一、二叉树遍历的应用二、Depth->求二叉树深度三、Count->求二叉树的结点个数四、CountLeaf->二叉树的叶子结点的个数五、PrintLeaf->输出二叉树的叶子结点六、测试代码1.主函数2.输出结果七、源代码获取(免积分)一、二叉树遍历的应用 二叉树的基本实现(二叉链表)见前文:二叉链表的实现。 二叉树的一些常见的应用是以二叉树的遍历为基础的,例如求二叉树的深度(Depth)、求二叉树的结点个数(Count)、求二叉树的叶子结点的个数(Cou原创 2022-02-13 18:55:24 · 694 阅读 · 0 评论 -
数据结构C++边学边做--二叉树的实现(二叉链表实现遍历操作)
二叉树的实现(二叉链表实现遍历操作)一、二叉树的遍历二、二叉链表的数据结构定义三、二叉链表类实现1.类声明2.BiTree->构造函数:Create创建二叉链表3.~BiTree->析构函数:Release释放二叉链表4.PreOrder->前序遍历5.InOrder->中序遍历6.PostOrder->后序遍历7.LevelOrder->层序遍历四、二叉链表的测试1.主函数2.输出结果五、源代码获取(免积分)一、二叉树的遍历 二叉树是一种重要的树状结构,因其结构相原创 2022-02-12 11:49:27 · 3623 阅读 · 1 评论 -
数据结构C++边学边做--队列的链式存储结构实现
队列的链式存储结构实现一、链队列的定义二、链队列数据结构定义三、链队列类实现1.类声明2.LinkQueue->构造函数3.~LinkQueue->析构函数4.EnQueue->入队5.DeQueue->出队6.GetQueue->取队头7.Empty->判断空队列四、链队列的测试1.主函数2.输出结果五、源代码获取(免积分)一、链队列的定义 采用链式存储结构实现的队列称为链队列(linked queue)。可以对单链表进行改造得到链队列,表头对应队头,表尾对应队尾原创 2022-02-10 12:38:18 · 1683 阅读 · 0 评论 -
数据结构C++边学边做--栈的链式存储结构实现
栈的链式存储结构实现一、链栈的定义二、单链表数据结构定义一、链栈的定义 使用链式存储结构存储的栈称为链栈(linked stack)。链栈和单链表的原理是一样的,只不过在操作上链栈是受限的——仅能在栈顶进行插入和删除!链栈非空的示意图如下,链栈为空时,top=NULL。二、单链表数据结构定义 结点结构可使用C++中的结构体定义,另外,由于现行表中的元素类型并不确定,因此可以使用模板机制。/*位于LinkStack.h文件中*//*用模板的方式定义数据结点*/template <cla原创 2022-02-09 13:38:15 · 1164 阅读 · 0 评论 -
单链表的应用--删除无序表中重复的元素
删除无序表中重复的元素,利用前文写好的链表的框架,在链表类中补充LinkListDelNormalDup方法。删除无序表中重复的元素一、问题分析二、代码分析1.链表类LinkList2.链表方法LinkListDelNormalDup三、测试代码1.主函数2.输出结果四、源代码获取(免积分)一、问题分析 单链表中的元素可能是无序的,因此和之前的删除有序表中重复的元素的算法不同。下面是单链表分别删除重复元素之前和之后的情况。 原链表: 删除重复元素之后的链表:二、代码分析 对于单原创 2022-02-02 13:09:03 · 2719 阅读 · 0 评论 -
单链表的应用--利用单链表求两个集合的交集
利用单链表两个集合的并集,利用前文写好的链表的框架,在链表类中补充Intersection方法。利用单链表两个集合的交集一、问题分析二、代码分析1.链表类LinkList2.链表方法Intersection三、测试代码1.主函数2.输出结果四、源代码获取(免积分)一、问题分析 利用单链表两个集合的交集。二、代码分析 使用单链表first1和单链表first2实现求集合的交集,用指针p指向first1的首元节点,判断其在first2中是否出现过,如果出现过,则输出p->data;后移p原创 2022-02-02 12:35:30 · 3824 阅读 · 0 评论 -
单链表的应用--利用单链表求两个集合的并集
利用单链表实现有序表的并集,利用前文写好的链表的框架,在链表类中补充Union方法。利用单链表实现有序表的并集一、问题分析二、代码分析1.链表类LinkList2.链表方法Union三、测试代码1.主函数2.输出结果四、源代码获取(免积分)一、问题分析 利用单链表实现有序表的并集。求并集和两个链表合并的算法类似,但是求并集不允许出现重复元素。二、代码分析 使用单链表first1和单链表first2实现求集合的并集,并且使用单链表first1存储合并后的结果,将first2中的元素结点p插入原创 2022-02-02 12:20:01 · 4302 阅读 · 0 评论 -
单链表的应用--利用单链表实现有序表的合并
利用单链表实现有序表的合并,利用前文写好的链表的框架,在链表类中补充Merge方法。利用单链表实现有序表的合并一、问题分析二、代码分析1.链表类LinkList2.链表方法IsOrdering三、测试代码1.主函数2.输出结果四、源代码获取(免积分)一、问题分析 给出两个有序排列的单链表L1和L2,将L2合并到L1中,使新的L1仍未有序表。二、代码分析 假设两个有序表用单链表存储,头指针分别为first1和first2,则可以将单链表1在头结点处断开,设指针r指向单链表1的头结点。p和q分原创 2022-01-25 11:09:09 · 1364 阅读 · 0 评论 -
单链表的应用--判断单链表是否有序
判断单链表是否有序,利用前文写好的链表的框架,在链表类中补充IsOrdering方法。对单链表排序一、问题分析二、代码分析1.链表类LinkList2.链表方法IsOrdering三、测试代码1.主函数2.输出结果四、源代码获取(免积分)一、问题分析 给你一个单链表,判断其是否为升序排列。(一般默认情况下,都是讨论升序排列。)二、代码分析 判断单链表是否有序只需要判断两个相邻的元素结点的值是否符合排序要求即可,一旦发现不符合排序要求的结点,返回0;如果直到比较结束都没有返回0,则最终返回1原创 2022-01-25 10:21:53 · 3409 阅读 · 0 评论 -
单链表的应用--删除有序表中重复的元素
删除有序表中重复的元素,利用前文写好的链表的框架,在链表类中补充LinkListDelDup方法。对单链表排序一、问题分析二、代码分析1.链表类LinkList2.链表方法LinkListDelDup三、测试代码1.主函数2.输出结果四、源代码获取(免积分)一、问题分析 给你一个有序链表,删除其重复元素并输出结果。示例 1:输入:head = [1,2,3,3,4,4,5]输出:[1,2,5]示例 2:输入:head = [1,1,1,2,3]输出:[2,3]二、代码分析1.原创 2022-01-24 11:21:22 · 977 阅读 · 0 评论 -
单链表的应用--对单链表排序
对单链表进行排序,利用前文写好的链表的框架,在链表类中补充Sort方法。对单链表排序一、问题分析二、代码分析1.链表类LinkList2.链表方法Sort三、测试代码1.主函数2.输出结果四、源代码获取(免积分)一、问题分析 给你一个链表,请将其按升序排列并输出排序后的结果。示例 1:输入: [4,2,1,3]输出:[1,2,3,4]示例 2:输入: [-1,5,3,4,0]输出:[-1,0,3,4,5]二、代码分析1.链表类LinkList 在链表类中声明Sort方原创 2022-01-23 16:20:34 · 1534 阅读 · 0 评论 -
单链表的应用--删除倒数第n个结点
删除倒数第n个结点,利用前文写好的链表的框架,在链表类中补充DeleteNthFromEnd方法。删除倒数第n个结点一、问题分析二、代码分析1.链表类2.链表方法三、测试代码1.主函数2.输出结果四、源代码获取(免积分)一、问题分析 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例 1:输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2:输入:head = [1], n = 1输出:[]示例 3:输入:head =原创 2022-01-22 17:18:37 · 1310 阅读 · 0 评论