
数据结构
文章平均质量分 94
oomoomoooq
个人博客:https://kkalts.github.io/f7.github.io/
欢迎访问
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
跳跃表解析
写在前面 跳表的应用很多 redis zset的底层数据结构的一种就是其应用 面试被问到两次 一次不知道 一次没太讲清除 尴尬 所以专门找了redis书里的跳表学 以下主要基于Redis5设计与源码分析 这本书 直接看书也可以 这篇博客是对书内容的一个解析 算是我的笔记 是我对于书内容的理解 希望能帮到你 里面有些图太丑 不要嫌弃 有些图可能因为github 加载会慢点 关于java实现跳表可以看视频:https://www.bilibili.com/video/BV1Er4y1P7k1?from=sear原创 2021-04-24 16:24:09 · 775 阅读 · 0 评论 -
119 力扣杨辉三角 Ⅱ
1.模拟 动态规划 118的状态转移公式 dp[i][j] = dp[i-1][j-1] + dp[i-1][j] 可以看到可将[i-1],[i]省掉 只返回指定行 // dp[i][j] = dp[i-1][j-1] + dp[i-1][j] vector<int> getRow(int rowIndex) { vector<int> a; ...原创 2019-12-19 11:23:48 · 179 阅读 · 0 评论 -
力扣 121 买卖股票的最佳时间
用了一种暴力算法 过于暴力 超时了 class Solution { public: int maxProfit(vector<int>& prices) { //找最大 最小值 最小值下标在最大值下标之前 即将第一位最大拿出讨论即可 vector<int>::iterator it; ...原创 2019-12-12 11:25:43 · 210 阅读 · 0 评论 -
力扣 27 移除元素
与26相似 基本相同 只是由于26是数组之间元素比较 27是数组元素与传入参数比较 因此两指针起始位置不同 整体思路相同 从不等方面思考(记录保留) i慢指针 j快指针 不等时两指针指向同一位置 两指针都移动 相等时 快指针移动 慢指针不动 待到再相等时快指针位置元素覆盖慢指针位置元素,将相等项删除即可 代码 class Solution { public: int removeEleme...原创 2019-11-26 19:43:16 · 248 阅读 · 0 评论 -
力扣 26 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nums ...原创 2019-11-25 18:02:12 · 208 阅读 · 0 评论 -
力扣 876 链表中间结点
一开始延续回文链表向量数组的写法 只返回了结点值 且忘记向量可以为结点类型 导致出错 本题其实很简单 想的有点复杂了 1.向量数组 class Solution { public: ListNode* middleNode(ListNode* head) { vector<ListNode*> a= {head}; while(a.back()...原创 2019-11-24 19:55:03 · 211 阅读 · 0 评论 -
力扣 237 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。 现有一个链表 – head = [4,5,1,9],它可以表示为: 示例 1: 输入: head = [4,5,1,9], node = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9. 示例 2: 输入: ...原创 2019-11-24 18:07:26 · 190 阅读 · 0 评论 -
力扣 234 回文链表
快慢指针 找中点(注意奇偶) 分开 反转后半链 比较(以后半链为主) class Solution { public: bool isPalindrome(ListNode* head) { ListNode *p=new ListNode(-1);//预先指针 ListNode *fast=p; ListNode *low=p; ...原创 2019-11-24 17:03:25 · 326 阅读 · 0 评论 -
力扣 206反转链表
反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 1.利用外部条件 容器 2.双指针 迭代 class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *p...原创 2019-11-24 16:27:04 · 190 阅读 · 0 评论 -
力扣 203 移除链表元素
一开始想太简单了没有考虑到已经遍历到的结点无法删除 有三种方法: 1.在原表基础上删除 要定义指向当前结点前一结点的指针 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next...原创 2019-11-23 17:56:02 · 265 阅读 · 0 评论 -
力扣226 翻转二叉树
即左右进行交换再递归 /** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ struct TreeNode* invertTree(struct Tre...原创 2019-11-05 19:49:33 · 319 阅读 · 0 评论 -
二叉树遍历相关习题及代码
二叉树遍历: 前序遍历: 根左右 中序遍历: 左根右 后序遍历: 左右根 4.层次遍历: 逐层遍历 ABCDEFGHIJK 代码: #include <stdio.h> #include <stdlib.h> typedef struct BiNode { char data; struct BiNode *left,*right;//指向自身 递...原创 2019-10-23 16:05:15 · 1031 阅读 · 0 评论 -
二叉树性质及习题
二叉树性质: 1.在二叉树的第 k层至多有 2^(k -1)个结点。(k>=1) 2.深度为 k 的二叉树至多有 2^(k-1)个结点(k >=1)。 3. 对任何一棵二叉树T, 如果其叶结点数为n0, 度为2的结点数为 n2,则n0=n2+1。 证明: 若度为1的结点有 n1个,总结点个数为n,总边数为 e,则根据二叉树的定义, n = n0 + n1 + n2 ...原创 2019-10-23 13:52:35 · 1292 阅读 · 0 评论 -
力扣101 对称二叉树 + 力扣 100 相同的树
给定一个二叉树,检查它是否是镜像对称的。 例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / 2 2 / \ / 3 4 4 3 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / 2 2 \ 3 3 用递归 基本思想: 抛开根结点,从左右子树出发,递归 两种思考方式: 1.从false方面出发, 在左右子树均存在...原创 2019-10-22 20:56:10 · 152 阅读 · 0 评论 -
力扣 779 第K个语法符号
在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。 给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始) 例子: 输入: N = 1, K = 1 输出: 0 输入: N = 2, K = 1 输出: 0 输入: N = 2, K = 2 输出: 1 输入: N = 4, K = 5 输出: 1 解释: 第一行: 0 第二行: 01 第三行: 01...原创 2019-10-13 19:48:06 · 267 阅读 · 0 评论 -
数据结构 栈
小甲鱼数据结构课程笔记 栈 先进后出 仅限在表尾进行插入或删除操作的线性表,表头为栈递(base),表尾为栈顶(top), top指向栈顶的下一个元素即 栈的插入和删除操作 栈的插入操作(Push),叫做进栈,也称为压栈,入栈。类似子弹放入弹夹的动作。 栈的删除操作(Pop),叫做出栈,也称为弹栈。如同弹夹中的子弹出夹。 有顺序存储结构和链式存储...原创 2019-09-08 16:34:25 · 154 阅读 · 0 评论 -
栈运用 二进制转八/十进制 C语言
每个二进制数转换成相应的十进制数方法如下: (XnXn-1……X3X2X1)2 = X120+X2*21+…+Xn2^(n-1) #include <stdio.h> #include <stdlib.h> #include <math.h> #define STACK_INIT_SIZE 20 #define STACKINCREMENT 10 type...原创 2019-09-08 16:47:24 · 375 阅读 · 0 评论 -
栈运用 逆波兰表达式 C语言
逆波兰表达式即后缀表达式 输入逆波兰表达式输出结果 大致思路: 输入字符,注意字符与字符之间间隔,故创建缓存数组 将字符转化为浮点数后压入栈,因逆波兰表达式会将优先级表现出来,则将浮点数遇见符号进行计算即可,计算结果再压入栈等待与后面的浮点数再遇见输入的符号 #include <stdio.h> #include <stdlib.h> #include <ctype....原创 2019-09-08 17:00:25 · 1150 阅读 · 2 评论 -
栈运用 中缀表达式转化为后缀表达式 C语言
1 小甲鱼数据结构视频所示 有些地方有点累赘 大致思路: 1.数字直接打印,符号依次入栈,优先级高的先出栈,左括号没有优先级 2.左右括号匹配与其两者相夹的符号可一起出栈,(若括号内多个符号就不可直接一起出栈)或直接打印, 3.有新符号入栈时,若符号是右括号或优先级小于等于栈顶元素, 则栈顶元素依次出栈并输出,直到遇到左括号或栈空,(从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止),...原创 2019-09-08 17:03:38 · 354 阅读 · 0 评论 -
数据结构 链队列与循环队列 C
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式**~~插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎...原创 2019-09-20 19:54:00 · 273 阅读 · 0 评论 -
内存布局与分配
部分转载自 https://blog.youkuaiyun.com/qq_29924041/article/details/54897204 和小甲鱼数据结构课程 内存布局规律: malloc 申请动态内存空间 void *malloc(size_t size); malloc函数向系统申请分配size个字节的内存空间,并返回一个指向这空间的指针 void *,表示未确定类型的指针。 C,C++规定,...原创 2019-09-21 21:02:15 · 189 阅读 · 0 评论 -
八皇后问题 递归解决
问题描述: 该问题是十九世纪著名的数学家高斯1850年提出: 在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。 一共92种摆法。 这是一种摆法: 递归基本思路: 先在第一行放一个棋子,第二步,在第二行找一个安全的地方再放一个棋子,以此类推,放到第八个棋子时结束。 总体思想: 1.首先创建棋盘并初始化 2.写八皇后函数,此为...原创 2019-10-09 20:17:47 · 236 阅读 · 0 评论 -
力扣 1137 第 N 个泰波那契数
泰波那契序列 Tn 定义如下: T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2 给你整数 n,请返回第 n 个泰波那契数 Tn 的值。 示例 1: 输入:n = 4 输出:4 解释: T_3 = 0 + 1 + 1 = 2 T_4 = 1 + 1 + 2 = 4 示例 2: 输入:n = 25 输出:1389537...原创 2019-10-09 21:20:07 · 212 阅读 · 0 评论 -
数据结构---哈希表
哈希表概念: 哈希表的查找步骤: 当存储记录时,通过散列函数计算出记录的散列地址 当查找记录时,我们通过同样的是散列函数计算记录的散列地址,并按此散列地址访问该记录 哈希函数的构造方法: 构造散列函数的两个基本原则 1 计算简单 2 分布均匀 处理冲突的方法: ...原创 2019-08-14 16:49:23 · 402 阅读 · 0 评论