Luna Tech | 聊聊数据类型(Data Type)

July 24, 2020 字数 1399 3 min


0. 前言

上次跟大家聊了一些计算机的基本概念,今天跟大家聊聊数据类型(Data Type)这个基本概念。


1. 数据类型有哪些?

数据类型可以分为三种:

  1. Primitive(原始型):boolean, integer, float, char..
  2. Composite(复合型):struct, array, string..
  3. Abstract(抽象型):tuple, set, stack, queue, graph…

Primitive 是最最基本的类型,就好比乐高积木的一个小正方形颗粒。

Composite 就是把 Primitive 或者 Composite 组合起来的类型。

那 Abstract 是什么类型呢?

这种类型是根据数据的行为特征来定义的(下面会详聊)。

绝大多数情况下,Primitive Type 都是 Value Type。

Value Type vs Reference Type

Value Type(实值型) 和 Reference Type(引用型)有很多区别,之前我做过一个基于 C# 的讲解视频,大家感兴趣的话可以去看一下,在此不继续展开。


2. Composite(复合型)

Composite 类型要从两个方面来理解:

1

它用来描述一个包含多个 Primitive 或者 Composite 的数据类型。

比如 string 是 Composite 类型,char 是 Primitive 类型(a 是一个 char,ab 就是一个 string)。

string 的本质上不就是一堆的 char 吗?

于是人们就给【一堆 char】取了个名字,叫 string。

2

本质上,Composite 的排列组合是通过某种数据结构来实现的。

比如 string 的例子里,array 是我们用来组合 char 的数据结构(之后我们会聊数据结构)。


3. Abstract(抽象型)

简称 ADT (Abstract Data Type)。

它基于数据结构的使用者角度,来描述这种数据结构的预期行为。

比如:

  • list 是一个 Abstract,它表示的是一些有序的值;我们可以把 list 里面的所有数据一个个拿出来看。
  • 一个包含 10 个 string 的 list,我们可以先看看第一个 string 长啥样,再看第二个,直到看完所有的 string。

iterable 指的就是【从头到尾】查看某个数据结构里的【每个成员】的这种特性。

为什么这种数据类型被称为 Abstract 类型呢?

因为这只是一个抽象的想法,只是一种数据结构行为的描述。

所以我们可以用各种各样的数据结构来实现 list 所需要的行为,比如 ‘linked list’ 就是 ‘list’ 的一种实现形式。

还有哪些 Abstract 类型呢?

接下来我们再谈谈另外的几种 Abstract 类型。

假如有 3 个数据排成一排,分别叫做 1 号数据,2 号数据,3 号数据。

1 号数据来的最早,3 号数据到的最晚。

现在我们可以根据两种不同的原则来拿数据:

  1. 【后进先出】(Last In First Out)原则:3 号,你来的最晚,你先出来!
  2. 【先进先出】(First In First Out)原则:1 号,你来得最早,你先出来!

根据这两种不同的行为,我们就有了这两个 Abstract 数据类型 —— queue 和 stack。

顾名思义,queue 是排队,也就是先来后到原则,1 号先来的,1 号就应该先出去。

ADT - Queue

stack 有叠加的感觉,既然是叠上去的,就很难把最下面的那个数据先拿出来,3 号最后一个来的,也是第一个出去的。

ADT - Stack

另外还有很多 Abstract 类型,比如 Tree, Graph, Set… 在这里暂时不做展开啦。 有一种很重要的 Abstract 类型,叫做 Associative Array(关联数组),我们接下来会讲到。


4. 结语

最后,总结一下本文的核心:

  1. Data Type(数据类型)分三种,Primitive(原始型),Composite(复合型),Abstract(抽象型)
  2. Primitive 就是乐高积木的基本颗粒(int, bool, char..)
  3. Composite 本质上就是用某种数据结构来排列组合 Primitive 和 Composite,然后再给这种组合取个名字(string 等于【一堆 char】)
  4. Abstract 是用来描述数据的行为的,我们需要用数据结构来实现 Abstract 类型所定义的行为准则
  5. 顺便还提了一下 queue 和 stack 的区别,一个是先进先出(公平排队!),一个是后进先出

希望大家看完之后有所收获~


Talk to Luna


Support Luna