![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 84
如果觉得对你有帮助的话,就关注我吧,后续会推出更精彩的内容。查阅更多资料,请访问https://xiuxin.gitbook.io/datastructre/
修心_666
游戏热爱者,个人主页:https://xiuxin-666.gitee.io/
展开
-
数据结构--哈夫曼树
哈夫曼树 哈夫曼树的定义 在许多实际应用中,树中结点常常被赋予一个表示某种意义的数值,称为该结点的权。从树根结点到任意结点的路径长度(经过的边数)与该结点上权值的乘积,称为该结点的带权路径长度。树中所有结点的带权路径长度之和称为全树的带权路径长度,记为:WPL=∑i=1nWiLiWPL=\sum_{i=1}^n W_iL_iWPL=i=1∑nWiLi Wi 是第i个结点所带的权值,Li 是该结点到根结点的路径长度。 在含有n个带权叶子的二叉树中,其中带权路径长度(WPL)最小的二原创 2021-02-04 22:25:39 · 522 阅读 · 0 评论 -
数据结构--平衡二叉树
平衡二叉树 平衡二叉树(AVL) 定义 为避免树的高度增长过快,降低二叉树的性能,我们规定在插入和删除结点时,要保证任意结点的左右子树高度差的绝对值不超过1,将这样的二叉树称为平衡二叉树(AVL)。定义结点左子树与右子树的高度差为该结点的平衡因子,则平衡二叉树结点的平衡因子的值只可能是 -1, 0或 1。 平衡二叉树:一棵空树,或是具有以下性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度差的绝对值不超过1。 平衡二叉树的插入 基本思路:每当在二叉排序树中插入(删原创 2021-02-04 22:23:08 · 1443 阅读 · 1 评论 -
数据结构--二叉排序树
二叉排序树(BST) 定义 二叉排序树又称二叉查找树。二叉排序树或是一棵空树,或是一棵具有下列特性的非空二叉树: 1)若左子树非空,则左子树上所有结点关键字值均小于根结点的关键字值。 2)若右子树非空,则右子树上所有结点关键字值均大于根结点的关键字值。 3)左、右子树本身也分别是一棵二叉排序树 左子树结点值 < 根结点值 < 右子树结点值,对二叉排序树进行中序遍历,可以得到一个递增的有序序列。 查找 二叉排序树的查找是从根结点开始,沿某个分支逐层向下进行比较原创 2021-02-02 18:09:35 · 1588 阅读 · 0 评论 -
数据结构--树、森林
树、森林 树的存储结构 树的存储方式有很多种,既可采用顺序结构,又可采用链式存储结构,但无论采用何种存储方式,都要求能唯一的反映树中各结点之间的逻辑关系。下面是常见的存储结构: 双亲表示法 这种存储方式采用一组连续空间来存储每个结点,同时在每个结点中增设一个伪指针,指示其双亲结点在数组中的位置。 双亲表示法的存储结构描述:#define MAX_TREE_SIZE 100 //树中最多结点数typedef struct{ //树中的结点定义 ElemType原创 2021-01-31 20:53:38 · 995 阅读 · 0 评论 -
数据结构--线索二叉树
线索二叉树 基本概念 遍历二叉树以一定规则将二叉树中的结点排列成一个线性序列,得到二叉树结点的各种遍历序列,其实质是对一个非线性结构进行线性化操作,使这个访问序列中的每个结点(第一个和最后一个除外)都有一个直接前驱和直接后继。 引入线索二叉树是为了加快查找结点前驱和后继的速度。在有n的结点的二叉树中,有n+1个空指针。 在二叉树线索化时,通常规定:若无左子树,令lchild指向其前驱结点;若无右子树,令rchild指向后继结点。还需要增加两个标志域表明当前指针域所指对象是指向左(右)子结点还原创 2021-01-31 20:52:36 · 444 阅读 · 0 评论 -
数据结构 - 二叉树遍历(递归,非递归)与构造
二叉树遍历和构造 二叉树的遍历 二叉树遍历其实很简单,三种遍历都是一样的,只不过顺序先后不一样罢了。 先序遍历 访问根结点,先序遍历左子树,先序遍历右子树void PreOrder(BitTree T){ if( T != nullptr){ visit(T); PreOrder(T->lchild); PreOrder(T->rchild); }} 中序遍历 中序遍历左子树,访问根结点,中序遍历右子树原创 2021-01-26 16:48:21 · 163 阅读 · 0 评论 -
数据结构-树和二叉树的基本概念
基本概念 树 定义 树是n个结点的有限集合,n = 0 时,称为空树。在任意空树中应满足:有且仅有一个特定的称为根的结点当 n > 1时,其余结点可分为 m 个互不相交的有限集合,其中每个集合本身又是一棵树,并且成为根节点的子树。树的定义是递归的,也是一种递归的数据结构。有两个特点:树的根节点没有前驱结点,除根节点外的所有结点有且只有一个前驱结点树中所有结点可以有零的或多个后继结点 树适合表示具有层次结构的数据。数中的某个结点最多只和上一层的一个结点有原创 2021-01-26 16:46:52 · 585 阅读 · 0 评论 -
数据结构-特殊矩阵的压缩存储
特殊矩阵的压缩存储 数组的存储结构 一个数组中的所有元素在内存中占用一段连续的存储空间。 对于多维数组,有两种映射方法:按行优先,按列优先。以二维数组为例:按行优先存储的基本思想是:先行后列,先存储行号较小的元素,行号相等先存储列号较小的元素。 矩阵的压缩存储 压缩存储:指为多个值相同的元素只分配一个存储空间,对零元素不分配存储空间。目的是为了节省存储空间。 特殊矩阵:指具有许多相同矩阵的元素或零元素,并且这些相同矩阵沿元素或零元素的分布有一定规律性的矩阵。常见的特殊矩阵有 对称矩阵原创 2021-01-24 16:40:29 · 1010 阅读 · 0 评论 -
数据结构-栈和队列的应用(验证括号的正确性,表达式求值,层次遍历)
栈和队列的应用 栈的应用 验证括号的正确性 题目很简单就是输入一串字符,判断字符中的括号是否合法。直接上代码:#include <iostream>#include <string.h>using namespace std;typedef char ElemType;#define MAXSIZE 100typedef struct Stack{ ElemType data[MAXSIZE]; int top;}Stack;void Init原创 2021-01-22 16:14:10 · 217 阅读 · 0 评论 -
数据结构-队列(Queue)
队列(Queue) 队列的基本概念 定义 队列(Queue)。队列简称队。是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队或进队;删除元素称为出队或离队。其操作特性为先进后出(First In Last Out,FIFO),并且只允许在队尾进,队头出。 队头(Front):允许删除的一端,又称队首 队尾(Rear):允许插入的一端 空队列:不包含任何元素的空表 队列的基本操作 1)InitQueue(&Q):初始化队原创 2021-01-22 10:45:03 · 26478 阅读 · 2 评论 -
数据结构-栈(Stack)
栈(Stack) 栈的基本概念 定义 只允许在一端进行插入或删除操作的线性表。首先,栈是一种线性表,但限定这种线性表只能在某一段进行插入和删除操作。 栈顶(Top):线性表允许进行插入和删除的一端。 栈底(Bottom):固定的,不允许进行插入和删除的另一端。 空栈:不含任何元素。 如上图:a1为栈底元素,an为栈顶元素。由于栈只能在栈顶进行插入和删除操作,故进栈次序依次为a1,a2,… ,an 而出栈次序为an,…,a2,a1。栈的明显的操作特征为后进先出(Last In F原创 2021-01-20 17:16:30 · 1017 阅读 · 0 评论 -
数据结构-顺序表和链表的区别
区别 顺序表和链表的比较顺序表单链表存取方式可顺序存取,可随机存取只能从表头顺序存取逻辑结构和物理结构顺序存储,逻辑上相邻物理上也相邻链式存储,逻辑上相邻物理上不一定相邻,通过指针链接按值查找按值查找:O(n)(无序)折半查找 O(log2n)(有序)O(n)按序号查找O(1)O(n)插入O(n),平均需要移动n/2个元素只需修改相关结点删除O(n),平均需要移动n/2个元素只需修改相关结点空间分配可能会出现存储空间大原创 2021-01-20 17:14:56 · 233 阅读 · 0 评论 -
数据结构-双链表
双链表 单链表结点中只有一个只指向后继的指针,使得单链表只能从头结点开始一次顺序的先后遍历。要访问某个结点的前驱结点(插入删除操作时),只能从头开始遍历,访问后继节点的时间复杂度为O(1),访问前驱结点的时间复杂度为O(n)。 为了克服单链表的上述缺点,引入了双链表,双链表结点中有两个指针prior 和 next,分别指向其前驱结点和后继结点。 定义 双链表中结点类型描述:typedef struct DNode{ ElemType data; struct DNode原创 2021-01-20 16:49:27 · 1635 阅读 · 0 评论 -
数据结构-单链表
单链表 由于顺序表的插入、删除操作需要移动大量的元素,影响运行效率,由此引进了线性表的链式存储。链式存储线性表时,不需要使用地址连续的存储单元,对线性表的插入删除不需要移动元素,而只需要修改指针。单链表 定义 每个链表结点,除了存放元素自身的信息外,还需要存放一个指向后继的指针。typedef struct LNode{ ElemType data; struct LNode* next;}LNode, *LinkList; //LNode,LinkList 其实是一原创 2021-01-17 16:54:16 · 204 阅读 · 0 评论 -
数据结构-顺序表
顺序表 线性表的顺序存储又称顺序表。表中元素的逻辑顺序与其物理顺序相同。定义 静态定义:#define MAXSIZE 50; //定义线性表的最大长度typedef struct { ElemType data[MAXSIZE]; //顺序表的元素 int length; //顺序表的当前长度}Sqlist; //顺序表的类型定义 静态分配时,数据量小的话,会造成数组空间的浪费;而如果是数据量大的话,就会造成溢出,进而导致程序崩溃。所原创 2021-01-15 14:57:11 · 208 阅读 · 2 评论 -
数据结构-线性表
线性表定义: 废话不多说,开门见山。线性表是什么?线性表是具有相同数据类型的n个数据元素的有限序列。 若用L命名线性表,则一般表示为:L=(a1,a2,..,ai,ai+1,...,an)L = ( a1,a2,..,ai,ai+1,...,an)L=(a1,a2,..,ai,ai+1,...,an) a1 为表头元素,an为表尾元素;除第一个元素外,每个元素有且仅有一个直接前驱;除最后一个元素外,每个元素有仅有一个直接后继。 注意:线性表是一种逻辑结构,而后面讲的顺序表和链表是指存原创 2021-01-15 14:49:22 · 283 阅读 · 3 评论 -
数据结构-算法基本概念
算法基本概念5个特性: 1)有穷性 2)确定性 3)可行性 4)输入 5)输出评价算法的优劣: 1)时间复杂度 它定性描述算法的运行时间。一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度,记为T(n)。 时间复杂度又分为:最坏时间复杂度,平均时间复杂度,最好时间复杂度。 最坏时间复杂度是指最坏情况下,算法的时间复杂度。 平均时间复杂度是指所有输入实力在等概率出现的情况原创 2021-01-14 12:17:30 · 251 阅读 · 0 评论 -
数据结构-基本概念
数据结构基本概念基本概念: 1、数据 数据就是信息的载体,其实通俗来讲就是计算机输入,处理和输出的东西。 2、数据元素 数据元素就是数据的基本单位,数据项就是构成数据元素的不可分割的最小单位。举个例子,学生记录由学号,姓名和性别构成,那么学生记录就是一个数据元素,学号,姓名,性别就是数据项。 3、数据对象 数据对象就是有相同性质的数据元素的集合。 4、数据类型 数据类型是一个值的集合和定义在此集合上的一组操作的总称。 1)原子类型。其值不可再分的数据类型。像int,fl原创 2021-01-14 11:34:50 · 200 阅读 · 1 评论