从基础的物理存储来说,存储方式只分为两种:1.连续存储(数组【array】),2. 链式存储(链表【linked list】),所有数据结构都是基于上述存储方式或二者的组合实现的。
-
基础数据存储类型
- 有序存储:列表(List)/元组(Tuple) 二者都属于连续存储(数组【array】)
- 列表/元组/范围都可以看作是基础的存储容器。它们是Python语言内置的序列类型,用于存储多个元素。列表是可变的,元组是不可变的。可以把它们想象成能够容纳各种数据的“盒子”,元素在其中按照一定的顺序排列,并且可以通过索引来访问。
- List(列表):[0,1,2,3,4]
- Tuple(元组):(0,1,2,3,4)
- 列表和元组的区别:
- 列表是可变的,而元组是不可变的。这意味着可以对列表进行添加、删除、修改等操作,但不能对元组进行这些操作。
- 列表使用方括号([])表示,而元组使用圆括号(())表示。
- 补充:范围
range()
(有序序列)- 范围是一种特殊的序列类型,用于生成一系列连续的整数。它通常用于循环中,用于迭代一定范围内的数字。
- 范围的语法是
range(start, stop, step)
,其中start
是起始值(包含在范围内),stop
是结束值(不包含在范围内),step
是步长(默认为1)。例如,range(0, 5)
会生成一个包含0到4的整数序列。但它不等于[0,1,2,3,4]
,而是在Python中作为基础数据存储类型独立存在:range(0,5)
=range(5)
- 有序存储:列表(List)/元组(Tuple) 二者都属于连续存储(数组【array】)
-
基于基础类型构建的数据结构
- 链表(Linked List)
- 链表可以基于节点(Node)来构建,每个节点可以包含数据和指向下一个节点的引用。在Python中虽然没有像其他语言那样有原生的链表类型,但可以通过自定义类,利用列表或者其他基础存储类型来模拟链表的结构。例如,可以定义一个
Node
类,其中包含数据和下一个节点的引用,然后通过这些节点组合成链表。
- 链表可以基于节点(Node)来构建,每个节点可以包含数据和指向下一个节点的引用。在Python中虽然没有像其他语言那样有原生的链表类型,但可以通过自定义类,利用列表或者其他基础存储类型来模拟链表的结构。例如,可以定义一个
- 栈(Stack)和队列(Queue)
- 栈和队列可以使用列表来简单地实现。例如,栈可以将列表的一端作为栈顶,利用列表的
append
(入栈)和pop
(出栈)操作来实现栈的功能;队列可以利用列表或者collections
模块中的deque
来实现,通过append
(入队)和popleft
(出队)操作来模拟队列的先进先出特性。它们是在基础的存储类型上,通过定义特定的操作规则而形成的数据结构。
- 栈和队列可以使用列表来简单地实现。例如,栈可以将列表的一端作为栈顶,利用列表的
- 哈希表(在Python中主要是字典 - Dictionary)
- 字典是Python内置的数据结构,它是基于哈希表实现的。从底层存储角度看,它利用了哈希函数将键(key)映射到特定的存储位置来存储值(value)。虽然在使用时不需要关心底层实现,但实际上它是一种复杂的数据结构,通过巧妙地利用哈希函数和存储机制来实现快速的键 - 值查找、插入和删除操作。
- 树(Tree)和堆(Heap)
- 树和堆在Python中通常需要通过自定义类来构建。以树为例,可以定义一个
TreeNode
类,包含数据、左子节点和右子节点等属性,然后通过这些节点的组合构建树的结构。堆也是一种特殊的树结构,在构建过程中会遵循特定的规则(如最小堆或最大堆的节点大小关系),这些数据结构是在基础存储类型基础上,通过更复杂的组织方式和规则构建起来的。
- 树和堆在Python中通常需要通过自定义类来构建。以树为例,可以定义一个
- 图(Graph)
- 图通常是由顶点(Vertex)和边(Edge)组成。在Python中,构建图结构一般需要借助第三方库或者自定义类。例如,通过定义
Vertex
类和Edge
类,来表示顶点和边的属性,以及它们之间的连接关系,这是一种比较复杂的数据结构,用于表示各种复杂的网络关系。
- 图通常是由顶点(Vertex)和边(Edge)组成。在Python中,构建图结构一般需要借助第三方库或者自定义类。例如,通过定义
- 链表(Linked List)
- 整数(Integer)
- 整数是最基本的数字类型,用于表示整数值。在Python中,整数可以是正数、负数或零。
- 浮点数(Float)
- 浮点数用于表示带有小数部分的数值。在Python中,浮点数可以是正数、负数或零,并且可以包含小数点。
- 字符串(String)
- 字符串是由字符组成的序列,用于表示文本数据。在Python中,字符串可以使用单引号(')或双引号(")括起来。
- 布尔值(Boolean)
- 布尔值表示逻辑上的真(True)或假(False)。在Python中,布尔值只有两个取值:True和False。
- 空值(None)
- 空值表示没有值或空。在Python中,空值用关键字None表示。