1. 有序表

❖有序表是一种数据项依照其某可比性质(如整数大小、字母表先后)来决定在列表中的位置
❖越“小”的数据项越靠近列表的头,越靠“前”

2.抽象数据类型:有序表OrderedList

❖OrderedList所定义的操作如下:

OrderedList():创建一个空的有序表
add(item):在表中添加一个数据项,并保持整体顺序,此项原不存在
remove(item):从有序表中移除一个数据项,此项应存在,有序表被修改
search(item):在有序表中查找数据项,返回是否存在
isEmpty():是否空表
size():返回表中数据项的个数
index(item):返回数据项在表中的位置,此项应存在
pop():移除并返回有序表中最后一项,表中应至少存在一项
pop(pos):移除并返回有序表中指定位置的数据项,此位置应存在

3.有序表OrderedList实现

❖在实现有序表的时候,需要记住的是,数据项的相对位置,取决于它们之间的“大小”比较
由于Python的扩展性,下面对数据项的讨论并不仅适用于整数,可适用于所有定义了__gt__方法(即’>'操作符)的数据类型
❖以整数数据项为例,(17,26,31,54,77,93)的链表形式如图

❖同样采用链表方法实现
❖Node定义相同
❖OrderedList也设置一个head来保存链表表头的引用

class OrderedList:def  __init__(self):self.head=None

❖对于isEmpty/size/remove这些方法,与节点的次序无关,所以其实现跟UnorderedList是一样的。
❖search/add方法则需要有修改

3.1 有序表实现:search方法

❖在无序表的search中,如果需要查找的数据项不存在,则会搜遍整个链表,直到表尾
❖对于有序表来说,可以利用链表节点有序排列的特性,来为search节省不存在数据项的查找时间
一旦当前节点的数据项大于所要查找的数据项,则说明链表后面已经不可能再有要查找的数据项,可以直接返回False

def search(self,item):current=self.headfound=Falsestop=Falsewhile current!=None and not found and not stop:if current.getData()==item:found=Trueelse:if current.getNext()>item:stop=Trueelse:current=current.getNext()return found

3.2 有序表实现:add方法

❖相比无序表,改变最大的方法是add,因为add方法必须保证加入的数据项添加在合适的位置,以维护整个链表的有序性
比如在(17, 26, 54, 77, 93)的有序表中,加入数据项31,我们需要沿着链表,找到第一个比31大的数据项54,将31插入到54的前面
❖由于涉及到的插入位置是当前节点之前,而链表无法得到“前驱”节点的引用
❖所以要跟remove方法类似,引入一个previous的引用,跟随当前节点current
❖一旦找到首个比31大的数据项,previous就派上用场了

4.链表实现的算法分析

❖对于链表复杂度的分析,主要是看相应的方法是否涉及到链表的遍历

❖对于一个包含节点数为n的链表
isEmpty是O(1),因为仅需要检查head是否为None
size是O(n),因为除了遍历到表尾,没有其它办法得知节点的数量
search/remove以及有序表的add方法,则是O(n),因为涉及到链表的遍历,按照概率其平均操作的次数是n/2
无序表的add方法是O(1),因为仅需要插入到表头

❖链表实现的List,跟Python内置的列表数据类型,在有些相同方法的实现上的时间复杂度不同
❖主要是因为Python内置的列表数据类型是基于顺序存储来实现的,并进行了优化

python数据结构: 有序表相关推荐

  1. Java数据结构--有序表

    Predecessor interface /*** Created by root on 16-3-4.*/ public interface Predecessor<E> {publi ...

  2. 数据结构与算法——6. 抽象数据类型:无序表与有序表及其链表实现

    文章目录 一.无序表(unordered list)抽象数据类型 1. 无序表的定义 2. 采用链表实现无序表 (1)链表 (2)链表节点 (3)python实现链表节点 (4)python实现链表 ...

  3. Python数据结构02-顺序表、链表

    Python数据结构 顺序表 Python中的顺序表 list的基本实现 链表 单链表操作 单链表实现 单向循环链表 双向链表 顺序表 顺序表的表中元素存储方式: 顺序表完整信息包含两部分: 1. 表 ...

  4. 数据结构与算法(Python版)十六:有序表抽象数据类型及Python实现

    抽象数据类型:有序表OrderedList 有序表是一种数据项依照其某可比性质(如整数大小. 字母表先后) 来决定在列表中的位置 越"小"的数据项越靠近列表的头, 越靠" ...

  5. python线性表和队列_[笔记]python数据结构之线性表:linkedlist链表,stack栈,queue队列...

    python数据结构之线性表 python内置了很多高级数据结构,list,dict,tuple,string,set等,在使用的时候十分舒心.但是,如果从一个初学者的角度利用python学习数据结构 ...

  6. python有序列表无序列表区别_用Python链表实现有序表与无序表

    用Python链表实现有序表与无序表 <数据结构与算法>MOOC(北大地空)课堂笔记 2020.4 by dlnb526 啥是链表 链表,顾名思义,顾名思义,链表像锁链一样,由一节节节点连 ...

  7. 数据结构之python实现顺序表

    数据结构之python实现顺序表 顺序表是指采用顺序存储的方式来存储数据元素的线性表. 初始化以及创建顺序表 class SequenceList(object):def __init__(self) ...

  8. Python数据结构学习笔记——链表:无序链表和有序链表

    目录 一.链表 二.无序链表 实现步骤分析 三.无序链表的Python实现代码 四.有序链表 实现步骤分析 五.有序链表的Python实现代码 结语 一.链表 链表中每一个元素都由为两部分构成:一是该 ...

  9. c语言折半查找输出坐标,数据结构(C语言版)——有序表查找(折半查找)(代码版)...

    数据结构(C语言版)--有序表查找(折半查找)(代码版) 数据结构(C语言版)--有序表查找(折半查找)(代码版) #include #include #define ERROR 0 #define ...

最新文章

  1. ZOJ 3805--解题报告
  2. php mysql两个表合并_php – 我可以将两个MySQL查询合并为一个吗?
  3. mysql当前时间减1小时_最佳睡眠时间:晚上睡眠不超8小时,午睡不超1小时
  4. 第五讲 计算机体系结构 内存层次
  5. stm32固件库assert_param()
  6. [转] Windows 下校验 Fedora 安装文件
  7. SAP ABAP实用技巧介绍系列之 通过ST03G查询指定transaction的trace data
  8. 机器学习学习吴恩达逻辑回归_机器学习基础:逻辑回归
  9. linux驱动的中断函数,嵌入式Linux驱动开发(四)——字符设备驱动之中断方式以及中断方式获取按键值...
  10. Matlab使用for循环将多个行向量合成一个行向量或者一个多维矩阵
  11. SLIC超像素分割的算法介绍和源码分析(C++)
  12. NFine.Framework框架去除cookie后门方法
  13. 给js对象定义属性的方法
  14. 大气数据计算机英语,大气数据计算机(ADC)
  15. 向日葵远程控制连接服务器黑屏原因
  16. Windows蓝屏漏洞(利用多种途径与分析)
  17. 为知笔记的快捷键整理
  18. 报错解决:symbol lookup error-----undefined symbol: JLI_StringDup
  19. cf英文名字格式好看的_CF英文名字大全 穿越火线英文名字设计
  20. ad17编辑界面怎么检查未连线_EZCast投屏软件提示未发现装置,请检查网路连线状态怎么办?...

热门文章

  1. Rails 中 scope
  2. Idea内存占用过高解决方法
  3. word中四号字体对应于14pt,其他字号如下
  4. 18天精读掌握《费曼物理学讲义卷一》 第12天 2019/6/28
  5. 查询用户上次登录时间问题
  6. Vmware安装迷你版的 Centos6 并配置 Nat 模式可访问外网
  7. Javris OJ - pwn level5(mmap和mprotect练习)(_libc_csu_init中的通用gedget的使用)
  8. deeplearningwithpython豆瓣_Python 学习资源教程(待续)
  9. win10+Eclipse简单快速安装(以及中文汉化与安装插件)
  10. 计算机专业相关的职业技术证书有哪些,你知道吗?