Python算法与数据结构(二)------ 顺序表
顺序表
目录
一.顺序表的形式
基本形式
图a表示的是顺序表的基本形式,数据元素本身连续存储,每个元素占的存储单元大小固定相同,元素下表是逻辑地址,而元素存储的物理地址(世纪内存地址)可以通过存储区的起始地址Loc(e0)加上逻辑地址(第i个元素)与存储单元大小(c)的乘积计算而得。
Loc(ei) = Loc(e0) + c×i
访问指定元素时无需从头遍历,通过计算便可获得对应地址
若元素的大小不统一,须采用图b所示的元素外置的形式,将实际数据元素另行存储,而顺序表中各单元位置保存对应元素的地址信息(即链接),这和汇编语言中的间接寻址有些类似。由于每个链接所需的存储量相同,通过上述公式,可计算出元素链接的存储位置,而后顺着链接找到实际存储的数据元素。注意,图b中的c不再是数据元素的大小,而是存储一个链接地址所需的存储量,这个量通常很小。
图b这样的顺序表也被称为对实际数据的索引,是最简单的索引结构。
二. 顺序表的结构与实现
2.1 顺序表的结构
一个顺序表的完整信息包括两部分,一部分是表中的元素集合,另一部分是为了实现正确信息操作而需记录的信息,即有关表的整体情况的信息,这部分信息主要包括元素存储区的容量和当前表中已有的元素个数两项。
2.2 顺序表的两种基本实现方式
一体式结构指的是表头和数据区连续存储。
分离式结构指的是表对象里只保存与整个表有关的信息(即容量和元素个数),实际数据元素存放在另一个独立的元素存储区里,通过链接与基本表对象关联。
2.3 元素存储区替换
一体式结构由于顺序表信息区与数据区连续存储在一起,所以若想更换数据区,则只能整体搬迁,即整个顺序表对象(指存储顺序表的结构信息的区域)改变了。而分离式结构若想更换数据区,只需要将表信息区中的数据区链接地址更新即可,而该顺序表对象不变。
2.4 元素存储区扩充
和元素存储区替换的原理近似。对于分离式结构想要扩充数据区,只需要将表信息区中的数据区链接地址更新即可,一体式结构却要添加在新扩充的数据区添加新的表头信息。
扩充的两种策略:
a.每次扩充增加固定数目的存储位置 :节省空间,但扩充操作频繁 b.每次扩充容量加倍:以空间换时间
三. 顺序表的操作
3.1 增加元素
a. 在尾端加入元素,时间复杂度为O(1)
b. 非保序的加入元素,时间复杂度为O(1),这种方式用的并不多
c. 保序的元素加入,时间复杂度为O(n)
3.2 删除元素
和添加元素的原理类似:
a. 删除表尾元素,时间复杂度为O(1)
b. 非保序的元素删除,时间复杂度为O(1),这种方式用的并不多
c. 保序的元素删除,时间复杂度为O(n)
四.Python中的顺序表
list和tuple均采用了顺序表的实现技术
tuple不可变,不支持改变内部状态的任何操作,其他均与list性质类似
- 点赞
- 收藏
- 分享
- 文章举报
- 第七周【项目1】数据结构之自建算法库——顺序环形队列
- 记(java数据结构与算法之顺序表与链表深入分析)
- 数据结构与算法-绪论-(二)python
- Python 数据结构与算法 —— 从分治的角度看快速排序、归并排序
- 数据结构与算法-排序篇-Python描述
- 学点PYTHON基础的东东--数据结构,算法,设计模式---访问者模式
- 数据结构与算法(4)顺序栈
- 数据结构与算法——顺序栈
- 数据结构及算法(Python)---单链表
- python的内置数据结构及基础算法
- Python 数据结构与算法——选取算法(TopK)
- 【数据结构与算法】顺序查找
- c/c++常用算法(1) -- 数据结构(线性表的顺序存储)
- 常用查找数据结构及算法(Python实现)
- Python 数据结构与算法 —— 哈弗曼树
- 数据结构顺序栈对表达式求知算法
- Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法
- Python3 数据结构与算法之选择排序
- Python 数据结构与算法——拓扑排序
- 【数据结构与算法】基本数据结构——队列的顺序表示