数据结构中 数组、链表、图的概念
数据结构是计算机存储、组织数据的方式,数组、链表和图是三种常见的数据结构,下面为你详细介绍它们的概念:
数组
数组是一种线性数据结构,它由一组相同类型的元素组成,这些元素存储在连续的内存位置上。每个元素都可以通过一个唯一的索引来访问,索引通常从 0 开始。
特点
- 随机访问:可以通过索引直接访问数组中的任意元素,时间复杂度为 O(1) 。
- 固定大小:在创建数组时,需要指定数组的大小,一旦确定,大小就不能改变。
- 连续存储:数组元素在内存中是连续存储的,这使得访问元素非常高效,但也可能导致内存碎片问题。
示例
#Python 中创建一个整数数组
array = [1, 2, 3, 4, 5]
# 访问数组中的元素
print(array[2]) # 输出 3
链表
链表是一种线性数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。链表中的节点在内存中不一定是连续存储的。
特点
- 动态大小:链表的大小可以在运行时动态改变,不需要预先分配固定的内存空间。
- 顺序访问:要访问链表中的某个节点,需要从链表的头节点开始,依次遍历每个节点,直到找到目标节点,时间复杂度为
O(n)
。 - 非连续存储:链表节点在内存中可以不连续存储,这使得插入和删除操作非常高效,但随机访问效率较低。
示例
# Python 中实现一个简单的链表节点类
class Node:def __init__(self, data):self.data = dataself.next = None# 创建链表
head = Node(1)
second = Node(2)
third = Node(3)head.next = second
second.next = third# 遍历链表
current = head
while current:print(current.data)current = current.next
图
图是一种非线性数据结构,它由一组节点(也称为顶点)和一组连接这些节点的边组成。图可以用来表示各种实际问题,如社交网络、地图、电路等。
特点
- 多对多关系:图中的节点可以与多个其他节点相连,形成复杂的关系网络。
- 无固定结构:图的结构可以非常灵活,没有像数组和链表那样的固定顺序。
- 表示方法多样:图可以用邻接矩阵、邻接表等多种方式来表示。
示例
# Python 中使用邻接表表示图
graph = {'A': ['B', 'C'],'B': ['A', 'D', 'E'],'C': ['A', 'F'],'D': ['B'],'E': ['B', 'F'],'F': ['C', 'E']
}# 打印图中节点 A 的邻居节点
print(graph['A']) # 输出 ['B', 'C']
综上所述,数组适合随机访问和固定大小的数据存储,链表适合动态插入和删除操作,而图则适合表示复杂的关系网络。在实际应用中,需要根据具体问题的需求选择合适的数据结构。