Python数据结构与算法(四)--顺序表
顺序表
在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。
根据线性表的实际存储方式,分为两种实现模型:
顺序表,将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示。
链表,将元素存放在通过链接构造起来的一系列存储块中。
顺序表的形式
a表示的是顺序表的基本形式,数据元素本身连续存储,每个元素所占的存储单元大小固定相同,元素的下标是其逻辑地址,而元素存储的物理地址(实际内存地址)可以通过存储区的起始地址Loc (e0)加上逻辑地址(第i个元素)与存储单元大小(c)的乘积计算而得,即:
Loc(ei) = Loc(e0) + c*i
故,访问指定元素时无需从头遍历,通过计算便可获得对应地址,其时间复杂度为O(1)。
如果元素的大小不统一,则须采用图b的元素外置的形式,将实际数据元素另行存储,而顺序表中各单元位置保存对应元素的地址信息(即链接)。由于每个链接所需的存储量相同,通过上述公式,可以计算出元素链接的存储位置,而后顺着链接找到实际存储的数据元素。注意,图b中的c不再是数据元素的大小,而是存储一个链接地址所需的存储量,这个量通常很小。
图b这样的顺序表也被称为对实际数据的索引,这是最简单的索引结构。
顺序表的两种实现
图a为一体式结构,存储表信息的单元与元素存储区以连续的方式安排在一块存储区里,两部分数据的整体形成一个完整的顺序表对象。
一体式结构整体性强,易于管理。但是由于数据元素存储区域是表对象的一部分,顺序表创建后,元素存储区就固定了。
图b为分离式结构,表对象里只保存与整个表有关的信息(即容量和元素个数),实际数据元素存放在另一个独立的元素存储区里,通过链接与基本表对象关联。
顺序表的操作
添加元素
为顺序表增加新元素111的三种方式
a. 尾端加入元素,时间复杂度为O(1)
b. 非保序的加入元素(不常见),时间复杂度为O(1)
c. 保序的元素加入,时间复杂度为O(n)
删除元素
a. 删除表尾元素,时间复杂度为O(1)
b. 非保序的元素删除(不常见),时间复杂度为O(1)
c. 保序的元素删除,时间复杂度为O(n)
Python中的顺序表
Python中的list和tuple两种类型采用了顺序表的实现技术,具有前面讨论的顺序表的所有性质。
tuple是不可变类型,即不变的顺序表,因此不支持改变其内部状态的任何操作,而其他方面,则与list的性质类似。
Python数据结构与算法(四)--顺序表相关推荐
- java数据结构与算法之顺序表与链表深入分析
转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...
- 【数据结构与算法】顺序表V3.0的Java实现
更新说明 经过了顺序表V1.0的根据接口编写成型.顺序表V2.0的功能大幅度增强,这里推出了顺序表V3.0,功能的丰富性不及V2.0,但加入了迭代器,代码的编写也更加的合理了,应该说是比较好的作品了. ...
- php算法结构,PHP数据结构与算法:顺序表
一.概念 把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里,元素间的顺序关系由它们的存储顺序自然表示. 逻辑顺序与物理顺序一致 元素之间的关系以元素在计算机内的"物理位置相邻&qu ...
- (PTA数据结构与算法) 6-2 顺序表操作集 ——请告诉我什么是顺序表!!!
6-2 顺序表操作集 (20 分) 本题要求实现顺序表的操作集. 函数接口定义: List MakeEmpty(); Position Find( List L, ElementType X ); b ...
- 数据结构与算法:顺序表和链表的常用操作 (很全,基本涵盖本章所有算法)
文章目录 前言: 一.顺序表 二.链表 前言: 数据结构中的表操作算是里面较为简单的章节,但也比较重要,3月份学完的此章节,左思右想今天还是写篇 关于顺序表和链表的博客. ps : 复制代码可以在编译 ...
- 数据结构与算法笔记——顺序表(数组)与矩阵
目录 前言 一.顺序表的结构 二.顺序表的初始化 三.基本操作 1.插入数据 2.删除数据 3.查找数据 总结 前言 顺序表是线性表的顺序存储结构的实现,基本操作有顺序表的初始化.插入.删除和查询. ...
- 【数据结构与算法】顺序表的Java实现
定义接口 首先定义一个接口,作为规范. 为了能够有更强的适用性,我们定义的泛型类. 提供的功能有: 遍历线性表并打印: 求线性表的长度: 按值查找: 按位查找: 在指定逻辑位置插入: 删除指定逻辑位元 ...
- 【数据结构与算法】顺序表V2.0的Java实现
接口 public interface ISequentialList<T> {/*** 获取长度* @return*/int size();/*** 判空* @return*/boole ...
- Python数据结构与算法(2.2)——顺序表
Python数据结构与算法(2.2)--顺序表 0. 学习目标 1. 线性表的顺序存储结构 1.1 顺序表基本概念 1.2 顺序表的优缺点 1.3 动态顺序表 2. 顺序表的实现 2.1 顺序表的初始 ...
最新文章
- asp遍历前端的所有控件
- Unity中BVH骨骼动画驱动的可视化理论与实现
- Deepin 下 使用 Rider 开发 .NET Core
- Linux操作系统之简易实现server/client
- 华为表示年内没有推出搭载鸿蒙操作系统手机的计划;OpenStack或被抛弃?iPhone至少还要三年可苹果自研5G调制解调器……...
- [PYTHON] 核心编程笔记(14.Python执行环境)
- 导出mysql数据库表结构文档
- 【JavaScript 笔记 】— 基础语法(数据类型、字符串、数组、对象、Map、Set、iterable、函数基础)
- 【图像处理】MATLAB:彩色图像处理
- Desktop Video for Mac(桌面视频)最新版
- clang-format的使用
- 网络安全从业人员应具备的职业素养
- QtVtk-009-Cone4
- 【Linux网络编程】UDP 套接字编程
- 学习Spreadsheet常用属性
- 智能家居app开发十大核心功能
- 移动互联网未来的发展前景
- openwrt x86 登录不上_OpenWrt X86 安装教程
- java微信H5授权登录
- 项目管理 : 故事-04扁鹊的医术
热门文章
- 一篇文章解释struts常用功能
- python删除链表中的最小元素_LintCode Python 入门级题目 删除链表元素、整数列表排序...
- java oracle 排序_Oracle的排序和限制条件(order by 和where)
- [转载] python元组 tuple
- treeset java_Java TreeSet clear()方法与示例
- 如何在Java中检查字符串是否为数字?
- scala中的二维数组_Scala中的多维数组
- scala 类中的对象是类_Scala中的类和对象
- Java核心(二)深入理解线程池ThreadPool
- Spring Boot 最佳实践(一)快速入门