
数据结构
文章平均质量分 72
翻身的咸鱼ing
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
树状数组
树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值。 查询操作(前缀和查询) 经过推导最后得到的公式:S[i]= S[i-lowbit(i)] + C[i] 其中S[i]是前i项的和,lowbit(i)代表i这个数字,二进制表示的最后一位1的位权,lowbit(x) = x & (-x)。C[i]代表i项的前lowbit(i)项的和(含第原创 2020-05-27 00:36:14 · 236 阅读 · 1 评论 -
链表相关题目详解
链表相关特点:无法高效获取长度,无法根据偏移快速访问元素。 根据链表的特点衍生出一系列问题:判断环的长度等和长度与位置有关的问题,获取倒数第k个元素,获取中间位置的元素,判断链表是否存在环。这些问题都可以通过灵活运用双指针来解决。 一、判断链表是否有环 141. 环形链表 思路:现在考虑一个环形链表,把慢指针和快指针想象成两个在环形赛道上跑步的运动员(分别称之为慢跑者与快跑者)。而快跑者最终一定会追上慢跑者。这是为什么呢?考虑下面这种情况(记作情况 A)- 假如快跑者只落后慢跑者一步,在下一次迭代中,它们就原创 2020-05-23 23:52:49 · 281 阅读 · 0 评论 -
单调队列和单调栈(通俗易懂)
单调队列 单调队列顾名思义就是具有单调性的队列,其中单调性可以单调递增也可以单调递减,并且。队首和队尾可以进行出队操作,队尾可以进行入队操作。队首元素维护的是区间的最大值或最小值 单调队列的形象比喻 假如某高校ACM校队每年只有一个名额去参加比赛,所以只能选出能力最强的人去参加,因为该校只有大三及其以下能够参加该比赛,所以超过该限制的人将会被淘汰。现该队有三名队员分别是张三(年级:大三,能力:9)...原创 2020-04-30 00:31:23 · 2523 阅读 · 0 评论 -
排序
排序 排序稳定性 通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj,Ai原来在位置前,排序后Ai还是要在Aj位置前。 稳定排序(插入、冒泡、归并) 插入排序 基本思想 以上图为例,插入排序的基本思想:将一个记录插入到已排好序的序列中,从而得到一个新的有序序列,直至整个序列有序 代码演示 void insert(in...原创 2020-02-22 14:59:43 · 199 阅读 · 0 评论 -
堆与堆排序
堆与堆排序 一、定义 堆的定义 堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: 堆中某个节点的值总是不大于或不小于其父节点的值 堆总是一棵完全二叉树。 大顶堆 每个结点的值都大于或等于其左右孩子结点的值 小顶堆 每个结点的值都小于或等于其左右孩子结点的值 另外在堆的存储方式需要注意,以大顶堆为例 存储时假如父节点存在arr[i]则左孩子存在arr[2i ]右孩子存在ar...原创 2020-02-20 00:34:31 · 206 阅读 · 0 评论 -
链表各种操作的代码实现
链表各种操作的代码实现 定义 首先是链表节点的初始化 第一种写法: typedef struct ListNode{ int data; // 数据域 struct ListNode *next; //指针域 }Node, *ListNode; 第二种写法: typedef struct ListNode{ int data; struct ListNode *next; }Node; ...原创 2019-10-20 00:05:40 · 416 阅读 · 0 评论 -
有关typedef struct Node{ }Node, *LinkedList;问题的解惑
数据结构解惑01 在数据结构中会看到 typedef struct QNode { QElemType data; //数据域 struct QNode *next; //指针域 }QNode,*QueuePtr; typedef struct { QueuePtr front; //队头指针 QueuePtr rear; //队尾指针 }; 先来解释下上面第一个结构...转载 2019-10-03 19:48:17 · 16347 阅读 · 12 评论 -
顺序表各种操作的代码实现
顺序表 定义 typedef strcut Vector { int *data; int length; int size; }Vector; 初始化 Vector *init(int n) { Vector *v = (Vector *) malloc(sizeof(Vector)); v->data = (int *)malloc(sizeo...原创 2019-10-06 21:49:35 · 373 阅读 · 0 评论