Post

理解数据结构分类与二进制编码原理

2026-05-07

数据结构分类与基本数据类型的二进制存储机制

概述

本文围绕计算机科学中两类核心数据结构(线性与非线性)的分类实现,以及基本数据类型的二进制存储规则展开。重点解析数据结构的底层实现基础,以及计算机如何通过原码、反码、补码等编码方式存储数值型数据。

数据结构分类与实现基础

线性数据结构

线性结构以线性方式组织数据元素,其特点是元素间存在一对一的邻接关系。主要类型包括:

  • 数组:通过连续内存存储元素,支持随机访问,但长度固定
  • 链表:由节点组成,每个节点包含数据和指向下一个节点的指针,支持动态扩展
  • :遵循先进后出(LIFO)原则,常用于括号匹配、递归等场景
  • 队列:遵循先进先出(FIFO)原则,适用于任务调度等场景
  • 哈希表:通过哈希函数实现键值对存储,支持快速查找(一对一映射)

这些结构可通过数组或链表实现。例如:

  • 数组可实现栈(通过指针控制边界)、队列(通过首尾指针控制)、哈希表(通过数组存储键值对)
  • 链表可实现树(节点包含子节点指针)、图(邻接表存储边关系)

非线性数据结构

非线性结构中元素间存在多对多或一对多的关联关系,主要类型包括:

  • :层次化结构,每个节点最多有一个父节点,如二叉搜索树、B树
  • :满足父节点与子节点特定关系的树形结构,常用于优先队列(最大堆/最小堆)
  • :由节点和边构成,支持任意复杂关系表示,如邻接矩阵或邻接表存储
  • 哈希表(非线性场景):在存储多值映射时,可能采用链地址法等非线性扩展方式

需注意:原始笔记中对哈希表的分类存在矛盾——线性结构中描述为"一对一",非线性结构中描述为"一对多",这可能源于不同实现方式的差异。

基本数据类型的二进制存储

存储基础

现代计算机以二进制形式存储数据,基本数据类型是CPU可直接运算的类型,主要包括:

  • 整数类型:byte(8位)、short(16位)、int(32位)、long(64位)
  • 浮点数类型:float(32位)、double(64位)
  • 字符类型:char(通常16位,支持Unicode)
  • 布尔类型:bool(通常用1位表示)

1字节(byte)由8位(bit)组成,存储时需考虑符号位和数值位的分配。

编码规则

计算机通过三种编码方式表示有符号整数:

  1. 原码
    最高位为符号位(0正1负),其余位表示数值。例如:
    +5 → 0 0000101
    -5 → 1 0000101

  2. 反码
    正数反码与原码相同,负数反码是对原码除符号位外的所有位取反。例如:
    -5 → 1 1111010

  3. 补码
    正数补码与原码相同,负数补码是反码基础上加1。例如:
    -5 → 1 1111011

补码是现代计算机中最常用的表示方式,解决了原码和反码中+0与-0的冗余问题,并简化了加减法运算。

注意:原始笔记中未明确说明浮点数的存储规则,此处仅讨论整数类型的编码方式。

实现边界说明

  1. 数据结构实现
    所有数据结构最终都基于数组或链表实现,但具体选择取决于场景需求。例如:

    • 需要频繁随机访问时优先选数组
    • 需要动态扩展时优先选链表
  2. 编码规则适用性
    原码、反码、补码规则适用于整数类型,浮点数采用IEEE 754标准(原始笔记未涉及)。不同编程语言对基本数据类型的存储可能略有差异,需参考具体语言规范。

  3. 存储单位差异
    不同操作系统对字节的定义可能存在差异(如某些嵌入式系统中1字节为4位),但现代主流系统均采用8位/字节标准。