数据结构
文章平均质量分 78
黎子想写好代码
这个作者很懒,什么都没留下…
展开
-
【数据结构--N皇后问题求解】
文章目录N皇后问题判断是否放置回溯完整代码测试结果N皇后问题问题描述在N×N格的国际象棋上摆放N个皇后,使其不能互相攻击,即不能处于同一列或同一行,也不能处在同一斜线上,请问有多少种摆法?实例N皇后问题是回溯算法的经典案例,此处我们采用递归回溯方式解决。算法思路(1)使用一个一维数组来存储棋盘,清空棋盘,设当前行为第1行,当前列为第1列。(2)在当前行判断从第i(1 <= i <= tempN)列是否满足条件(即同一行、同一列、同一斜线上无两个皇后),若满足则执行第(3)步,若原创 2022-05-28 18:34:02 · 804 阅读 · 2 评论 -
【数据结构--哈夫曼编码(C语言版)】
文章目录哈夫曼树及其应用哈夫曼树哈夫曼树的特点哈夫曼树的构造哈夫曼编码哈夫曼树及其应用哈夫曼树介绍哈夫曼树前先介绍下面几个名词:1. 结点的路径长度l从根结点到该结点的路径上分支的数目,如下图结点a的l = 3。2. 树的路径长度树中所有叶子结点的路径长度之和,如下图该树的路径长度为2 + 3 + 3 + 2 + 2。3. 结点的权w给每一个结点赋予一个新的数值,称为这个结点的权。4. 结点的带权路径长度l * w从根结点到该结点之间的路径长度与该结点的权的乘积,下图结点a的带权路径长原创 2022-05-27 22:54:35 · 10571 阅读 · 9 评论 -
数据结构--压缩矩阵及其转置
文章目录压缩矩阵及其转置压缩矩阵压缩矩阵的转置压缩矩阵及其转置压缩矩阵 矩阵,即二维数组,其可以采用顺序存储结构来存储其中的元素,但当矩阵阶数很高同时矩阵中有很多值相同的元素(或大多数元素的值为0)时,采用严格的顺序存储结构显然是相当浪费空间的,因为存储0元素或许多值相同的元素是没有意义的,因此为了节省空间,对此类矩阵通常采用压缩存储。 稀疏式矩阵(数值为0的元素数目远远多于非0元素数目且非0元素分布无规律的矩阵)的压缩存储,需要存储:①其中非0元素的值;②非0元素在矩阵中的行下标和列下标;③非原创 2022-05-26 21:06:41 · 617 阅读 · 2 评论 -
【数据结构--二叉树】
文章目录树的定义和基本性质树的定义树的特点树的基本术语二叉树二叉树的定义二叉树的特点特殊二叉树二叉树的性质二叉树的代码实现二叉树遍历树的定义和基本性质树的定义树是一种非线性的数据结构,它是由n(n >= 0)个有限结点组成一个具有层次关系的集合T。如果n = 0,称为空树。如果n > 0,则T满足以下两个条件:①有且仅有一个根结点;②其他结点划分为m(m >= 0)个互不相交的有限集合T1 ,T2 ,…… ,Tm,其中每个集合又是一棵树,并且称之为根的子树。树的特点根结点可以有原创 2022-05-25 15:36:18 · 2182 阅读 · 0 评论 -
【数据结构--二维数组】
文章目录二维数组二维数组定义二维数组的创建二维数组的应用矩阵加法矩阵乘法二维数组二维数组定义二维数组本质上是以数组作为数组元素的数组,即数组的数组。二维数组就是一个有行和列的矩阵,每一行代表一个数组,即数组的数组;每一行数组内元素所在的位置可以用行和列号来表示二维数组的创建动态二维数组动态二维数组图示elements是动态二维数组变量,其是指向包含两个整型元素数组的指针(即指向二维数组首地址),elements[0]、elements[1]、elements[2]存储的值为一个包含两原创 2022-05-24 17:31:36 · 2761 阅读 · 0 评论 -
【数据结构--队列】
文章目录队列一、队列的定义二、链队三、链队的基本操作四、循环队列五、循环队列的基本操作六、总结队列一、队列的定义 队列和栈一样是一种操作受限的线性表,其特殊之处在于只允许在表的头部(即队头–front)进行删除,而在表的尾部(即队尾–rear)进行插入操作,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。队列的结构体如下图所示:二、链队 链队是指采用链式存储结构来实现的队列,通常链队用单链表来表示,如下图所示,一个原创 2022-05-17 22:37:34 · 523 阅读 · 0 评论 -
【数据结构--递归及其应用】
文章目录递归递归的定义递归的应用递归求累加和Fibonacci数列Hanoi问题总结:递归递归的定义递归即在运行的过程中调用自己构成递归需具备的条件:子问题需与原问题为同样的事,且更为简单不能无限制地调用本身,需有一个出口,化简为非递归状况处理递归的应用递归算法一般用于解决以下问题:数据的定义是符合递归规律(如Fibonacci数列)问题解法符合递归规律,即逐层求解(如Hanoi问题)以下列举了部分经典递归问题:递归求累加和该问题较为简单,就不过多赘述,代码如下:#inc原创 2022-05-12 17:57:29 · 425 阅读 · 1 评论 -
【数据结构--栈的应用--括号匹配】
文章目录括号匹配前言例如算法思想栈的定义及其操作括号匹配核心代码完整代码运行测试括号匹配前言括号匹配问题是较为经典的栈的应用了,在Leetcode和数据结构数组时常出现例如给定一个字符串,其包含( , ) ,{ , } , [ , ]以及数字,要求判断其括号是否匹配,即:左括号必须用相同类型的右括号闭合左括号必须以正确的顺序闭合实例 1:输入: "[2 + (1 - 3)] * 4"输出:1实例 2:输入:"( ) )"输出:0算法思想当遇到 ‘(’ ,‘[’原创 2022-05-11 01:31:18 · 3499 阅读 · 1 评论 -
【数据结构--栈的应用--计算多项式】
文章目录表达式求值总体思路代码实现表达式求值总体思路自左至右扫描表达式,若遇到操作数则压入操作数栈;遇到运算符,则需要比较其与运算符栈栈顶元素的优先级,若其优先级高于栈顶元素优先级则进栈,反之则取出栈顶运算符和操作数栈栈顶的连续两个操作数进行运算,并将结果存入操作数栈,然后继续比较该运算符与栈顶运算符的优先级。左括号压入运算符栈,右括号不压入运算符栈,取出运算符栈栈顶运算符和操作数栈栈顶的两个操作数进行运算,并将结果压入操作数栈,直到弹出左括号为止。代码实现初始化此处需创建两个栈,一个栈用于存放原创 2022-05-11 01:08:56 · 799 阅读 · 2 评论 -
【数据结构--栈的顺序存储结构】
文章目录栈的顺序存储结构栈的定义栈的初始化压栈操作弹栈操作返回栈顶元素返回栈的长度将栈清空完整代码测试结果总结栈的顺序存储结构栈的定义栈(stack)是限定仅在表尾进行插入和删除的线性表允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈。栈又称为先进后出的线性表,简称LIFO结构。栈的插入操作,叫做进栈,也称为压栈、入栈,如下图所示。栈的删除操作,叫做出栈,也称为弹栈,如下图所示。栈的结构定义:typedef struct CharSta原创 2022-05-11 00:58:27 · 1667 阅读 · 0 评论 -
【数据结构——链表应用:多项式求和】
文章目录链表的应用——多项式加法结构体定义初始化链表打印链表在尾部添加一个元素多项式加法完整代码及运行截图链表的应用——多项式加法结构体定义typedef struct LinkNode{ int coefficient; int power; struct LinkNode* next;} *LinkList, *NodePtr, Node;初始化链表// 初始化链表LinkList initLinkList(){ LinkList tempHeader原创 2022-05-05 22:37:01 · 2497 阅读 · 1 评论 -
【数据结构--静态链表】
文章目录前言一、静态链表的定义结构描述代码描述二、静态链表的基本操作初始化打印链表静态链表的插入静态链表的删除三、完整代码及运行截图完整代码如下:运行截图四、闵版(略改)前言 C语言的指针能十分方便的描述链表,但在一些语言,如Basic、Fortran等早期语言中由于没有指针,链表结构就不能用指针来描述,因此便出现了用数组来代替指针来描述单链表的方法。一、静态链表的定义结构描述 此处用于描述链表的数组由两个数据域组成,data和next。即数组的每个下标都对应一个data和一个next。其中,原创 2022-05-05 19:03:18 · 3098 阅读 · 0 评论 -
【数据结构--双链表】
文章目录双向链表双向链表的定义双向链表的存储结构双向链表的初始化双向链表的插入双向链表的删除寻找尾结点正向打印反向打印链表节点的读取测试运行截图完整代码闵版代码(略改)总结双向链表双向链表的定义什么是双向链表?双向链表顾名思义,就是链表由单向的链变成了双向链。双向链表(double linked list)是在单链表的每个结点中再设置一个指向其前驱结点的指针域。非空带头结点的双向链表双向链表的存储结构//双链表节点结构体typedef struct DoubleLinkNode{原创 2022-05-04 00:49:02 · 3269 阅读 · 4 评论 -
【数据结构--单链表】
文章目录单链表一、单链表的定义二、线性表的链式存储结构三、单链表的实现单链表存储结构代码初始化单链表打印单链表向单链表中添加元素单链表的读取单链表的插入单链表的删除单链表的整表删除完整代码运行截图闵版代码(略改)四、总结单链表一、单链表的定义 由于顺序表的插入删除操作需要移动大量的元素,影响了运行效率,因此引入了线性表的链式存储——单链表。单链表示意图二、线性表的链式存储结构 线性表的链式存储结构:线性表中数据元素(结点)在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理位置上不一定相原创 2022-04-30 00:20:31 · 1185 阅读 · 3 评论 -
【数据结构——顺序表】
文章目录1. 线性表2.1 线性表的定义2.2 线性表的抽象数据类型3.1 顺序表1. 顺序表的结构代码2. 初始化3. 输出顺序表元素4. 插入5. 删除6.定位7. 查找8. 清空列表9. 运行截图完整代码1. 线性表2.1 线性表的定义线性表(List):零个或多个数据元素的有限序列。2.2 线性表的抽象数据类型ADT 线性表(List)Data 线性表的数据对象集合为{a1,a2,……,an},每个元素的类型均为DataType。其中,除第一个元素a1外,每一个元素有且只有一个直接前原创 2022-04-26 01:30:42 · 562 阅读 · 0 评论