mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-09 22:16:06 +00:00
build
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 3.2. 基本数据类型
|
||||
# 3.2 基本数据类型
|
||||
|
||||
谈及计算机中的数据,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织形式各异,但它们都由各种基本数据类型构成。
|
||||
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 3.4. 字符编码 *
|
||||
# 3.4 字符编码 *
|
||||
|
||||
在计算机中,所有数据都是以二进制数的形式存储的,字符 `char` 也不例外。为了表示字符,我们需要建立一套“字符集”,规定每个字符和二进制数之间的一一对应关系。有了字符集之后,计算机就可以通过查表完成二进制数到字符的转换。
|
||||
|
||||
## 3.4.1. ASCII 字符集
|
||||
## 3.4.1 ASCII 字符集
|
||||
|
||||
「ASCII 码」是最早出现的字符集,全称为“美国标准信息交换代码”。它使用 7 位二进制数(即一个字节的低 7 位)表示一个字符,最多能够表示 128 个不同的字符。这包括英文字母的大小写、数字 0-9 、一些标点符号,以及一些控制字符(如换行符和制表符)。
|
||||
|
||||
@@ -18,13 +18,13 @@ comments: true
|
||||
|
||||
在世界范围内,陆续出现了一批适用于不同地区的 EASCII 字符集。这些字符集的前 128 个字符统一为 ASCII 码,后 128 个字符定义不同,以适应不同语言的需求。
|
||||
|
||||
## 3.4.2. GBK 字符集
|
||||
## 3.4.2 GBK 字符集
|
||||
|
||||
后来人们发现,**EASCII 码仍然无法满足许多语言的字符数量要求**。比如汉字大约有近十万个,光日常使用的就有几千个。中国国家标准总局于 1980 年发布了「GB2312」字符集,其收录了 6763 个汉字,基本满足了汉字的计算机处理需要。
|
||||
|
||||
然而,GB2312 无法处理部分的罕见字和繁体字。「GBK」字符集是在 GB2312 的基础上扩展得到的,它共收录了 21886 个汉字。在 GBK 的编码方案中,ASCII 字符使用一个字节表示,汉字使用两个字节表示。
|
||||
|
||||
## 3.4.3. Unicode 字符集
|
||||
## 3.4.3 Unicode 字符集
|
||||
|
||||
随着计算机的蓬勃发展,字符集与编码标准百花齐放,而这带来了许多问题。一方面,这些字符集一般只定义了特定语言的字符,无法在多语言环境下正常工作。另一方面,同一种语言也存在多种字符集标准,如果两台电脑安装的是不同的编码标准,则在信息传递时就会出现乱码。
|
||||
|
||||
@@ -44,7 +44,7 @@ Unicode 是一种字符集标准,本质上是给每个字符分配一个编号
|
||||
|
||||
然而 ASCII 码已经向我们证明,编码英文只需要 1 字节。若采用上述方案,英文文本占用空间的大小将会是 ASCII 编码下大小的两倍,非常浪费内存空间。因此,我们需要一种更加高效的 Unicode 编码方法。
|
||||
|
||||
## 3.4.4. UTF-8 编码
|
||||
## 3.4.4 UTF-8 编码
|
||||
|
||||
目前,UTF-8 已成为国际上使用最广泛的 Unicode 编码方法。**它是一种可变长的编码**,使用 1 到 4 个字节来表示一个字符,根据字符的复杂性而变。ASCII 字符只需要 1 个字节,拉丁字母和希腊字母需要 2 个字节,常用的中文字符需要 3 个字节,其他的一些生僻字符需要 4 个字节。
|
||||
|
||||
@@ -72,7 +72,7 @@ UTF-8 的编码规则并不复杂,分为两种情况:
|
||||
|
||||
从兼容性的角度看,UTF-8 的通用性最佳,许多工具和库都优先支持 UTF-8 。
|
||||
|
||||
## 3.4.5. 编程语言的字符编码
|
||||
## 3.4.5 编程语言的字符编码
|
||||
|
||||
对于以往的大多数编程语言,程序运行中的字符串都采用 UTF-16 或 UTF-32 这类等长的编码。这是因为在等长编码下,我们可以将字符串看作数组来处理,其优点包括:
|
||||
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 3.1. 数据结构分类
|
||||
# 3.1 数据结构分类
|
||||
|
||||
常见的数据结构包括数组、链表、栈、队列、哈希表、树、堆、图,它们可以从“逻辑结构”和“物理结构”两个维度进行分类。
|
||||
|
||||
## 3.1.1. 逻辑结构:线性与非线性
|
||||
## 3.1.1 逻辑结构:线性与非线性
|
||||
|
||||
**「逻辑结构」揭示了数据元素之间的逻辑关系**。在数组和链表中,数据按照顺序依次排列,体现了数据之间的线性关系;而在树中,数据从顶部向下按层次排列,表现出祖先与后代之间的派生关系;图则由节点和边构成,反映了复杂的网络关系。
|
||||
|
||||
@@ -25,7 +25,7 @@ comments: true
|
||||
- **树形结构**:树、堆、哈希表,元素之间是一对多的关系。
|
||||
- **网状结构**:图,元素之间是多对多的关系。
|
||||
|
||||
## 3.1.2. 物理结构:连续与离散
|
||||
## 3.1.2 物理结构:连续与离散
|
||||
|
||||
在计算机中,内存和硬盘是两种主要的存储硬件设备。硬盘主要用于长期存储数据,容量较大(通常可达到 TB 级别)、速度较慢。内存用于运行程序时暂存数据,速度较快,但容量较小(通常为 GB 级别)。
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ comments: true
|
||||
icon: material/shape-outline
|
||||
---
|
||||
|
||||
# 3. 数据结构
|
||||
# 第 3 章 数据结构
|
||||
|
||||
<div class="center-table" markdown>
|
||||
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 3.3. 数字编码 *
|
||||
# 3.3 数字编码 *
|
||||
|
||||
!!! note
|
||||
|
||||
在本书中,标题带有的 * 符号的是选读章节。如果你时间有限或感到理解困难,可以先跳过,等学完必读章节后再单独攻克。
|
||||
|
||||
## 3.3.1. 原码、反码和补码
|
||||
## 3.3.1 原码、反码和补码
|
||||
|
||||
从上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个。例如,`byte` 的取值范围是 $[-128, 127]$ 。这个现象比较反直觉,它的内在原因涉及到原码、反码、补码的相关知识。
|
||||
|
||||
@@ -92,7 +92,7 @@ $$
|
||||
|
||||
补码的设计非常精妙,因篇幅关系我们就先介绍到这里,建议有兴趣的读者进一步深度了解。
|
||||
|
||||
## 3.3.2. 浮点数编码
|
||||
## 3.3.2 浮点数编码
|
||||
|
||||
细心的你可能会发现:`int` 和 `float` 长度相同,都是 4 bytes,但为什么 `float` 的取值范围远大于 `int` ?这非常反直觉,因为按理说 `float` 需要表示小数,取值范围应该变小才对。
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
comments: true
|
||||
---
|
||||
|
||||
# 3.5. 小结
|
||||
# 3.5 小结
|
||||
|
||||
- 数据结构可以从逻辑结构和物理结构两个角度进行分类。逻辑结构描述了数据元素之间的逻辑关系,而物理结构描述了数据在计算机内存中的存储方式。
|
||||
- 常见的逻辑结构包括线性、树状和网状等。通常我们根据逻辑结构将数据结构分为线性(数组、链表、栈、队列)和非线性(树、图、堆)两种。哈希表的实现可能同时包含线性和非线性结构。
|
||||
@@ -15,7 +15,7 @@ comments: true
|
||||
- ASCII 码是最早出现的英文字符集,长度为 1 字节,共收录 127 个字符。GBK 字符集是常用的中文字符集,共收录两万多个汉字。Unicode 致力于提供一个完整的字符集标准,收录世界内各种语言的字符,从而解决由于字符编码方法不一致而导致的乱码问题。
|
||||
- UTF-8 是最受欢迎的 Unicode 编码方法,通用性非常好。它是一种变长的编码方法,具有很好的扩展性,有效提升了存储空间的使用效率。UTF-16 和 UTF-32 是等长的编码方法。在编码中文时,UTF-16 比 UTF-8 的占用空间更小。Java, C# 等编程语言默认使用 UTF-16 编码。
|
||||
|
||||
## 3.5.1. Q & A
|
||||
## 3.5.1 Q & A
|
||||
|
||||
!!! question "为什么哈希表同时包含线性数据结构和非线性数据结构?"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user