顺序表

在程序中,经常需要将一组(通常是同为某个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。

根据线性表的实际存储方式,分为两种实现模型:

顺序表,将元素顺序地存放在一块连续的存储区里,元素间的顺序关系由它们的存储顺序自然表示。

链表,将元素存放在通过链接构造起来的一系列存储块中。

顺序表的形式

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数据结构与算法(四)--顺序表相关推荐

  1. java数据结构与算法之顺序表与链表深入分析

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...

  2. 【数据结构与算法】顺序表V3.0的Java实现

    更新说明 经过了顺序表V1.0的根据接口编写成型.顺序表V2.0的功能大幅度增强,这里推出了顺序表V3.0,功能的丰富性不及V2.0,但加入了迭代器,代码的编写也更加的合理了,应该说是比较好的作品了. ...

  3. php算法结构,PHP数据结构与算法:顺序表

    一.概念 把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里,元素间的顺序关系由它们的存储顺序自然表示. 逻辑顺序与物理顺序一致 元素之间的关系以元素在计算机内的"物理位置相邻&qu ...

  4. (PTA数据结构与算法) 6-2 顺序表操作集 ——请告诉我什么是顺序表!!!

    6-2 顺序表操作集 (20 分) 本题要求实现顺序表的操作集. 函数接口定义: List MakeEmpty(); Position Find( List L, ElementType X ); b ...

  5. 数据结构与算法:顺序表和链表的常用操作 (很全,基本涵盖本章所有算法)

    文章目录 前言: 一.顺序表 二.链表 前言: 数据结构中的表操作算是里面较为简单的章节,但也比较重要,3月份学完的此章节,左思右想今天还是写篇 关于顺序表和链表的博客. ps : 复制代码可以在编译 ...

  6. 数据结构与算法笔记——顺序表(数组)与矩阵

    目录 前言 一.顺序表的结构 二.顺序表的初始化 三.基本操作 1.插入数据 2.删除数据 3.查找数据 总结 前言 顺序表是线性表的顺序存储结构的实现,基本操作有顺序表的初始化.插入.删除和查询. ...

  7. 【数据结构与算法】顺序表的Java实现

    定义接口 首先定义一个接口,作为规范. 为了能够有更强的适用性,我们定义的泛型类. 提供的功能有: 遍历线性表并打印: 求线性表的长度: 按值查找: 按位查找: 在指定逻辑位置插入: 删除指定逻辑位元 ...

  8. 【数据结构与算法】顺序表V2.0的Java实现

    接口 public interface ISequentialList<T> {/*** 获取长度* @return*/int size();/*** 判空* @return*/boole ...

  9. Python数据结构与算法(2.2)——顺序表

    Python数据结构与算法(2.2)--顺序表 0. 学习目标 1. 线性表的顺序存储结构 1.1 顺序表基本概念 1.2 顺序表的优缺点 1.3 动态顺序表 2. 顺序表的实现 2.1 顺序表的初始 ...

最新文章

  1. asp遍历前端的所有控件
  2. Unity中BVH骨骼动画驱动的可视化理论与实现
  3. Deepin 下 使用 Rider 开发 .NET Core
  4. Linux操作系统之简易实现server/client
  5. 华为表示年内没有推出搭载鸿蒙操作系统手机的计划;OpenStack或被抛弃?iPhone至少还要三年可苹果自研5G调制解调器……...
  6. [PYTHON] 核心编程笔记(14.Python执行环境)
  7. 导出mysql数据库表结构文档
  8. 【JavaScript 笔记 】— 基础语法(数据类型、字符串、数组、对象、Map、Set、iterable、函数基础)
  9. 【图像处理】MATLAB:彩色图像处理
  10. Desktop Video for Mac(桌面视频)最新版
  11. clang-format的使用
  12. 网络安全从业人员应具备的职业素养
  13. QtVtk-009-Cone4
  14. 【Linux网络编程】UDP 套接字编程
  15. 学习Spreadsheet常用属性
  16. 智能家居app开发十大核心功能
  17. 移动互联网未来的发展前景
  18. openwrt x86 登录不上_OpenWrt X86 安装教程
  19. java微信H5授权登录
  20. 项目管理 : 故事-04扁鹊的医术

热门文章

  1. 一篇文章解释struts常用功能
  2. python删除链表中的最小元素_LintCode Python 入门级题目 删除链表元素、整数列表排序...
  3. java oracle 排序_Oracle的排序和限制条件(order by 和where)
  4. [转载] python元组 tuple
  5. treeset java_Java TreeSet clear()方法与示例
  6. 如何在Java中检查字符串是否为数字?
  7. scala中的二维数组_Scala中的多维数组
  8. scala 类中的对象是类_Scala中的类和对象
  9. Java核心(二)深入理解线程池ThreadPool
  10. Spring Boot 最佳实践(一)快速入门