数据结构与算法
文章平均质量分 72
微尘8
这个作者很懒,什么都没留下…
展开
-
二叉查找树、二叉搜索树、二叉排序树算法分析及实现
二叉查找树(Binary Search Tree,简称 BST),又称为二叉搜索树、有序二叉树(Ordered Binary Tree)。二叉查找树或是空二叉树,或是满足以下三个性质的二叉树。若其左子树非空,则左子树上所有节点的值都小于根节点的值若其右子树非空,则右子树上所有节点的值都大于根节点的值其左右子树也分别是一棵二叉查找树原创 2024-04-12 21:41:01 · 1180 阅读 · 0 评论 -
图解二叉树遍历方法-前序遍历、中序遍历、后序遍历
前序遍历二叉树(Pre-order Traversal)的规则为:从根结点出发,先访问该结点,然后前序遍历该结点的左子树,再然后前序遍历该结点的右子树。中序遍历二叉树(In-order Traversal)的规则为:从根结点出发,先中序遍历该结点的左子树,然后访问该结点,再然后中序遍历该结点的右子树。后序遍历二叉树(Post-order Traversal)的规则为:从根结点出发,先后序遍历该结点的左子树,然后后序遍历该结点的右子树,再然后访问该结点。原创 2024-04-11 01:39:56 · 3113 阅读 · 0 评论 -
扩展二叉树前序遍历序列构建二叉树(图解)
是 n(n >= 0)个结点(每个结点最多只有2棵子树)的有限集合,该集合可为空集(称为空二叉树),或由一个根节点和两颗互不相交的,称为根节点的左子树和右子树的二叉树组成。:将二叉树中的每个结点的空子结点用一个虚拟结点表示,其值为一特定的值,比如"#",这样每个结点都有两个子结点,这种处理后的二叉树为原二叉树的扩展树。扩展二叉树就可以做到一个遍历序列确定一颗二叉树。例如:图1为一颗二叉树,图2为这颗二叉树的扩展二叉树:先访问根结点,然后遍历左子树,最后遍历右子树。原创 2024-04-09 11:39:38 · 2540 阅读 · 3 评论 -
6.排序算法之三:插入排序
插入排序就像抽牌,有n张无序的牌,并把这n张牌分成有序区(刚开始有序区牌数为1,即列表下标为0的那张牌)和无序区(刚开始无序区牌数为n-1),并从无序区的第一张牌(即列表中下标为1的那张牌)开始抽牌,并从这张牌的位置开始向前查找(即将这张牌跟有序区的最后一张牌开始查找比较),并进行移动,直到找到合适的位置,进行插入操作。插入排序又叫直接插入排序,插入排序的时间复杂度为:O(n^2^),插入排序算法是稳定的。原创 2023-03-02 14:59:49 · 67 阅读 · 0 评论 -
5.排序算法之二:选择排序
选择排序(select sort)在无序列表中,把无序列表分成有序区(刚开始有序区元素个数为0)和无序区(刚开始无序区元素个数为n),循环n-1趟,每一趟找到最小或最大的那个元素,并把最小或最大的那个元素放在有序区,此时有序区元素个数加1,无序区元素个数减1,直到循环n-1趟后,列表都已排序好,此时,有序区的元素个数为n,无序区元素个数为0。选择排序算法的时间复杂度为:O(n^2^),选择排序算法是不稳定的排序算法原创 2023-03-01 19:26:58 · 367 阅读 · 0 评论 -
4.排序算法之一:冒泡排序
冒泡排序列表中每相邻的两个数进行比较,如果前面比后面大,则交换这两个数。一趟排序完成后,无序区减少了一个数,有序区增加了一个数。代码关键点:总趟数(n-1),每一趟无序区范围,每一趟下标最大值为(n-i-1)冒泡排序算法的时间复杂度为:O(n^2^)冒泡排序算法是稳定的排序算法原创 2023-03-01 15:56:16 · 398 阅读 · 0 评论 -
3.查找算法:顺序查找和二分查找
顺序查找的算法时间复杂度为:O(n),二分查找的算法时间复杂度为:logn。(1)如果需要查找时,并且被查找的列表有序,那么选择二分查找,执行效率会比顺序查找快很多。(2)如果需要查找时,被查找的列表无序,就选择顺序查找。但是,如果需要频繁查找时,我们可以选择先对被查找的列表进行排序,然后在选择二分查找,从而提高查找的效率。原创 2023-02-28 21:58:25 · 1019 阅读 · 0 评论 -
2.递归算法
递归算法的两个特点(很重要)1. 调用自身2. 要有结束条件原创 2023-02-28 18:52:16 · 665 阅读 · 0 评论 -
1.时间复杂度与空间复杂度
• 时间复杂度是用来估算算法运行时间的式子(单位);• 一般来说,时间复杂度高的算法比时间复杂度低的算法慢;• 空间复杂度是用来估算算法内存占用大小的式子(单位);原创 2023-02-28 15:40:21 · 315 阅读 · 0 评论 -
排序算法分析:冒泡排序、选择排序、插入排序、希尔排序、快速排序
冒泡排序,选择排序,插入排序,希尔排序,快速排序等思路分析,代码实现,以及分析它们的时间复杂度,算法稳定性,空间复杂度原创 2022-07-15 22:02:23 · 2273 阅读 · 0 评论 -
C++之单链表模板类
#ifndef D_LINKSINGLE_H#define D_LINKSINGLE_Htemplatestruct node { T data; struct node *pNext;};templateclass CLinkSingle{public: //constructor CLinkSingle();原创 2013-09-07 18:52:40 · 786 阅读 · 0 评论