—— 数据结构 ——
文章平均质量分 79
数据结构
_之桐_
一万年太久,只争朝夕,为博学而专精。
展开
-
【计算机考研 - 英语】唐迟-考研英语阅读的逻辑笔记总结
文章目录考研英语阅读的十大黄金准则阅读的本质——逻辑关系一、句间逻辑——相同或相反二、段间逻辑——相同或相反三、题干信息之间的逻辑阅读的灵魂——中心思想一、首尾句串读法——普遍适用二、找中心词——最快最直观三、中心句——可根据形势判断阅读的方向——感情色彩一、首尾句串读法二、形容词&副词三、转折后四、情态动词之后阅读的规律——性温特点一、时间对比原则二、少数派原则三、不同单词、表达指代同一事物阅读的题型——有技可循一、主旨题二、细节题三、例证题四、态度题五、词汇/句子理解题六、推理题考研英语阅读的原创 2022-06-18 16:54:56 · 7511 阅读 · 0 评论 -
【数据结构】对排序的综合总结
排序可以分为以下几个大类:(1)插入排序:直接插入排序、折半插入排序和希尔排序(2)交换排序:快速排序和冒泡排序(3)选择排序:简单选择排序和堆排序(4)外部排序:归并排序和基数排序针对内部排序的效率总结:(1)时间复杂度为 O(nlogn) 的有:希尔排序、快速排序和堆排序(2)空间复杂度不为 O(1) 的有:快速排序,采用递归需要用到栈,所以 O(logn) ~ O(n)(3)对于稳定性来说,只有三种排序是稳定的:插入排序的前两种和冒泡排序(4)对于全局有序来说:选择排序和交换排序对原创 2022-03-22 12:57:12 · 1000 阅读 · 0 评论 -
数据结构学习路线 | 博文导航与思维导图(计算机考研+期末考试===> 一步到位)
【线性表】【数据结构-线性表】顺序表和链表(几种链表操作技巧+几种链表形式)【栈与队列】【数据结构-栈和队列】详解栈和队列(代码+STL+原理)【树】【数据结构-树】1.树与森林(树的遍历、树的存储方法、并查集的实现)【数据结构-树】2.二叉树遍历与线索二叉树(图解+代码)【数据结构-树】3.详解二叉排序树(理论+代码)【数据结构-树】4.图解平衡二叉树和哈夫曼编码(逐步演绎,一文读懂)【图】【数据结构-图】1.图的构造和遍历(基本理论+代码)【数据结构-图】2.多图详解最小生成树(多原创 2021-02-17 13:52:59 · 2534 阅读 · 7 评论 -
【数据结构-图】4.拓扑排序和关键路径(注解+原理)
一、拓扑排序1.1 基本知识有向无环图:一个有向图中不存在环,简称DAG图AOV网:用DAG图表示一个工程,其顶点表示活动,用有向边 <Vi,Vj><V_i, V_j><Vi,Vj> 表示活动 ViV_iVi 必须先于活动 VjV_jVj 进行的这样一种关系。在AOV网中,活动 ViV_iVi 是活动 VjV_jVj 的先行活动,活动 VkV_kVk 是活动 ViV_iVi 的先行活动,则活动 VkV_kVk 必是活动 VjV_jVj 的先原创 2021-02-16 16:53:54 · 2380 阅读 · 5 评论 -
【数据结构-图】3.图的最短路径的几种算法(图解+演绎)
最短路径最短路径的求取有两种经典的算法,分别是Dijkstra算法和Floyd算法这Dijkstra算法的算法思想是基于贪心算法的,也就是选择权值最小的边而Floyd算法的算法思想是根据动态规划,不断迭代取得的Dijkstra算法:从顶点出发,优先选择与连接两个顶点集合中的权值最小的边,求单源最短路径Floyd算法:求多源最短路径,不断迭代列表中的数据DijkstraDijkstra算法的核心是实时更新三个列表信息构成的 —— 这与最小生成树中的Prim算法相似第一个列表visited,是原创 2021-02-08 09:53:40 · 11175 阅读 · 2 评论 -
【数据结构-图】2.多图详解最小生成树(多图详解+实现代码)
最小生成树:这个定义有两个约束:最小和树对于树,从而引出以下三个最小生成树的特点在图中无环连接所有图中的点N个顶点,有N-1条边最小:指的是生成这棵树的边的权值之和最小最小生成树的求取有两种经典的算法,分别是Prim(普里姆) 算法和Kruskal(克鲁斯卡尔)算法这两种算法的算法思想都是基于贪心算法的,也就是选择权值最小的边,但是这两种算法的实现方法不同Prim(普里姆)算法:从顶点出发,优先选择与连接两个顶点集合中的权值最小的边Kruskal(克鲁斯卡尔)算法:直接选择权值最小的原创 2021-02-03 14:04:22 · 2071 阅读 · 4 评论 -
【数据结构-线性表】顺序表和链表(几种链表操作技巧+几种链表形式)
链表的操作链表中的插入(头插)void *insertNode(ListNode *head, ListNode *node) { node->next = head; head = node; return; }链表中的插入(尾插)void *insertNode(ListNode *head, ListNode *node) { ListNode *front = head; while(head) { // 备份前一个节点原创 2021-01-30 11:14:50 · 423 阅读 · 2 评论 -
【数据结构-栈和队列】详解栈和队列(代码+STL+原理)
一、栈的应用栈是一种先进后出(FILO)的数据结构1.1 栈的操作实现清空(clear):// 栈的清空操作就是把栈顶top置为-1void clear(){ top=-1;}// 清空栈,由于没有直接用于清空栈的元素,所以使用while和pop组合while(!st.size()) st.pop();获取栈内元素个数(size):// 由于栈顶指针top始终指向栈顶元素,而下标是从0开始的,所以栈内元素要把top+1int size(){ return to原创 2021-01-28 11:27:08 · 1905 阅读 · 3 评论 -
【数据结构-图】1.图的构造和遍历(基本理论+代码)
一、图的基本概念**图:**图G是一个有序二元组(V,E),其中V称为顶集(Vertices Set),E称为边集(Edges set),E与V不相交。它们亦可写成V(G)和E(G)。其中,顶集的元素被称为顶点(Vertex),边集的元素被称为边(edge)。有向图: 若E是有向边(也称弧)的有限集合时,则图G为有向图。弧是顶点的有序对,记为 <v,w><v,w><v,w> ,称为从顶点v到顶点w的弧。如上图中(a):G1=(V1,E1)∣∣V1={1,2,3}∣∣原创 2021-02-01 11:40:59 · 4411 阅读 · 3 评论 -
【数据结构-树】4.图解平衡二叉树和哈夫曼编码(逐步演绎,一文读懂)
一、平衡二叉树1.1 什么是平衡二叉树?规定在插入和删除二叉树结点时,要保证任意结点的左、右子树高度之差的绝对值不可以超过1平衡因子:结点左子树和右子树的结点高度差为该结点的平衡因子,也就是说平衡树的平衡因子只可能是-1,0,1如下图,结点53左子树高度为3,右子树高度为2,所以结点53的平衡因子为11.2 为什么需要平很二叉树?为了避免树的高度增长过快,降低二叉树的性能如下图,左边的图的最坏查找情况为O(n),而右边图的最坏查找情况为O(logn)1.3 平衡二叉树的机制?总原创 2021-01-26 13:50:47 · 2290 阅读 · 3 评论 -
【数据结构-树】3.详解二叉排序树(理论+代码)
二叉排序树二叉排序树的定义二叉排序树也称为二叉查找树。二叉排序树或者是一棵空树,或者是一棵具有如下特性的非空为茶树若左子树非空,则左子树所有结点关键字值均小于根结点的关键字值若右子树非空,则右子树所有结点关键字值均大于根结点的关键字值左右子树本身也分别为一棵二叉排序树总结来说:左子树结点值 < 根结点值 < 右子树结点值二叉排序树的查找步骤:若根结点关键字值等于目标值,返回true若根结点关键字值小于目标值 ,如果该根结点有左子树,则向左子树继续搜索;否则返回false原创 2021-01-24 15:17:24 · 1373 阅读 · 2 评论 -
【数据结构-树】2.二叉树遍历与线索二叉树(图解+代码)
一、二叉树的定义及其主要特征1.1 二叉树的概念二叉树是另一种树形结构,其特点是每个结点最多含两棵子树(也就是说,二叉树的度≤2)。二叉树是一种有序树,若将其左、右子树颠倒,则成为另一颗不同的二叉树。二叉树可以为空1.2 二叉树和度为2的有序树在这里要区分一个概念,也就是二叉树和度为2的有序树之间的区别。度为2的树至少有3个结点,而二叉树则可以是一颗空树度为2的有序树的孩子结点,左右次序是相对于另一孩子结点而言的,若某个结点只有一个孩子结点,则这个结点就无须区分其左右次序。但,二叉树无论原创 2021-01-22 13:08:45 · 1174 阅读 · 1 评论 -
【数据结构-树】1.树与森林(树的遍历、树的存储方法、并查集的实现)
树的定义树是一种数据结构,它是由 n(n>=1)n(n>=1)n(n>=1) 个有限结点组成一个具有层次关系的集合。把它叫做 “树” 是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树;树适合于表示具有层次的数据。树中的某个结点(除了根结点)最多只和上一层的一个结点(及其父结点)有直接关系,根结点没有直接上层结原创 2021-01-20 12:59:55 · 1599 阅读 · 2 评论 -
【数据结构-查找】4.五千字干活长文带你搞懂——B树和B+树
B树B树的定义(为什么需要B树)B树是一类树,也称为了 平衡的多路查找树。包括B树、B+树、B*树等,是一棵 自平衡的搜索树,它类似普通的平衡二叉树,不同的一点是B树允许每个结点有更多的子结点。B树是 专门为外部存储器设计的,如磁盘,它对于读取和写入大块数据有良好的性能,所以一般被用在 文件系统 及 数据库 中。传统用来搜索的平衡二叉树有很多,如 AVL 树,红黑树等。这些树在一般情况下查询性能非常好,但当数据非常大的时候它们就无能为力了。原因是 当数据量非常大时,内存不够用,大部分数据只能存放在磁原创 2021-01-18 11:23:01 · 1275 阅读 · 1 评论 -
【数据结构-查找】3.散列表详解
散列表的一些基本概念散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。计算映射位置的函数叫做 散列函数。存放记录的数组叫做 散列表。散列函数可能会把两个或两个以上的不同关键字映射到同一个散列表中的位置,这种情况叫做 冲突。一些散列函数计算的key值会使得大量元素出现在相邻的散列地址上,从而大大降低了查找效率,这种现象叫做 “聚集”(或堆积)装填因子,定义为一个表的装满原创 2021-01-16 13:27:42 · 4051 阅读 · 1 评论 -
【数据结构-查找】2.字符串(逐步演绎过程,超级详解KMP算法)
串的定义串(string)是有0~n个字符组成的有限序列,一般记为 $$S = 'a_1a_2…a_n'(n≥0)$$`S` 是字符串的名称,$a_i$ 可以是字母数字或其他字符。其中,串中任意连续的字符组成的子序列称为该串的 子串。字符在串中的位置 通常是该字符在序列中的序号子串在主串中的位置 指的是子串第一个字符在主串中的位置串的模式匹配子串的定位操作通常称之为串的模式匹配,它的目的是要获取子串在主串的位置。一般的,我们想到的是一种暴力破解的方法也就是说,从主串 S 的第原创 2021-01-14 14:35:25 · 619 阅读 · 2 评论 -
【数据结构-查找】1.通俗易懂讲解 —— 顺序-折半-分块查找
平均查找长度是所有查找过程中进行关键字的比较次数的平均值失败的平均查找长度:图画出来,补充为二叉树,其中补上的层数之和是分子,列表长度 len+1 是分母顺序查找顺序查找主要是用于线性表中的查找。在查找中,待查找数列有 无序数列 和 有序数列 两种class Solution{public: bool unorderSearch(Node* head, int value) { while(head) { if(head->val == value) {原创 2021-01-12 13:12:32 · 2880 阅读 · 1 评论 -
【数据结构-排序】5.九种排序设计分析
原创 2021-01-10 12:18:35 · 411 阅读 · 1 评论 -
【数据结构-排序】4.图解归并排序和基数排序
归并排序排序思想归并排序就是将两个或两个以上的有序表组合成一个新的有序表从代码结构来看,归并排序类似树的后序遍历 —— (参考快速排序,类似树的先序遍历)归并排序算法分析归并排序的时间复杂度是 O(nlogn),由于我采用的方式是下标元素的交换,所以没有用到辅助空间,因此空间复杂度是 O(1),同时也是 稳定排序, 由于它是一种分治思想,所以它的元素 不是全局有序 的。代码实现class Solution{public: int counter = 0; int ans[7] =原创 2021-01-08 14:18:11 · 390 阅读 · 1 评论 -
【数据结构-排序】3.图解选择排序两种实现(简单选择排序/堆排序)
简单选择排序(选择排序)排序思想首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。下面举个示例:第一轮排序,i = 0,j=1,min=23,tmp=23(tmp是用来记录当前需要调整位置的值),pos = 0(记录比min小的元素位置)。遍历,当 j=7 时,min=18,pos=7。然后将 nums[i] = nums[pos],j++,pos=i++第二轮排序,i原创 2021-01-06 14:07:35 · 637 阅读 · 1 评论 -
【数据结构-排序】2.图解交换排序两种实现(冒泡排序/快速排序)
冒泡排序(交换排序)排序思想比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。冒泡排序运用时需要注意的冒泡排序对于最坏的情况(严格递减/递增的数组),需要比较和移位的次数为 n(n-1)/2 ;对于最好的情况(严格递增/递减的数组),需要比较的次数是 n-1 ,需要移位的次原创 2021-01-03 13:40:22 · 508 阅读 · 1 评论 -
【数据结构-排序】1. 图解插入排序三种实现(插入排序/折半排序/希尔排序)
直接插入排序(插入排序)排序思想对于一个数组 A[0,n] 的排序问题,假设认为数组在 A[0,n-1] 排序的问题已经解决了。考虑 A[n] 的值,从右向左扫描有序数组 A[0,n-1] ,直到第一个小于等于 A[n] 的元素,将 A[n] 插在这个元素的后面。插入排序运用时需要注意的直接插入排序对于最坏的情况(严格递减/递增的数组),需要比较和移位的次数为n(n-1)/2;对于最好的情况(严格递增/递减的数组),需要比较的次数是n-1,需要移位的次数是0。插入排序算法分析直接插入排原创 2021-01-02 10:06:44 · 1761 阅读 · 3 评论