![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 52
旧巷小新
这个作者很懒,什么都没留下…
展开
-
数据结构之链表和跳跃表
文章目录1.链表2.跳跃表2.1 跳跃表的图示2.2 跳跃表插入与删除2.3 跳跃表总结2.4 跳跃表VS二叉排序树2.5 跳跃表VS红黑树1.链表2.跳跃表2.1 跳跃表的图示图示:基于这种方法,对于具有n个元素的链表,我们可以采取logn + 1层指针路径的形式,就可以实现在O(logn)的时间复杂度内,查找到某个目标元素,这种数据结构,我们也称之为跳跃表。跳跃表算是链表的变形,只是它具有二分查找的功能。2.2 跳跃表插入与删除随着对跳跃表进行插入/删除结点的操作,那么跳跃表结原创 2021-04-05 16:24:49 · 333 阅读 · 0 评论 -
数组结构之数组变式
1.差分数组:对数组a而言,数组a的l-r区间每一个数加上一个数之后,差分数组就会发生变化,这个影响从l_r+1个数,为了解决这个问题,我们可以d[l]+a,dp[r+1]-a;从而达到左右两个数即可维护一段区间。题目:路由器这道题就是用差分数组解决的。———————————————————————————————————...原创 2020-07-18 20:01:08 · 94 阅读 · 0 评论 -
数据结构之树状数组
树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于数组的单点修改&&区间求和.(1).树状数组的核心内容:int low_bit(int x){ return x&(-x);}(2).树状数组的单点更新:int add(int pos,int y){ for(int i=pos;i<=n;i=i+low_bit(i)){ crr[i]=crr[i]+y; }}(3)树状数组的区间查询:int getsum(int x){ int原创 2020-10-16 10:09:27 · 92 阅读 · 0 评论 -
数据结构之哈希表
文章目录1.哈希表定义1.哈希表定义哈希表是根据键值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。...原创 2021-03-18 16:26:00 · 256 阅读 · 0 评论 -
数据结构之字符串、栈与队列
代码:分析连接#include<bits/stdc++.h>using namespace std;bool cmp(char a,char b){ //比较优先级 map<char,int> mapp; mapp['(']=mapp[')']=0; mapp['+']=mapp['-']=1; mapp['*']=mapp['/']=2; return mapp[a]>mapp[b];}int fun(vector<string> arr,原创 2020-08-01 14:38:38 · 394 阅读 · 0 评论 -
数据结构之二叉树
1.二叉树的存储:二叉树的存储结构2.二叉树的创建:(1)交互式问答方式这种方式是最直接的方式,就是先询问用户根节点是谁,然后每次都询问用户某个节点的左孩子是谁,右孩子是谁。第一种代码如下(其中字符’#'代表空节点):#include<bits/stdc++.h>using namespace std;typedef struct BTNode{ char data; struct BTNode *lChild, *rChild;}BTree,*Positio原创 2020-07-24 20:32:57 · 112 阅读 · 0 评论 -
数据结构之二叉排序树
核心代码:#include<bits/stdc++.h>using namespace std;typedef struct BTree{ int key,value; struct BTree *lchild,*rchild; BTree(int key,int value):key(key),value(value),lchild(NULL),rchild(NULL){}}Node;class UF{ private: int size=0; Node *root=原创 2020-08-01 16:11:37 · 380 阅读 · 0 评论 -
数据结构之平衡二叉树树
文章目录1.AVL1.1 AVL树的定义1.AVL1.1 AVL树的定义原创 2021-03-17 00:18:26 · 124 阅读 · 0 评论 -
数据结构之红黑树
文章目录(一)红黑树的诞生背景(二)红黑树的特征(三)红黑树的三种操作:左旋、右旋和变色。(一)红黑树的诞生背景二叉排序树存在的问题:二叉排序树会因为多次插入而导致不平衡。因此红黑树是为了解决二叉排序树存在的问题。由此可知道,红黑树是一种自平衡的二叉排序树。(二)红黑树的特征1.节点是红色或黑色。2.根节点是黑色。3.每个叶子节点都是黑色的空节点(NULL节点)。4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)5.从任一节点到其每个叶子的所有路径都原创 2020-12-05 09:45:50 · 95 阅读 · 0 评论 -
数据结构之B树和B+树
文章目录1.B+树和B树比较1.B+树和B树比较原创 2021-03-05 11:13:49 · 57 阅读 · 0 评论 -
数据结构之树的比较
文章目录1.2.红黑树查找和哈希查找的效率区别,哈希抽个图1.2.红黑树查找和哈希查找的效率区别,哈希抽个图3.场景:给1亿个字符串,要查找,怎么实现,用红黑树还是哈希原创 2021-03-06 00:44:01 · 223 阅读 · 0 评论 -
数据结构之并查集
1.并查集的核心代码:#include<bits/stdc++.h>using namespace std;class UF{ private: int num; int *vec; int *sz; public: UF(int x) { vec=new int[x]; sz=new int[x]; this->num=x; for(int i=0;i<x;i++) vec[i]=i; for(int i=0;i<x原创 2020-08-01 16:11:52 · 179 阅读 · 0 评论 -
数据结构之区间树
区间树 (Interval tree), 是一种二叉搜索树。它将一个区间划分成一些单元区间(即单个数据),每个单元区间对应一个叶节点,非叶节点表示其所代表的子树对应的子区间。区间树中,每个节点的子节点分别表示它的左右半区间。对于每一个非叶节点 ,设其对应区间为[a, b],它的左子树表示的区间为[a, (a+b)/2], 右子树表示的区间为[(a+b)/2+1, b](1)区间树的建立核心代码://包括begin,不包括endvoid build(int node,int begin,int end)原创 2020-09-07 17:25:00 · 1278 阅读 · 1 评论 -
数据结构之最小生成树
Kruskal算法实现:使用了并查集进行优化查找,使得时间复杂度降低#include<bits/stdc++.h>using namespace std;int *father;struct Node{ int x,y; int w;};bool cmp(Node a,Node b){ return a.w<b.w;}int find(int x){ while(x!=father[x]){ x=father[x]; } return x;}bool原创 2020-08-02 20:04:34 · 165 阅读 · 0 评论 -
数据结构之最短路径
1.有向图单源点的最短路径(无向图代码几乎相同,区别仅仅在于边)Dijkstra算法的思想1、设置两个顶点集S和T,集合S中存放已经找到最短路径的顶点,集合T中存放着当前还未找到最短路径的顶点;2、初始状态下,集合S中只包含源点V1,T中为除了源点之外的其余顶点,此时源点到各顶点的最短路径为两个顶点所连的边上的权值,如果源点V1到该顶点没有边,则最小路径为无穷大;3、从集合T中选取到源点V1的路径长度最短的顶点Vi加入到集合S中;4、修改源点V1到集合T中剩余顶点Vj的最短路径长度。新的最短路径长原创 2020-10-16 17:53:21 · 2110 阅读 · 0 评论 -
数据结构之排序
核心代码:#include<bits/stdc++.h>using namespace std;class Heap{ private: string *arr=NULL; int N; void swim(int k){ while(k>1){ if(arr[k]>arr[k/2]) swap(k,k/2); else break; k=k/2; } } void skin(int k){ while(原创 2020-08-01 16:11:22 · 227 阅读 · 0 评论 -
数据结构之滑动窗口
滑动窗口思想可以说是来自双指针的左右指针,滑动窗口通常用来求连续序列的相关问题,比如说求最长的连续不重复的子序列,生成一定数组长度中的元素最大值等等相关问题。1.最长的连续不重复子串:题目来源:找到字符串的最长无重复子串的长度求最长子串的长度,符合滑动窗口中要求的连续子序列的要求,因此我们可以使用滑动窗口来解决,数据我们可以用哈希表来表示map<int,int> mapp;#include<bits/stdc++.h>using namespace std;int mai原创 2021-04-05 09:59:12 · 386 阅读 · 0 评论 -
数据结构之位运算
1.基本位运算符或:如果两个值有一个为1,或结果为1,否则为0;与:如果两个值都为1,与结果为1,否则为0;异或:如果两个值不同,异或结果为1,否则为0;2.位运算符的相关面试题3.位运算符的应用题目:异或的使用 解析:如果把数组所有的数字都依次异或之后,则可以消掉成对出现的次数,还有2个是单一的,异或值不为0,表现在二进制中肯定有一位是1,那么这两个数字在该位肯定有一个为1,一个为0。...原创 2021-04-05 12:42:27 · 214 阅读 · 0 评论