数据结构和算法系列
文章平均质量分 71
包含基本的数据结构和算法知识
Faith_xzc
PowerData联合创始人,某数据库在职,对Java和大数据感兴趣,欢迎大家交流学习!
展开
-
卷进大厂系列之LeetCode刷题笔记:颠倒字符串里的单词(中等)
本文介绍了力扣中颠倒字符串中的单词题目,包含了算法讲解。学算法,刷力扣,加油卷,进大厂!欢迎交流讨论!原创 2022-05-03 05:00:00 · 3534 阅读 · 82 评论 -
卷进大厂系列之LeetCode刷题笔记:反转字符串II(简单)
本文介绍了力扣中反转字符串II题目,包含了算法讲解。学算法,刷力扣,加油卷,进大厂!欢迎交流讨论!原创 2022-04-27 05:30:00 · 2243 阅读 · 36 评论 -
卷进大厂系列之LeetCode刷题笔记:反转字符串(简单)
本文介绍了力扣中反转字符串题目,包含了算法讲解。学算法,刷力扣,加油卷,进大厂!欢迎交流讨论!原创 2022-04-15 05:30:00 · 2180 阅读 · 62 评论 -
卷进大厂系列之LeetCode刷题笔记:四数之和(中等)
本文介绍了力扣中四数之和题目,包含了算法讲解。学算法,刷力扣,加油卷,进大厂!欢迎交流讨论!原创 2022-04-12 05:45:00 · 1974 阅读 · 75 评论 -
卷进大厂系列之LeetCode刷题笔记:三数之和(中等)
本文介绍了力扣中三数之和题目,包含了算法讲解。学算法,刷力扣,加油卷,进大厂!欢迎交流讨论!原创 2022-04-08 05:45:00 · 1738 阅读 · 51 评论 -
卷进大厂系列之LeetCode刷题笔记:四数相加 II(中等)
本文介绍了力扣中四数相加Ⅱ题目,包含了算法讲解。学算法,刷力扣,加油卷,进大厂!欢迎交流讨论!原创 2022-04-05 05:45:00 · 1040 阅读 · 37 评论 -
卷进大厂系列之LeetCode刷题笔记:长度最小的子数组(中等)
本文介绍了力扣中长度最小的子数组题目,包含了算法讲解。学算法,刷力扣,加油卷,进大厂!欢迎交流讨论!原创 2022-01-19 09:50:29 · 1429 阅读 · 72 评论 -
卷进大厂系列之LeetCode刷题笔记:二分查找(简单)
本文介绍了力扣中二分查找的一道题目,包含了算法讲解。学算法,刷力扣,加油卷,进大厂!欢迎交流讨论!原创 2022-01-09 21:13:02 · 1798 阅读 · 47 评论 -
两个有序单链表的合并排序算法
ListList MergeList(LiskList La, LinkList Lb){ Lnode *pa = La->next; Lnode *pb = Lb->next; if(Lb->next == null) return La; if(La->next == null) return Lb; LinkList Lc = (LinkList)malloc(sizeof(Lnode)); Lnode *r = Lc; .原创 2020-06-01 11:44:31 · 5754 阅读 · 0 评论 -
查找(包括顺序查找和折半查找)
顺序查找顺序查找又叫线性查找,主要用于线性表中的查找。顺序查找通常情况下分为对一般无序线性表的查找和对按关键字有序的顺序表的查找。下面进行比较讨论;1.一般线性表的查找作为一个直观的查找方法,其基本思想就是从线性表的一端开始,逐个检查关键字是否满足给定的条件,若满足给定的条件,则查找成功,返回在该线性表中的位置,若已经查找到线性表的另一端还是没有找到符合给定的条件,则返回查找失败的信息;...原创 2020-04-20 10:58:25 · 1311 阅读 · 0 评论 -
图的遍历
定义图的遍历就是指从图中的某一个顶点出发,按照某种搜索方法沿着图中的边对图中所有顶点访问一次且仅访问一次。图的遍历方法主要有两种:广度优先搜索和深度优先搜索【注】树是一种特殊的图,所以树的遍历也可以算特殊图的遍历1.广度优先搜索广度优先搜索(BFS)类似于二叉树的层序遍历算法。基本思想是:首先访问起始顶点v,接着由v出发,依次访问v的各个未访问过的邻接顶点w1w_1w1,w2w_2w2...原创 2020-04-13 11:44:53 · 702 阅读 · 0 评论 -
图的四种存储方法
图的定义图G是一个有序二元组(V,E),其中V称为顶集(Vertices Set),表示图G中顶点的有限非空集;E称为边集(Edges set),表示图G中顶点之间的关系(边)集合。E与V不相交。【注】线性表可以是空表,树可以是空树,但是图不可以是空图,也就是说图不可以一个顶点没有,图的顶点集V一定非空,但是边集E可以为空。图的存储1.邻接矩阵法所谓邻接矩阵就是用一个一维数组存储图中的顶...原创 2020-04-09 09:23:25 · 9685 阅读 · 2 评论 -
平衡二叉树
定义为了避免树的高度增长过快,降低二叉排序树的性能,规定插入和删除二叉树结点时,要保证任意结点的左右子树高度差的绝对值不超过1,我们将这样的树称为平衡二叉树,简称平衡树(又称AVL树);定义结点左子树与右子树的高度差为该结点的平衡因子;则平衡二叉树结点的平衡因子的值只能为-1,0或者1;那根据以上,我们可以将平衡二叉树定义为一颗空树或者具有以下性质的二叉树:1、左子树和右子树都是平衡二叉树;...原创 2020-04-03 00:04:08 · 358 阅读 · 0 评论 -
二叉排序树
定义二叉排序树(又称二叉查找树)或一棵空树,或者是具有下列性质的二叉树:1、若左子树不空,则左子树上所有结点的值均小于它的根结点的值;2、若右子树不空,则右子树上所有结点的值均大于它的根结点的值;3、左、右子树也分别为二叉排序树;根据二叉排序树的定义,左子树结点值 < 根结点值 < 右子树结点值,所以对二叉排序树进行中序遍历,可以得到一个递增的有序序列。二叉排序树的操作1...原创 2020-03-27 12:41:38 · 1352 阅读 · 0 评论 -
线索二叉树
定义对于n个结点的二叉树,在二叉链存储结构中有n+1个空链域,利用这些空链域存放在某种遍历次序下该结点的前驱结点和后继结点的指针,这些指针称为线索,加上线索的二叉树称为线索二叉树。规定:若无左子树,令 lchild 指向其前驱结点;若无右子树,令 rchild 指向其后继结点。如下图所示,除此之外,还需要增加两个标志域标识指针域是指向左(右)孩子还是前驱(后继);其中,标志域的含义如下:...原创 2020-03-24 00:14:14 · 690 阅读 · 0 评论 -
二叉树的遍历(包括递归和非递归方法)
二叉树的遍历遍历二叉树,就是按一定的某条搜索路径走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,每个结点都有可能有两棵子树,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。递归遍历由二叉树的递归定义可知,遍历一棵二叉树便要决定对根节点N,左子树L和右子树R的访问顺序,所以按照先遍历左子树后遍历右子树的原则,常见的遍历次序有先序(N...原创 2020-03-18 23:28:35 · 466 阅读 · 0 评论 -
二叉树
二叉树的定义二叉树是另一种树形结构,其特点就是每个结点至多有两棵子树(即二叉树中不存在度大于等于2的结点),且二叉树的子树有左右之分,其次序是不能颠倒。所以二叉树也是以递归的形式定义。二叉树是 n (n>=0)个结点的集合;【注】n=0时为空二叉树;一些基本概念:树的结点(node):包含一个数据元素及若干指向子树的分支;孩子结点(child node):结点的子树的根称为该结点的...原创 2020-03-17 00:00:24 · 432 阅读 · 0 评论 -
串的模式匹配
【注】致力于讲知识讲明白!不懂请留言!定义串的模式匹配是指子串的定位操作,也就是求子串(模式串)在主串中的位置;1.暴力模式匹配(BF)算法初始化两个数组下标,循环比较两个字符串的字符是否相等,相等则下标同时进一,比较下个元素直到匹配成功;不相等则使匹配的串下标回退到 0,被匹配的串下标回退到比较的初始位置+1,循环往复。暴力模式匹配(BF)算法如下:int index(SString...原创 2020-03-13 22:53:03 · 2973 阅读 · 0 评论 -
数据结构-串
【注】致力于讲知识讲明白!不懂请留言!串的定义和实现串的定义串(string)(或字符串)是由零个或多个字符组成的有限序列,一般记为 S = ‘a1a2…an’ (n>=0)其中,S是串的名,用单引号括起来的字符序列是串的值;aia_{i}ai(1≤i≤n)可以是字母、数字或其他字符;串中字符的数目 n 成为串的长度。零个字符的串称为空串(null stri...原创 2020-03-11 17:37:31 · 494 阅读 · 0 评论 -
特殊矩阵的压缩存储
【注】致力于将知识写明白!不懂请留言!基本概念压缩存储指为多个值相同的元素只分配一个存储空间,而对于零元素不分配空间,其目的就是节省存储空间;特殊存储指具有很多相同的元素或者零元素,并且这些元素的分布具有一定的规律;常见的一些特殊矩阵有:对称矩阵,上(下)三角矩阵和对角矩阵。特殊矩阵的压缩存储方法:找出特殊矩阵中值相等的元素的分布规律,把那些呈现规律性分布的,值相同的多个矩阵元素压缩存...原创 2020-03-05 19:21:55 · 5875 阅读 · 10 评论 -
队列
队列的基本概念队列简称队,队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头,如下图:【注】1.队列的操作特性为先进先出(First In First Out,FIFO);2.不含任何元素的空表为空队列像栈一样,队列也是有顺序和链...原创 2020-02-29 18:03:51 · 518 阅读 · 0 评论 -
栈
栈的基本概念栈的定义栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。如下图:【注】1.空栈是不含任何元素的空表。2.栈是先进先出的栈的顺序结构栈可以看成一个操作受限的线性表,类似于线性表,它也有对应的两种存储方式。1.顺序栈的实现采用顺序存储的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈...原创 2020-02-29 12:03:00 · 345 阅读 · 0 评论 -
线性表和链表的比较
区别1、存取(读写)方式顺序表可以顺序存取,也可以随机存取;链表只能从表头顺序存取元素。例如:在第 i 个位置上执行存取操作,顺序表只需访问一次,而链表则需要从表头开始依次访问 i 次。2、逻辑结构与物理结构采用顺序存取时,逻辑结构上相邻的元素,对应的物理存储位置也是相邻的;而采用链式存储时,逻辑结构上相邻的元素,物理存储位置则不一定相邻,对应的逻辑关系也是通过指针链接来表示的。3、查...原创 2020-02-26 18:24:07 · 2764 阅读 · 3 评论 -
线性表的链式表示——循环链表
循环单链表将单链表中的尾节点的指针域由NULL改为指向头结点,使整个单链表形成一个环,这种头尾相接的单链表就可以称之为**单循环链表,简称循环链表(circular linked list)。循环单链表和单链表的区别是:表中最后一个结点的指针不是NULL,而是改成了指向头结点,从而形成一个环;循环单链表的逻辑结构图:在循环单链表中,表尾结点 *r 的 next 域指向 L,故表中没有指针...原创 2020-02-25 17:29:24 · 395 阅读 · 0 评论 -
线性表的链式表示——双链表
定义双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表(解决了单链表只能从头结点依次访问顺序向后遍历的问题)双链表中结点的类型表述如下:typedef struct DNode{ //定义双链表结点类型 EleType data; ...原创 2020-02-22 18:45:31 · 465 阅读 · 0 评论 -
线性表的链式表示——单链表
单链表定义线性表的链式存储又称单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。每个链表的结点,除存放元素自身的信息之外,还需要存放一个指向其后继结点的指针。即单链表的结构分为两部分,其中data为数据域,用来存放元素;next为指针域,用来存放其后继结点的地址。单链表中结点类型的描述如下:typedef struct LNode{ //定义单链表结点类型 ElemeTyp...原创 2020-02-17 09:52:25 · 871 阅读 · 0 评论 -
线性表的顺序存储
知识框架线性表定义线性表是具有相同数据类型的n(n ≥ 0)个数据元素的有限序列,其中n为表长,当n = 0 时,线性表是一个空表,若用L命名线性表,则其一般表达式为:L = (a₁,a₂,a₃,···,a)...原创 2020-02-10 08:15:44 · 1599 阅读 · 0 评论