This commit is contained in:
krahets
2023-08-19 22:07:27 +08:00
parent 71c7786f51
commit 2e27ad1680
99 changed files with 283 additions and 283 deletions
+1 -1
View File
@@ -2,7 +2,7 @@
comments: true
---
# 3.2.   基本数据类型
# 3.2   基本数据类型
谈及计算机中的数据,我们会想到文本、图片、视频、语音、3D 模型等各种形式。尽管这些数据的组织形式各异,但它们都由各种基本数据类型构成。
+6 -6
View File
@@ -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 级别)。
+1 -1
View File
@@ -3,7 +3,7 @@ comments: true
icon: material/shape-outline
---
# 3.   数据结构
# 第 3 章   数据结构
<div class="center-table" markdown>
+3 -3
View File
@@ -2,13 +2,13 @@
comments: true
---
# 3.3. &nbsp; 数字编码 *
# 3.3 &nbsp; 数字编码 *
!!! note
在本书中,标题带有的 * 符号的是选读章节。如果你时间有限或感到理解困难,可以先跳过,等学完必读章节后再单独攻克。
## 3.3.1. &nbsp; 原码、反码和补码
## 3.3.1 &nbsp; 原码、反码和补码
从上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个。例如,`byte` 的取值范围是 $[-128, 127]$ 。这个现象比较反直觉,它的内在原因涉及到原码、反码、补码的相关知识。
@@ -92,7 +92,7 @@ $$
补码的设计非常精妙,因篇幅关系我们就先介绍到这里,建议有兴趣的读者进一步深度了解。
## 3.3.2. &nbsp; 浮点数编码
## 3.3.2 &nbsp; 浮点数编码
细心的你可能会发现:`int``float` 长度相同,都是 4 bytes,但为什么 `float` 的取值范围远大于 `int` ?这非常反直觉,因为按理说 `float` 需要表示小数,取值范围应该变小才对。
+2 -2
View File
@@ -2,7 +2,7 @@
comments: true
---
# 3.5. &nbsp; 小结
# 3.5 &nbsp; 小结
- 数据结构可以从逻辑结构和物理结构两个角度进行分类。逻辑结构描述了数据元素之间的逻辑关系,而物理结构描述了数据在计算机内存中的存储方式。
- 常见的逻辑结构包括线性、树状和网状等。通常我们根据逻辑结构将数据结构分为线性(数组、链表、栈、队列)和非线性(树、图、堆)两种。哈希表的实现可能同时包含线性和非线性结构。
@@ -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. &nbsp; Q & A
## 3.5.1 &nbsp; Q & A
!!! question "为什么哈希表同时包含线性数据结构和非线性数据结构?"