![](https://img-blog.csdnimg.cn/48f9b22fc3244b08b4df5979d4d532ea.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Data Structure
文章平均质量分 66
总结一些数据结构的知识
亿维数组
边写文章边学习
展开
-
一分钟学会使用二分各类模板
数的范围”:比如一段序列3 4 4 5 5 5 6。右边界即找:小于等于5的最后一个下标。左边界即找:大于等于5的第一个下标。4.找到最后一个小于等于x的元素。2.找到第一个大于等于x的元素。3.找到最后一个小于x的元素。1.找到第一个大于x的元素。5的下标范围为[3,5]原创 2023-11-09 23:19:26 · 127 阅读 · 2 评论 -
【Day10·超详细】数据结构 之 树和森林
本篇文章将会介绍树的三种存储方式(双亲表示(顺序)、孩子表示(顺序+链式)、孩子兄弟表示法(链式))、二叉树和森林的转换、树和森林的遍历,并会给出完整的伪代码供读者参考。原创 2022-07-15 13:26:03 · 227 阅读 · 2 评论 -
【Day9·超详细】数据结构 之 线索二叉树
本篇文章将会介绍线索二叉树的基本概念、二叉树的线索化、在线索二叉树中找前驱后继对于一个二叉树,我们可以对其进行遍历,遍历之后,会得到一个线性序列,此序列与线性表极为相似,即除了第一个和最后一个元素,每一个元素包含一个前驱和后继,那么对于任一一个结点,我们怎么去找到其前驱和后继呢?有一个较为复杂的方法是,用指针q指向目标元素,用指针p进行遍历,并且用pre一直指向p的前一个元素若p==q 则pre就为q的前驱若pre==q 则p就为q的后继如果引入线索二叉树,在原有二叉树结构:的基础上,加入标签ltag原创 2022-07-14 14:52:26 · 320 阅读 · 0 评论 -
【Day8·超详细】数据结构 之 二叉树性质、存储、四种遍历、构造二叉树
本篇文章将会简单介绍二叉树的很重要的基础内容,包括五大重要性质、存储方式、四种遍历代码与思想、先序遍历构造二叉树、遍历序列确定二叉树1.第i层最多有2的i-1次方个元素2.深度为k的树最多有2的k次方-1个元素3.二叉树度为0的结点个数为n0,度为2的结点个数为n2,则n0=n2+14.n个结点,完全二叉树,深度为:以2为底n的对数的向下取整加一或者是以2为底n的对数的向上取整5.i>1时:双亲为i/2的向下取整,右孩子2i,左孩子2i+1对于二叉树最常用的就是链式存储:而对于完全二叉树,顺序存储也是原创 2022-07-11 22:08:03 · 100 阅读 · 1 评论 -
【Day7·超详细】数据结构 之 KMP算法
本篇文章将会介绍串里面一个很重要而且比较难理解的算法——KMP算法上一篇文章,我们介绍了朴素模式匹配,时间复杂度最坏可以达到O(m*n),它的时间都花在了哪里呢?回溯。在这个算法里面,每一轮的比较之后,会发生两种回溯:i的回溯:k++;i=k;j的回溯:j=1;但实际上,有些回溯是没有必要的KMP算法的重点就是解决:假设i永远不回溯,当j在第j个位置匹配失败时,j最好的方案是回溯到哪个位置。J的回溯本质是T的后移比如主串: a b a b & # # # # #模式串:a b a b a&表示匹配失败原创 2022-07-11 10:57:25 · 102 阅读 · 0 评论 -
【Day7·超详细】数据结构 之 串的存储与基础操作(包含朴素模式匹配算法(BF))
本篇文章将会介绍串的顺序存储方式以及基本操作,包括:串赋值操作、串复制操作、串的判空、串求长度、清除串、销毁串、拼接串、找子串、比较串和最重要的串的模式匹配(定位串),对于模式匹配,此篇仅介绍BF算法,KMP算法将在下一节进行详细说明。对于串的顺序存储,我们可以想到多个方案,第一个就是用字符数组从下标0开始存储串,在字符数组最后一个位置存放串的长度,第二个是下标0位置不存储串,在下标0位置放串的长度,这样可以保证下标与字符位置的统一,但局限性是由于是char类型,所以能表示的长度仅有2的8次方(即0--25原创 2022-07-10 10:24:58 · 413 阅读 · 0 评论 -
【Day6·超详细】数据结构 之 栈的应用 迷宫问题详解(包含详细举例)
这篇文章将会非常详细介绍如何用栈去简单地找一个迷宫的路径目录导读迷宫准备工作超详细举例完整代码 这是一个迷宫,如果想让计算机去找一条从起点到终点的路径,通常利用“穷举求解”,先到达A,往下走到B,再到D,再到H,发现没有路了,回溯到D,再到I,没有路了回溯到D,再到J,没有路了,回溯到D再回溯到B,再到K......,最终回溯到A,再经过几次“撞墙”,终于到达终点。通过这个简单的例子,可以看出,完成迷宫核心的思想是“回溯”,那么我们如何去保存之前走过的路径呢?由于回溯的起点是回溯前路径的终点,所以最好的办法原创 2022-07-09 10:24:02 · 4330 阅读 · 2 评论 -
【Day5·超详细】数据结构 之 栈的应用:表达式求值问题
本篇文章将会介绍栈的一个相对复杂的应用——表达式求值,将会包含完整的C语言代码以及测试图,代码完全手打,若存在不足还请指出。表达式求值是程序设计语言编译中的一个最基本的问题,它的实现是栈应用的又一个典型例子,这里介绍一种简单直观、广为使用的算法,通常称为“算符优先法”。对于一个表达式的求解,我们要依照四则运算的法则去将其翻译成计算机能够执行的一个个步骤。比如4+2*3-10/5其运算顺序应该为4+6-10/5——4+6-2——10-2——8算符优先法就是根据这个运算优先关系的规定来实现对表达式的编译或者解释原创 2022-07-07 14:16:52 · 1032 阅读 · 4 评论 -
【Day4·超详细】数据结构 之 栈的简单应用
本篇文章将会介绍三个栈的简单应用:进制转换、括号匹配的检验、汉诺塔问题。这三个应用总体来讲比较简单,在这一篇之后,再详细讲解栈应用的两个硬骨头——表达式求值和迷宫问题本篇文章将包含完整的C语言代码和效果测试图,可以自行复制进行测试!十进制数转换为其它进制数是一个常见的问题,在手算的时候,一般采用不断取余、最后倒过来输出余数的方案,这就体现了先进后出的思想,如果设置一个栈,每取余一次就入栈,最后循环出栈,就可以实现这个效果。所用的函数有初始化栈、入栈、出栈、栈判空(最后出栈的时候要用)下面给出C语言代码原创 2022-07-05 22:00:30 · 320 阅读 · 0 评论 -
【Day4·超详细】数据结构 之 循环队列
本篇文章将会介绍循环队列的类型定义,以及常用的操作(初始化、出队、入队......),部分函数写的时候还发现了一些问题,在对应部分也有补充探究,同时,文章将会包含完整的C代码以及相关效果的测试图,可以直接复制,并进行自行测试。我们知道,如果仅仅像顺序栈一样去把队头队尾指针指向数组的首地址然后再进行相关的操作是不行的。因为栈的栈底指针是不会动的,入栈出栈仅在栈顶进行,而在队列当中队头队尾指针都是向上移动的,这就会导致下面元素的浪费,一个巧妙的办法就是将顺序队列臆造为一个环形的空间,如图,称之为循环队列。 在循原创 2022-07-05 12:46:35 · 332 阅读 · 0 评论 -
【Day4·超详细】数据结构 之 链队列的实现
昨天没写文章,今天加罚几篇 T^T本篇文章首先将会链表、链栈、链队进行区分总结,然后将会总结链队列的类型定义,以及常用的操作(初始化、出队、入队......),部分函数写的时候还发现了一些问题,在对应部分也有补充探究,同时,文章将会包含完整的C代码以及相关效果的测试图,可以直接复制,并进行自行测试。 数据域打阴影表示此结点的数据域无意义,比如在单链表中,此结点就是头结点链队列和链栈是一样的,也是先定义链表结点,再定义一个含两个链表结点指针类型的成员的结构体即最终的队列的定义,如下所示下面依次介绍其函数原创 2022-07-05 10:32:20 · 135 阅读 · 2 评论 -
【Day3·超详细】数据结构 之 链栈的基本实现
本篇文章将会对链栈进行简单介绍,包括其类型定义和基本功能实现(入栈、出栈、取栈顶......)部分函数写的时候还发现了一些问题,在对应部分也有补充探究,同时,文章将会包含完整的C代码以及相关效果的测试图,可以直接复制,并进行自行测试。链栈,实际是部分功能受限(LIFO)的链表,定义一个链栈,我们分为两个部分,第一个部分就是定义链表结点,第二个部分定义栈顶栈底两个指针。刚开始让这两个指针指向不含数据的结点,当有元素入栈的时候,栈底指针保持指向初始那个顶点,向上移动栈顶指针下面对链栈的基本操作函数进行一一原创 2022-07-03 22:14:18 · 316 阅读 · 0 评论 -
【Day3·超详细】数据结构 之 顺序栈的基本实现
本篇文章将会对顺序栈进行简单介绍,包括其类型定义和基本功能实现(入栈、出栈、取栈顶......)部分函数写的时候还发现了一些问题,在对应部分也有补充探究,同时,文章将会包含完整的C代码以及相关效果的测试图,可以直接复制,并进行自行测试。顺序栈,即栈的顺序存储结构是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。通常top==0代表空栈。非空栈中的栈顶指针始终在栈顶元素的下一个位置上。给出顺序栈的定义:为了方便到时候去更新空间,在此进行宏定义原创 2022-07-03 17:42:43 · 308 阅读 · 0 评论 -
【Day2·超详细】数据结构 之 线性表链式存储
本篇文章将会总结单链表的基本操作(初始化,插入,删除......)、进阶操作(排序,去重,翻转,有序表的拼接......)进行介绍,并附加完整的c代码和测试图。代码完全自制手打,可以随便copy,发现问题可以在评论区说哦注意所有的单链表都有头结点!单链表的结构:单链表基本函数汇总,以及测试效果图,用的是C语言代码,可以直接复制自行测试! 去重:刚开始的时候,用指针p指向链表第一个元素,让Phead->next指向空,这一步实际是把链表一分为二了,再用一个q指向包含头结点的那部分的第一个元素。然后进行原创 2022-07-02 17:24:35 · 201 阅读 · 2 评论 -
【Day1·超详细】数据结构 之 线性表顺序存储
从今天开始,我想要把数据结构从头开始更加全面,深入地学习一遍,为了起到督促作用,每天都会发布一篇博客记录当天学习的专题,学习的侧重点在于算法思想和代码实现,而比较轻于枯燥的概念(因为很多我也理解不动,说出来怕误导他人)废话不多说,进入今天的正题——线性表我们先看顺序存储结构的线性表,顺序存储结构的实质就是利用数组实现,先去用typedef 定义一个结构体,有两种定义方式: 第一种是动态的数组,其长度是可以变化的,如果内存不够用,可以使用realloc进行重新地分配,第二个刚开始就已经确定了线性表的总长度为M原创 2022-07-01 18:15:00 · 279 阅读 · 0 评论 -
【数据结构实验】简单打印二叉树超详细讲解(含二叉树每一个元素所在层数的算法和求二叉树深度的代码)
问题描述打印二叉树结构(设计性实验) 问题描述 按凹入表形式横向打印二叉树结构,即二叉树的根在屏幕的最左边,二叉树的左子树在屏幕的下 边,二叉树的右子树在屏幕的上边。例如:测试数据 由读者依据软件工程的测试技术自己确定。注意测试边界数据,如空二叉树。实验分析首先观察例子中打印的二叉树的排版格式,如果把图片顺时针旋转90度,就能看到非常直观的二叉树的排版,现在需要从中找到规律,从而用代码将其实现。经过观察发现:打印出的二叉树中,每一行可以看成只有一个元素,最.原创 2022-05-22 13:04:30 · 2516 阅读 · 0 评论 -
【数据结构入门实验】二叉树的建立和遍历完整代码
实验内容:1.二叉树的建立与遍历(验证性实验) 问题描述 建立一棵二叉树,并对其进行遍历(先序、中序和后序),打印输出遍历结果。 基本要求从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立),并采用递归 算法对其进行遍历(先序、中序和后序),将遍历结果打印输出。 测试数据 ABC□□DE□G□□F□□□(其中□表示空格字符),则输出结果为:先序为ABCDEGF,中序为 CBEGDFA, z 后序为CGBFDBA。实验分析:实验要求原创 2022-05-22 11:21:40 · 3747 阅读 · 6 评论 -
【数据结构入门实验C语言版】城市链表
实验内容描述:2.城市链表(设计性实验) 问题描述 将若干城市的信息存入一个带头结点的单向链表。结点中的城市信息包括城市名、城市的位置坐 标。要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。 基本要求 (1) 给定一个城市名,返回其位置坐标。 (2) 给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。 测试数据 由读者依据软件工程的测试技术自己确定。注意测试边界数据简述:此次实验实际上就是要用到上一篇写的单链表,但实际上比那原创 2022-05-22 10:41:09 · 3003 阅读 · 5 评论 -
(数据结构入门实验C语言版)单向链表的建立与操作,包含去重排序颠倒等操作
一.前言对于单向链表,除了常规的建立、插入结点、删除结点、遍历等,此处加入了排序、去重、颠倒等较高级的功能,代码放在下面,比较好理解,可以直接copy运行一下的。实际做实验的时候用不到这么多功能,可以自选几个去用。在这简单对几个函数进行一下说明:去重:刚开始的时候,用指针p指向链表第一个元素,让Phead->next指向空,这一步实际是把链表一分为二了,再用一个q指向包含头结点的那部分的第一个元素。然后进行循环,每循环一次,p往右走一步,直到走到那部分的尽头。每次循环都做什么呢?每次循环都要检原创 2022-05-22 10:24:42 · 394 阅读 · 0 评论 -
(极易错)链表指针函数传递问题,含线性表入门实验--约瑟夫环问题c语言代码
这个问题是在一次尾插法创建单链表的时候发现的。以往写这个函数CreatLinkList()总是习惯不给它传入参数,然后用一个链表指针作为返回值,在主函数中接受,即LinkList CreatLinkList(void)。然后想了一下,我在写其它单链表函数比如插入删除的时候总是用布尔类型作为返回值,直接让链表头指针L传入函数中,比如:bool ListInsert(LinkList L,int i,int e),也总是能够成功。于是我就这样写了一次创建链表的函数:Status CreatLi原创 2022-05-18 16:12:03 · 860 阅读 · 1 评论 -
特殊矩阵的压缩存储(详细版 通俗易懂 含c语言稀疏矩阵十字链表代码 )
前言此文章是本人第一篇博客,目的在于巩固过去所学的知识,同时可能会给大家带来一丝丝帮助,但由于没有经验加上本人能力极其有限,文章中可能存在不足之处,还请读者能够指正(`・ω・´)。这篇文章首先会介绍矩阵压缩存储和特殊矩阵的基本概念,然后将会比较详细地说明几种特殊的矩阵:对称矩阵、三角矩阵、带状矩阵(三对角矩阵)、稀疏矩阵的压缩存储的策略,包括定量计算和十字链表的c语言代码,让我们开始吧!注意,本文所用数组下标均为从0开始正文一.基本概念压缩存储在一个矩阵中,若多个数据的值相同,为原创 2022-05-14 17:07:18 · 5093 阅读 · 6 评论