
Data Structure
数据结构
「已注销」
本博客现只用于学习用,可能会转载他人的知识,若有涉及到您的版权问题,请与我联系。
展开
-
C++11 std::initializer_list
头文件#include <initializer_list>template< class T >class initializer_list;std::initializer_list 类型对象是一个访问 const T 类型对象数组的轻量代理对象。std::initializer_list 对象在这些时候自动构造:用花括号初始化器列表列表初始化一个对象...原创 2020-03-27 20:48:11 · 636 阅读 · 0 评论 -
Redis 数据类型之有序集
REDIS_ZSET (有序集)是 ZADD 、 ZCOUNT 等命令的操作对象, 它使用 REDIS_ENCODING_ZIPLIST 和 REDIS_ENCODING_SKIPLIST 两种方式编码。在通过 ZADD 命令添加第一个元素到空 key 时, 程序通过检查输入的第一个元素来决定该创建什么编码的有序集。如果第一个元素符合以下条件的话, 就创建一个 REDIS_ENCODING_Z...原创 2020-03-23 01:02:21 · 401 阅读 · 0 评论 -
Redis 数据类型之集合
REDIS_SET (集合)是 SADD 、 SRANDMEMBER 等命令的操作对象, 它使用 REDIS_ENCODING_INTSET 和 REDIS_ENCODING_HT 两种方式编码。编码的选择第一个添加到集合的元素, 决定了创建集合时所使用的编码:如果第一个元素可以表示为 long long 类型值(也即是,它是一个整数), 那么集合的初始编码为 REDIS_ENCODING...原创 2020-03-23 00:55:06 · 355 阅读 · 0 评论 -
Redis 数据类型之列表
REDIS_LIST (列表)是 LPUSH 、 LRANGE 等命令的操作对象, 它使用 REDIS_ENCODING_ZIPLIST 和 REDIS_ENCODING_LINKEDLIST 这两种方式编码。编码的选择创建新列表时 Redis 默认使用 REDIS_ENCODING_ZIPLIST 编码, 当以下任意一个条件被满足时, 列表会被转换成 REDIS_ENCODING_LINKE...原创 2020-03-23 00:42:43 · 319 阅读 · 0 评论 -
Redis 数据结构之Ziplist 压缩列表
Ziplist 是由一系列特殊编码的内存块构成的列表, 一个 ziplist 可以包含多个节点(entry), 每个节点可以保存一个长度受限的字符数组(不以 \0 结尾的 char 数组)或者整数, 包括:字符数组长度小于等于 63 (26−1)字节的字符数组长度小于等于 16383 (214−1) 字节的字符数组长度小于等于 4294967295 (232−1)字节的字符数组整数...原创 2020-03-22 05:13:52 · 362 阅读 · 0 评论 -
Redis 数据结构之Intset 整数集合
整数集合(intset)用于有序、无重复地保存多个整数值, 根据元素的值, 自动选择该用什么长度的整数类型来保存元素。举个例子, 如果在一个 intset 里面, 最长的元素可以用 int16_t 类型来保存, 那么这个 intset 的所有元素都以 int16_t 类型来保存。另一方面, 如果有一个新元素要加入到这个 intset , 并且这个元素不能用 int16_t 类型来保存 —— 比...原创 2020-03-22 04:48:23 · 418 阅读 · 0 评论 -
Redis 数据结构之Skiplist 跳跃表
跳跃表(skiplist)是一种随机化的数据,跳跃表以有序的方式在层次化的链表中保存元素, 效率和平衡树媲美 —— 查找、删除、添加等操作都可以在对数期望时间下完成, 并且比起平衡树来说, 跳跃表的实现要简单直观得多。从图中可以看到, 跳跃表主要由以下部分构成:表头(head):负责维护跳跃表的节点指针。跳跃表节点:保存着元素值,以及多个层。层:保存着指向其他元素的指针。高层的指针越过的...原创 2020-03-22 04:14:00 · 379 阅读 · 0 评论 -
Redis 数据结构之Dictionary 字典
字典(dictionary), 又名映射(map)或关联数组(associative array), 是一种抽象数据结构, 由一集键值对(key-value pairs)组成, 各个键值对的键各不相同, 程序可以添加新的键值对到字典中, 或者基于键进行查找、更新或删除等操作。字典的主要用途有以下两个:实现数据库键空间(key space)用作 Hash 类型键的底层实现之一实现数据库键...原创 2020-03-22 03:53:29 · 709 阅读 · 0 评论 -
Redis 数据结构之List 双端链表
List链表作为数组之外的一种常用序列抽象, 是大多数高级语言的基本数据类型, 因为 C 语言本身不支持链表类型, 大部分 C 程序都会自己实现一种链表类型, Redis 也不例外 —— 实现了一个双端链表结构。在Redis中,list的最大长度为2^32-1。除了实现列表类型以外, 双端链表还被很多 Redis 内部模块所应用:事务模块使用双端链表依序保存输入的命令服务器模块使用双端链...原创 2020-03-21 18:06:32 · 819 阅读 · 0 评论 -
Redis 数据结构之SDS (Simple Dynamic String)简单动态字符串
SDSRedis没有直接使用C语言传统的字符串,而自己构建了一种简单动态字符串(Simple Dynamic String)的抽象类型,简称为SDS。并将SDS作为Redis的默认字符串表示。它主要有以下两个用途:实现字符串对象(StringObject)。在 Redis 程序内部用作 char* 类型的替代品。SDS的定义struct sdshdr{ int len; ...原创 2020-03-21 16:46:55 · 577 阅读 · 0 评论 -
【图论】图的存储方式之邻接矩阵结构 实例
【图论】图的存储方式之邻接矩阵结构学会一个东西,需要用它来解决问题。简单的问题无向图中,有n个点,m条边,询问任意起点到任意终点长度为z的路径共有多少条?两条路径相同当且仅当每一步它们经过的结点相同。数据范围限制:1 <= n,x,y,z,q <= 100思路:对于一个无向图:它的邻接矩阵表示如下:以上图的表示为:设程序中的二维数组的定义为matrix。则m...原创 2020-03-14 21:48:06 · 788 阅读 · 0 评论 -
【图论】图的概念及种类
图的概念及种类图的概念图是互连结点的集合如图所示,一个图可能是这样:图有结点(node)和边(Edge)。节点之间通过边互相连接。二元组的定义图G是一个有序二元组(V, E),其中V称为顶集(Vertices Set),E称为边集(Edges set),E与V不相交。它们亦可写成V(G)和E(G)。图的种类有向图和无向图如果给图的每条边规定没有方向,那么得到的图称为无向图。在...原创 2020-03-13 20:40:27 · 3061 阅读 · 0 评论 -
那些想不出来的问题
给一个图,图中有点,点有权值,点之间有边。求任意点组成的点集的最大值,要求点集之间的点不相连。问了很多人都无解,不在二分图上啊。原创 2020-03-13 00:16:51 · 259 阅读 · 0 评论 -
那些常见的数据结构
数组链表/双向链表队列/单调队列/双端队列栈/单调栈树/森林堆/最大堆/最小堆hash表完全二叉树/满二叉树树状数组st表线段树/线段树合并主席树splay树treap树 随机平衡二叉树Scapegoat Tree 替罪羊树块状数组块状链表红黑树跳表B树B+树/B*树并查集树套树/线段树套线段树/线段树套平衡树/平衡树套线段树左偏树配对堆四分树...原创 2020-03-12 17:16:41 · 436 阅读 · 0 评论 -
那些程序员应该掌握的算法
排序冒泡排序选择排序插入排序(二分插入)希尔排序堆排序快速排序归并排序(二路归并,多路归并,Timsort排序算法)计数排序桶排序基数排序拓扑排序搜索DfsBfs二分搜索三分搜索最值与查询RMQ树状数组线段树最短路Dijkstra算法Bellman-Ford算法Floyd算法SPFA算法差分约束A*算法最小生成树Krusk...原创 2020-03-12 17:05:33 · 3318 阅读 · 1 评论 -
跳表的实现(C++源码)
/// @file skip_list.cpp/// @brief wait for check/// @author zhaolu/// @version 1.0/// @date 2020-03-07/// @copyright Copyright (c) 2020 zhaolu. All Rights Reserved.#include <memset>#incl...原创 2020-03-07 07:44:38 · 582 阅读 · 0 评论 -
跳跃表(skip list)的原理
学过编程的都知道,数据结构中有一种数据结构叫做链表。它的简单实现如下:template <typename T>struct Node { T v; Node* nxt;};template <typename T>struct List { Node<T> Head;};链表有什么特点呢?它一般是与数组比的,为什么呢,因为数组的优...原创 2020-03-07 03:13:47 · 777 阅读 · 0 评论