本篇文章主要介绍Redis数据类型,具体实现的数据结构
前言
🚀 内容来自参考自Redis设计与实现
⚠️ 本篇文章主要介绍Redis3.0的数据结构,在Redis7.0数据类型与数据结构的关系有所不一致。
介绍逻辑
数据结构的定义
字段的解释
特性
介绍内容
简单动态字符串
链表
字典
跳跃表
整数集合
压缩列表
简单动态字符串
数据结构的定义
字段的解释
free属性的值,记录SDS存在多少未使用的空间
len属性,记录SDS保存多少字节长度的字符串
特性
常数复杂度获取字符串长度
杜绝缓冲区溢出问题,SDS在执行修改增加操作的时候,API会检查是否满足要求,如果不满足会自动扩容
减少修改字符串时带来的内存重分配次数,空间预分配会额外分配空间、惰性空间释放在缩短操作时,利用free属性记录数量,等待使用。
链表
数据结构的定义
由ListNode和L
BinarySearchTree定义
二叉搜索树是二叉树的一种。
任意一个节点的值都大于其左子树所有节点的值。
任意一个节点的值都小于其右子树所有节点的值。
它的左右子树也是一颗二叉搜索树。
设计一颗二叉树
树中节点的设计
节点的值
左孩子
右孩子
当前节点的父节点
判断当前节点是否为叶子节点
判断当前节点度是否为2
public class Node {
public int element; // 值
public Node left; // 左孩子
public Node right; // 右孩子
public Node parent; // 父节点
/**
* 必须传入当前节点的值以及父节点
* @param element
* @param pare
主旋律:回想2023一整年应该都是备考 ➕ 实习以及匆忙的校园生活
一些
2023过年期间和朋友自驾游去了一趟广西桂林🙅(其实是陪朋友去找他女朋友)参观一些风景区没太多印象了,有意思的其实是和朋友一起在车上又冷又塞车通宵赶回家。
过完年就回学校备考了,和一位玩的很好的朋友约定每天三点一线的备考,每天约定俗成的在宿舍门口汇合,吃早餐...计划着要赶在学生下课之前去吃饭。
期间还在去图书馆的路上选一个棵树记录它能不能在考试前长出来🌲,很快就迎来了考试。
在第一门💥的情况下,也迎来了两天考试睡眠一共不足4个小时,而周一立马就去实习了毫无喘息...
实习😈
在备考期间学校恰好举行了招聘会,于是抽出半天时间想着能不能碰一碰运气,现在回想23届的校招可以说是地狱级难度(希望25届不要!)当时刷牛客的时候不少23届的同学都在抱怨。
然后在招聘会现场随便走了一圈,开发岗位少的可怜。抱着来
Trie数可以快速的存储和查询字符串集合
用法
假设给定一组字符串abc,ab,bcf,abb,ab。最后需要去查找是否存在多少个ab字符串
使用Trie快速的存储给定的字符串
从根节点开始
遍历每个字符串,判断该节点上是否存在相同子节点
如果存在则继续,不存在则创建
将最后一个字符标记,用于表示当前字符有存在一个字符串
视图
最后查找存在多少个ab字符串,只需要取出b字符对应的个数就行了
代码实现
重要通过数组去模拟trie
主要要清楚son[][], cnt[], index变量的含义
N的大写取决于题目中最大的节点数,也就是最多有多少长度的字符串
26则是默认规定都是小写字母那么最多只有26个字母
son[][]son是存储当前节点的子节点的下标
🌰: son[0][1] = 2; 代表的是下标为0的节点,有子节点这个子节点为“1”(注意这
project0实现一个2048游戏,大部分逻辑其实已经写好了,只需要把目光放在Model.java中主要的任务实现以下几个函数
emptySpaceExists
maxTileExists
atLeastOneMoveExists
tilt
前三个较为简单这里就不多赘述,重点实现tile方法
Tile method实现
在写tile函数之前务必阅读文档,了解一下函数的用法以及作用
Border的tile
move
setViewingPerspective
完成以下检验是否真正的理解需求
Google Form quiz
Google Form quiz
实现
根据Tips的提示,我们可以先从只考虑向上移动来进行分析。Border.tile(c, r)的行为是一列一列进行遍历的。
for (int c = 0; c < border.size(); c++) {