1. 线性表基础:从数学定义到Python实现
线性表(Linear List)是数据结构中最基础、最常用的组织形式之一。简单来说,线性表就是n个数据元素的有限序列,其中每个元素都有且仅有一个直接前驱和一个直接后继(除了首尾元素)。这种结构就像我们日常生活中排队一样,每个人都知道自己前面是谁、后面是谁。
在数学上,线性表可以表示为L=(a₁, a₂, ..., aₙ),其中aᵢ代表第i个元素,n称为线性表的长度。当n=0时,称为空表。线性表可以用二元组表示为L=(D, R),其中D是数据元素的集合,R是元素间关系的集合。
Python中虽然没有内置的"线性表"类型,但我们可以用多种方式来实现它:
python复制# 最简单的线性表实现 - 使用列表
linear_list = [10, 20, 30, 40, 50]
# 访问元素
print(linear_list[2]) # 输出30,时间复杂度O(1)
# 遍历线性表
for item in linear_list:
print(item)
线性表的两大物理存储结构是顺序存储(数组实现)和链式存储(链表实现)。Python的list实际上是一种动态数组,它提供了顺序存储的诸多特性:
注意:虽然Python的list使用起来很方便,但它并不是纯粹的数组实现,而是做了很多优化。在需要严格顺序存储的场景下,可以考虑使用array模块。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 顺序表实现:Python列表的底层原理
顺序表是在内存中用一段连续的地址空间依次存放线性表的元素。Python的list就是基于顺序表实现的动态数组结构,但它比传统数组更强大。
2.1 列表的内存分配策略
Python列表使用了一种过度分配的策略来提高性能。当我们创建一个空列表时,Python实际上会分配比当前所需更多的内存空间:
python复制import sys
lst = []
print(sys.getsizeof(lst)) # 64字节(64位Python)
for i in range(100):
lst.append(i)
if i % 10 == 0:
print(f"元素数量:{i+1}, 占用内存:{sys.getsizeof(lst)}字节"
