数据结构

作者: coderlan | 来源:发表于2018-03-30 17:00 被阅读0次

字符串

Redis中所有的key都是字符串,但是Redis没有采用c字符串,而是自己封装了个动态字符串,称为SDS。
SDS结构定义如下:

struct sdshdr {
  //已使用字节数
  int len;
  //空闲字节数
  int free;
  //字节数组,用于存储二进制数据
  char[] buf;
}

特性:

  • 使用len来记录长度,获取长度的时间复杂度为O(1),而C字符串是O(n)。
  • buf数组不是刚好放得下字符串内容,而是会进行预分配,同时可以通过懒释放内存,减少长度变化导致的内存重分配的次数来提高性能。
  • 封装了空间分配的操作,避免缓冲区溢出。比如C的字符串拼接。
  • 二进制安全。记录了len,而不是通过空字符来做字符串结束标识。这样字符串内容也可以出现空字符。
  • buf数组在存储了字符串内容之外,总会在后面添加一个空字符。通过这个方法兼容C的部分函数。

链表

没有太多特殊的地方:

  • 无环的双向链表,保留了头结点和尾节点的引用。
  • 保存了节点数量,使得获取长度的时间复杂度为O(1)。
  • 使用多态,节点可以承载任何类型数据。

哈希表

typedef struct dictht {
  //一个数组,每个元素都是dictEntry*,指向一个链表(解决哈希冲突问题)
  dictEntry** table;
  //哈希表大小
  unsigned long size;
  //哈希表大小掩码,用于计算索引值,等于size - 1
  unsigned long sizemask;
  //哈希表已有节点数量
  unsigned long used;
} dictht;

typedef struct dictEntry {
  void* key;
  union {
    void* val;
    uint64_t u64;
    int64_t s64;
  } v;
  struct dictEntry* next;
} dictEntry;

相关文章

  • IOS开发_数据结构

    1、数据结构; 2、算法; 3、数据结构与算法; 1、数据结构; 1.1 概念: 数据结构:数据结构是计算...

  • py基础

    5Python集合容器 数据结构数据结构 一般将数据结构分为两大类: 线性数据结构和非线性数据结构。 线性数据结构...

  • 思维导图之数据结构+算法

    数据结构+算法 = 程序 数据结构比较 参考文章 数据结构与算法数据结构与算法(java)

  • 数据结构与算法分析:大纲]

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 本系列课程主要...

  • 数据结构:数组

    00数据结构与算法分析:大纲01数据结构:数组02数据结构:链表03数据结构:栈03数据结构:队列 数组 数组是一...

  • 数据结构—概述

    数据结构概述 数据结构概述:程序设计 = 数据结构 + 算法数据结构:数据元素之间存在所有特定关系的集合,数据结构...

  • OVS 源码分析整理

    OVS 核心代码 OVS 架构 OVS 主要的数据结构数据结构关系图主要的数据结构和数据结构的参数数据结构代码 d...

  • 01. 数据结构与算法绪论

    一、数据结构 1. 什么是数据结构 2. 数据结构的分类 3. 常用的数据结构 4. 数据结构的应用表现 二、算法...

  • 数据结构与算法 - 查找

    数据结构与算法系列文章数据结构与算法 - 时间复杂度数据结构与算法 - 线性表数据结构与算法 - 树形结构数据结构...

  • C#之数据结构(上)

    数据结构 一般将数据结构分为两大类: 线性数据结构和非线性数据结构。 线性数据结构有: 线性表、栈、队列、串、数组...

网友评论

    本文标题:数据结构

    本文链接:https://www.haomeiwen.com/subject/mspicftx.html