《数据结构&算法》
文章平均质量分 90
逐步深入,优化思路
HZ_ENG
这个作者很懒,什么都没留下…
展开
-
【数据结构】二叉树---红黑树的实现
键值(key):用于比较和排序节点的值。指向父节点的指针(parent):指向当前节点的父节点。指向左节点的指针(left):指向当前节点的左节点。指向右节点的指针(right):指向当前节点的右节点。颜色(color):表示节点的颜色,通常用一个位来表示,比如红色和黑色。红黑树节点结构的定义表示如下:在这里通过定义枚举结构来表示红、黑两种颜色//定义结点的颜色enum ColorRED, //表示红色BLACK //表示黑色//红黑树的结点定义类模板//指向左结点。原创 2024-03-15 11:03:16 · 997 阅读 · 20 评论 -
【数据结构】二叉树---AVL树的实现
平衡二叉树,又称AVL树。它可以是一颗空树,或者是具有以下性质的二叉树:即它的左子树和右子树都是平衡二叉树,且左子树和右子树的深度只差的绝对值不超过 1。把二叉树上结点的平衡因子BF定义为该结点的左子树的高度和右子树的高度之差(即平衡二叉树上结点的平衡因子只可能是-1、0 和 1只要二叉树上有一个结点的平衡因子的绝对值大于1,则该二叉树就是不平衡的。说明:后面所用到的平衡因子的都是右子树的高的 - 左子树的高度影响二叉搜索树平衡的操作只能是插入和删除。原创 2024-03-14 10:24:41 · 1106 阅读 · 17 评论 -
【数据结构】栈及栈的实现
上述代码中扩容的那条语句首先需要判断当前最大容量是否为0,若为0直接扩容多大,否则扩容当前容量的2倍;然后就是动态开辟空间此处用的是 realloc 而没有用 malloc 原因是因为此处用realloc可以避免后面由于开辟的空间不足还要使用realloc进行动态扩容。这里由于一开始数组中元素为零,此时realloc和malloc的作用相同的,因此就避免先使用malloc,在使用realloc扩容的问题 .top的值总比数组元素下标多一,因此,top-1指向栈顶元素。2.2 栈的链式存储表示的实现。原创 2023-08-20 18:31:36 · 201 阅读 · 11 评论 -
【数据结构】排序(3)—堆排序&归并排序
思想方法:从最后一个元素开始(视为父节点),先找其孩子节点(左孩子或右孩子),与其孩 子结点比较,与大的一方(左孩子或右孩子)交换;思想方法:从第一个结点开始(视为左孩子或右孩子),先找该结点的父结点,在与父节点比较,大的与父结点交换,成为新的父节点;③ 把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应置;比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;原创 2023-10-06 15:32:26 · 1700 阅读 · 18 评论 -
【数据结构】线性表之顺序表的实现
顺序表的概念及结构顺序表的实现初始化顺序表顺序表的增加尾插头插顺序表的删除尾删头删销毁顺序表顺序表查找在pos位置插入元素在pos位置删除元素说明整合源代码。原创 2023-09-01 17:52:32 · 183 阅读 · 13 评论 -
【数据结构】排序(2)—冒泡排序 & 快速排序
在最坏的情况下,待排序的序列为正序或逆序时,递归树是一棵斜树, 此时,快速排序会堕落为冒泡排序,其时间复杂度为O(n^2),不过可以通过优化,使其提升为O(nlogn),总的来说还是O(nlogn)。cur的值与pivotkey的值比较,cur的值小,prev先后移一步,cur再后移;任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。原创 2023-10-03 21:01:35 · 3952 阅读 · 12 评论 -
【数据结构】排序(1) ——插入排序 & 希尔排序
当gap == 1时,数组已经接近有序的了,这样就会很快。3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在一 些书中给出的希尔排序的时间复杂度都不固定。一种排序实施前后,关键码相同的任意两个对象其前后次序没有发生变化,就说明这个排序是稳定的,否则是不稳定的。,也是一种插入排序类的方法,此种方法是在直接插入排序的基础上改进的,在时间效率上有了很大的提高。,具体时间复杂度和数组的有序性也是有关联的。原创 2023-10-02 14:07:33 · 414 阅读 · 16 评论