数据结构的引入
数据结构是一个抽象概念,将其分类后得到程序设计语言中的基本类型。如:int,float,char等。数据元素之间不是独立的,存在特定的关系,这些关系便是结构。数据结构指数据对象中数据元素之间的关系。
Python给我们提供了很多现成的数据结构类型,这些系统自己定义好的,不需要我们自己去定义的数据结构叫做Python的内置数据结构,比如列表、元组、字典。而有些数据组织方式,Python系统中没有直接定义,需要我们自己去定义这些数据的组织方式,这些数据组织方式称为Python的扩展数据结构,比如栈、队列等。
顺序表
在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需创建这种元素组,用变量 它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。
对于该需求,最简单的 解决方法便是将这样一组元素看成一个序列,用元素在序列里信息的位置和顺序,表示实际应用中的某种有意义的信息,或者表示数据之间的某种关系。
这样的一组序列元素的组织形式,可将其抽象为线性表。一个线性表是某类元素的一个集合,记录着元素之间的一种顺序关系。线性表是最基本的数据结构之一,在实际程序中经常被用作更复杂的数据结构的实现基础。
根据线性表的实际存储方式,分为两种实现模型:
- 顺序表,将元素顺序地放在一块连续的存储区里,元素间的顺序关系由他们的存储顺序自然表示。
- 链表,将元素存放在通过链接构造起来的一系列存储块中。
Python中的list和tuple两种类型采用了顺序表的实现技术,tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作,而其他方面,则与list的性质类似。
顺序表的操作
增加元素
如图所示,为顺序表增加新元素111的三种方式:
a. 尾端加入元素,时间复杂度为 O(1)
b. 非保序的加入元素(不常见),时间复杂度为 O(1)
c. 保序的元素加入,时间复杂度为 O(n)
删除元素
a. 删除表尾元素,时间复杂度为 O(1)
b. 非保序的元素删除(不常见),时间复杂度为 O(1)
c. 保序的元素删除,时间复杂度为 O(n)
Pyhton标准类型list是一种元素个数可变的线性表,可以加入和删除元素,并在各种操作中维持已有元素的顺序(即保序)。