数据结构
文章平均质量分 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 · 648 阅读 · 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 · 125 阅读 · 0 评论 -
力扣 121 买卖股票的最佳时间
用了一种暴力算法 过于暴力 超时了class Solution {public: int maxProfit(vector<int>& prices) { //找最大 最小值 最小值下标在最大值下标之前 即将第一位最大拿出讨论即可 vector<int>::iterator it; ...原创 2019-12-12 11:25:43 · 154 阅读 · 0 评论 -
力扣 27 移除元素
与26相似 基本相同 只是由于26是数组之间元素比较 27是数组元素与传入参数比较 因此两指针起始位置不同 整体思路相同从不等方面思考(记录保留)i慢指针j快指针不等时两指针指向同一位置 两指针都移动相等时 快指针移动 慢指针不动 待到再相等时快指针位置元素覆盖慢指针位置元素,将相等项删除即可代码class Solution {public: int removeEleme...原创 2019-11-26 19:43:16 · 165 阅读 · 0 评论 -
力扣 26 删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums ...原创 2019-11-25 18:02:12 · 132 阅读 · 0 评论 -
力扣 876 链表中间结点
一开始延续回文链表向量数组的写法 只返回了结点值 且忘记向量可以为结点类型 导致出错本题其实很简单 想的有点复杂了1.向量数组class Solution {public: ListNode* middleNode(ListNode* head) { vector<ListNode*> a= {head}; while(a.back()...原创 2019-11-24 19:55:03 · 155 阅读 · 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 · 144 阅读 · 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 · 201 阅读 · 0 评论 -
力扣 206反转链表
反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL1.利用外部条件 容器2.双指针 迭代class Solution {public: ListNode* reverseList(ListNode* head) { ListNode *p...原创 2019-11-24 16:27:04 · 133 阅读 · 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 · 153 阅读 · 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 · 196 阅读 · 0 评论 -
二叉树遍历相关习题及代码
二叉树遍历:前序遍历:根左右中序遍历:左根右后序遍历:左右根4.层次遍历:逐层遍历 ABCDEFGHIJK代码:#include <stdio.h>#include <stdlib.h>typedef struct BiNode{ char data; struct BiNode *left,*right;//指向自身 递...原创 2019-10-23 16:05:15 · 947 阅读 · 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 · 1143 阅读 · 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 · 99 阅读 · 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 · 192 阅读 · 0 评论 -
数据结构 栈
小甲鱼数据结构课程笔记栈 先进后出 仅限在表尾进行插入或删除操作的线性表,表头为栈递(base),表尾为栈顶(top),top指向栈顶的下一个元素即栈的插入和删除操作栈的插入操作(Push),叫做进栈,也称为压栈,入栈。类似子弹放入弹夹的动作。栈的删除操作(Pop),叫做出栈,也称为弹栈。如同弹夹中的子弹出夹。有顺序存储结构和链式存储...原创 2019-09-08 16:34:25 · 113 阅读 · 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 10type...原创 2019-09-08 16:47:24 · 293 阅读 · 0 评论 -
栈运用 逆波兰表达式 C语言
逆波兰表达式即后缀表达式输入逆波兰表达式输出结果大致思路:输入字符,注意字符与字符之间间隔,故创建缓存数组将字符转化为浮点数后压入栈,因逆波兰表达式会将优先级表现出来,则将浮点数遇见符号进行计算即可,计算结果再压入栈等待与后面的浮点数再遇见输入的符号#include <stdio.h>#include <stdlib.h>#include <ctype....原创 2019-09-08 17:00:25 · 990 阅读 · 2 评论 -
栈运用 中缀表达式转化为后缀表达式 C语言
1 小甲鱼数据结构视频所示有些地方有点累赘大致思路:1.数字直接打印,符号依次入栈,优先级高的先出栈,左括号没有优先级2.左右括号匹配与其两者相夹的符号可一起出栈,(若括号内多个符号就不可直接一起出栈)或直接打印,3.有新符号入栈时,若符号是右括号或优先级小于等于栈顶元素,则栈顶元素依次出栈并输出,直到遇到左括号或栈空,(从栈中弹出元素直到遇到发现更低优先级的元素(或者栈为空)为止),...原创 2019-09-08 17:03:38 · 285 阅读 · 0 评论 -
数据结构 链队列与循环队列 C
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式**~~插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎...原创 2019-09-20 19:54:00 · 226 阅读 · 0 评论 -
内存布局与分配
部分转载自https://blog.csdn.net/qq_29924041/article/details/54897204和小甲鱼数据结构课程内存布局规律:malloc 申请动态内存空间void *malloc(size_t size);malloc函数向系统申请分配size个字节的内存空间,并返回一个指向这空间的指针void *,表示未确定类型的指针。C,C++规定,...原创 2019-09-21 21:02:15 · 147 阅读 · 0 评论 -
八皇后问题 递归解决
问题描述:该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。一共92种摆法。这是一种摆法:递归基本思路:先在第一行放一个棋子,第二步,在第二行找一个安全的地方再放一个棋子,以此类推,放到第八个棋子时结束。总体思想:1.首先创建棋盘并初始化2.写八皇后函数,此为...原创 2019-10-09 20:17:47 · 173 阅读 · 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 = 2T_4 = 1 + 1 + 2 = 4示例 2:输入:n = 25输出:1389537...原创 2019-10-09 21:20:07 · 157 阅读 · 0 评论 -
数据结构---哈希表
哈希表概念:哈希表的查找步骤:当存储记录时,通过散列函数计算出记录的散列地址当查找记录时,我们通过同样的是散列函数计算记录的散列地址,并按此散列地址访问该记录哈希函数的构造方法:构造散列函数的两个基本原则1 计算简单2 分布均匀处理冲突的方法:...原创 2019-08-14 16:49:23 · 352 阅读 · 0 评论