![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
文章平均质量分 94
本专栏记录了AcWing算法基础课第二章数据结构的听课笔记,包括单链表,双链表,栈,队列,单调栈,单调队列,KMP,Trie树,并查集,堆,哈希表等内容。
御用厨师
这里介绍不了我
展开
-
【数据结构】查找:顺序查找、折半查找、二叉排序树、平衡二叉树、B树、哈希查找
整理内容来源:zzu信息工程学院数据结构ppt本节讨论两类不同的查找表:静态查找表和动态查找表,给出在不同查找表上进行查找的不同算法和性能分析以及动态查找表的创建方法。1 查找的基本概念静态查找:基于线性表的查找动态查找:基于树的查找(二叉排序树、平衡二叉排序树、B-树和B+树)基于散列表的查找2 基于线性表的查找2.1 定义和分类基于线性表的查找主要是两部分:(索引顺序表用的不是很多)顺序查找(适用于两种存储结构)折半查找(有序表)注意区分 “有序” 和 “原创 2021-09-22 23:31:46 · 4503 阅读 · 0 评论 -
【数据结构】并查集
“并查集是面试中常问的问题,因为它有一定的思维含量,写出来却很优雅。” ——y总并查集是一种树型数据结构,它主要用于快速地支持两个基本操作(近乎O(1)):将两个不相交集合合并询问两个元素是否在同一个集合中并查集还可以支持的其他操作:拓展、维护额外信息关于并查集的引入,这里有一篇比较生动的文章可以参考:算法学习笔记(1) : 并查集1 基本原理及实现并查集往往用树的形式维护所有集合,在实现并查集时有以下几个基本问题:(p[x]为父节点)1.1 判断树根if(p[x] == x)原创 2021-09-18 22:45:40 · 191 阅读 · 2 评论 -
【数据结构】【哈希】字符串前缀哈希法
哈希表最大的作用是快速查找,在上一篇文章中(【数据结构】【哈希】哈希表的概念和算法实现)也给出了原创 2021-09-18 20:13:21 · 793 阅读 · 1 评论 -
【数据结构】【哈希】哈希表的概念和算法实现
在查找相关资料时,遇到了一篇写的很好的讲解哈希表的文章,完全没有接触过哈希表的可以先看这篇:来吧!一文彻底搞定哈希表!我来对两点稍作总结:设计一个好的哈希函数处理冲突的方式1 哈希表的概念哈希表是一种高效查找的数据结构,平均时空复杂度为O(1)。它的实现逻辑很简单:(eg.查找一个数x)找一个数x通过散列函数find()得出x应该在散列表h[]的存储位置若h[find(x)] == x说明找到了,find(x)为存储位置若h[find(x)] != x说明未找到,find(x)为x在原创 2021-08-31 23:40:01 · 874 阅读 · 0 评论 -
【数据结构】满二叉树、完全二叉树、堆的概念回顾,堆和堆排序的算法实现
本来只想整理两个内容:无映射关系的堆排序(eg.堆排序)有映射关系的堆排序(eg.模拟堆)但是在实现过程中,因为堆的本质是完全二叉树,所以有些地方需要结合完全二叉树的性质来理解。而完全二叉树又是根据满二叉树定义的,所以先回顾一下满二叉树和完全二叉树的基本概念及性质。1 基本概念及相关性质1.1 满二叉树定义:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为k,且结点总数是2k - 1 ,则它就是满二叉树。注:满二叉树的概念国内外定义是原创 2021-08-28 20:17:59 · 417 阅读 · 0 评论 -
【数据结构】Trie树(字典树)
1 基本概念Trie树(字典树),也叫单词查找树,是一种高效地存储和查找字符串集合的数据结构(不仅限于字符串)。在y总眼里这是一个非常简单的数据结构。它包括以下三个性质:根节点不包含字符,除根节点外每一个节点都只包含一个字符从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串每个节点的所有子节点包含的字符都不相同举个例子:假设Trie树存储abcdef, abdef, acef, bcdf, bcff, cdaa, bcdc,并通过该树查找aced, abcf, abcd。原创 2021-08-24 11:58:57 · 300 阅读 · 0 评论 -
【数据结构】KMP算法详解
有这样一个问题:给定一个字符串(模式串S):"BBC ABCDAB ABCDABCDABDE"我想知道其中是否包含(模板串P)"ABCDABD" ?1 两种字符串匹配思路1.1 暴力思路想象两把尺子,S是上面的长尺,P是下面的短尺,最开始两个尺子左端对齐,下面的短尺从左到右一位一位移动,直到匹配成功。比如:当下面的尺子对齐了上面的 ABCDAB,但是 D 对应的是空格,这时匹配失败,只能往右再一位一位移动1.2 KMP思路Knuth、Morris、Pratt三个学者提出这样一种方法:就这个例原创 2021-08-24 00:23:19 · 462 阅读 · 0 评论 -
【数据结构】栈、队列的算法实现以及单调栈、单调队列的应用
这两天托更就是因为单调队列那道题一直在想想想,一开始思考就容易走神……(简要概括菜+懒)1 栈1.1 定义栈遵循的原则是先进后出,用的很多了,这里给出栈的一些基本操作就好。1.2 基本操作...原创 2021-08-17 19:59:20 · 148 阅读 · 0 评论 -
【数据结构】单链表、双链表的算法实现
链表的算法实现有两种方式:动态链表和静态链表。首先回顾下动态链表:在学习数据结构时,我们常用结构体和指针实现动态链表:struct Node{ int val; // value Node *next; // 指向下一个结点的指针}动态链表用内存申请函数(malloc/new)动态申请内存,所以动态链表在链表的长度上没有限制(对比之下:静态链表需要预先分配地址空间大小。所以静态链表的初始长度一般是固定的)由于C++的动态分配速度很慢,不适合用动态链表处理,所以我们主要使用静态链表进行算法实现。原创 2021-08-17 17:40:47 · 264 阅读 · 0 评论