1.什么是列表

❖在前面基本数据结构中,采用PythonList来实现了多种线性数据结构
❖列表List是一种简单强大的数据集结构,提供了丰富的操作接口
但并不是所有的编程语言都提供了List数据类型,有时候需要程序员自己实现。
❖列表是一种数据项按照相对位置存放的数据集
特别的,被称为“无序表unordered list”
其中数据项只按照存放位置来索引,如第1个、第2个……、最后一个等。(为了简单起见,假设表中不存在重复数据项)
❖如一个考试分数的集合“54,26,93,17,77和31”
❖如果用无序表来表示,就是[54,26,93,17,77,31]

2.抽象数据类型:无序表List

2.1无序表List的操作如下:

List():创建一个空列表
add(item):添加一个数据项到列表中,假设item原先不存在于列表中
remove(item):从列表中移除item,列表被修改,item原先应存在于表中
search(item):在列表中查找item,返回布尔类型值
isEmpty():返回列表是否为空
size():返回列表包含了多少数据项
append(item):添加一个数据项到表末尾,假设item原先不存在于列表中
index(item):返回数据项在表中的位置
insert(pos, item):将数据项插入到位置pos,假设item原先不存在与列表中,同时原列表具有足够多个数据项,能让item占据位置pos
pop():从列表末尾移除数据项,假设原列表至少有1个数据项
pop(pos):移除位置为pos的数据项,假设原列表存在位置pos

3.采用链表实现无序表

为了实现无序表数据结构,可以采用链接表的方案。
❖虽然列表数据结构要求保持数据项的前后相对位置,
但这种前后位置的保持,
并不要求数据项依次存放在连续的存储空间

❖如下图,数据项存放位置并没有规则,
但如果在数据项之间建立链接指向,就可以保持其前后相对位置

3.1 链表实现:节点Node

❖链表实现的最基本元素是节点Node
每个节点至少要包含2个信息:数据项本身,以及指向下一个节点的引用信息
注意next为None的意义是没有下一个节点了,这个很重要

class Node:def _init_(self,initdata):self.data=initdataself.next=Nonedef getData(self):return self.datadef getNext(self):return self.nextdef setData(self,newdata):self.data=newdatadef setNext(self,newnext):self.next=newnext
temp=Node()
temp._init_(93)
print(temp.getData())
print(temp.getNext())
93
None

3.2 链表实现: 无序表UnorderedList

可以采用链接节点的方式构建数据集来实现无序表
❖链表的第一个和最后一个节点最重要
如果想访问到链表中的所有节点,就必须从第一个节点开始沿着链接遍历下去
❖所以无序表必须要有对第一个节点的引用信息
❖设立一个属性head,保存对第一个节点的引用空表的head为None

class UnorderList:def __init__(self):self.head=None
mylist=UnorderList()
print(mylist.head)
None

随着数据项的加入,无序表的head始终指向链条中的第一个节点
❖注意!无序表mylist对象本身并不包含数据项(数据项在节点中)
其中包含的head只是对首个节点Node的引用
判断空表的isEmpty()很容易实现

❖接下来,考虑如何实现向无序表中添加数据项,实现add方法。
❖由于无序表并没有限定数据项之间的顺序
❖新数据项可以加入到原表的任何位置
❖按照实现的性能考虑,应添加到最容易加入的位置上。

❖由链表结构我们知道要访问到整条链上的所有数据项
❖都必须从表头head开始沿着next链接逐个向后查找
❖所以添加新数据项最快捷的位置是表头,整个链表的首位置。

3.3 链表实现: add方法及实现


❖链接次序很重要!链接次序很重要!链接次序很重要!

3.4 链表实现: size

❖size:从链条头head开始遍历到表尾同时用变量累加经过的节点个数。
链式结构size的时间复杂度为O(n),顺序结构为O(1)。现在为链式

def size(self):current=self.headcount=0while current!=None:count=count+1current=current.getNext()return count

3.5 链表实现: search

❖从链表头head开始遍历到表尾,同时判断当前节点的数据项是否目标

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

3.6 链表实现: remove(item)方法

首先要找到item,这个过程跟search一样,但在删除节点时,需要特别的技巧
current指向的是当前匹配数据项的节点
而删除需要把前一个节点的next指向current的下一个节点
所以我们在search current的同时,还要维护前一个(previous)节点的引用
❖找到item之后,current指向item节点,previous指向前一个节点,开始执行删除,需要区分两种情况:
current是首个节点;或者是位于链条中间的节

def remove(self,item):current=self.headprevious=Nonefound=Falsewhile not found:if current.getData()==item:found=Trueelse:previous=currentcurrent=current.getNext()if previous==None:self.head=current.getNext()else:previous.setNext(current.getNext())

python数据结构:列表相关推荐

  1. Python数据结构--列表(二)

    1.列表元素删除 列表中有了众多元素之后,可能会遇到需要删除全部元素或者某个元素的时候. 1.1 删除全部元素 如果想清空列表中的全部元素,可以使用clear()方法. 如下: a = [1,2,3] ...

  2. Python笔记——基本数据结构:列表、元组及字典

    转载请注明出处:http://blog.csdn.net/wklken/archive/2011/04/10/6312888.aspx Python基本数据结构:列表,元组及字典 一.列表 一组有序项 ...

  3. python数据结构的列表_Python自带数据结构 列表(list)

    Python自带数据结构 列表(list) 列表是Python中最通用的数据类型,可以写成方括号之间的逗号分隔值(项目)列表. 使用列表的重要事项是,列表中的项目不必是相同的类型.也就是说一个列表中的 ...

  4. Python数据结构与算法(一)列表和元组

    本系列总结了python常用的数据结构和算法,以及一些编程实现. 参考书籍:<数据结构与算法 Python语言实现> [美]Michael T.Goodrich, Roberto Tama ...

  5. Python数据结构与算法笔记(六):数据结构——列表和栈

    数据结构介绍 存储一组有关系的数据 数据结构的分类: 树结构 图结构: 列表 列表存储与基本操作 数组: 开辟一定长度的内存,用来存储数据,里面是真实的值.32位机器上,一个整数占4字节.假设第一个数 ...

  6. Python学习 数据结构列表字典元组

    本章节我们主要结合前面所学的知识点来介绍Python数据结构. 1.元组结构(Tuple) 元组由不同的元素组成,每个元素可以存储不同类型的数据,如字符串.数字甚至元组.元组创建后不能修改. 元组通常 ...

  7. python基本数据结构——列表

    一.python基本数据结构--列表 ​ 列表可以实地的增长或者缩短(长度可变),并且可以包含任何类型的对象而不仅仅是包含有单个字符的字符串(异构) ​ 从技术上来讲,Python列表包含了零个或多个 ...

  8. (python)数据结构------列表

    一.数字的处理函数 (一)int() 取整数部分,与正负号无关,举例如下: 1 print(int(-3.6), int(-2.5), int(-1.4)) 2 print(int(3.6), int ...

  9. python删除列表中的重复元素并保持相对顺序不变

    python删除列表中的重复元素并保持相对顺序不变 从列表中删除重复项以便所有元素都是唯一的同时保持原有相对顺序不变 对于列表我们可以使用如下方法: l1 = [1,7,7,8,5,5,4] l2 = ...

最新文章

  1. C#实现汉字转化为拼音
  2. Python 包安装和 postgresql 的一些问题
  3. 多线程编程实战(一)
  4. 用python爬虫抓站的一些技巧总结
  5. SAP Hybris Commerce installer目录下的build.gradle
  6. servlet接收传过来的数据流
  7. 【我的物联网成长记7】物联网主流通信协议解读【华为云分享】
  8. TP6.0 框架的下载,优秀扩展包推荐
  9. 2020年中国地质灾害和地震发生数量、受灾人数和经济损失现状,防护和治理至关重要「图」
  10. 微信小程序 轮播图展示,图片全屏显示
  11. 在计算机中常见的硬盘接口类型有,硬盘接口类型主要有哪几种?
  12. WPA3也不安全啦?H2E了解一下
  13. 机器学习---推荐系统效果评估NDCG
  14. 第11届极客大挑战writeup
  15. 我是佛前的一粒佛珠(请听配乐)
  16. CentOS7设置笔记本合盖不断网
  17. 关于hibernate中invers跟cascade的一点看法
  18. html神坑之button的type属性
  19. 绘制3D海水温盐密度曲面(matplotlib)
  20. 深圳二手房房源市场研究(上)

热门文章

  1. 免费跨行转帐攻略[转]
  2. 歌曲用计算机弹出来网红英语歌,最近抖音很火的英文歌
  3. 人无远虑必有近忧,90后的我如何姑娘熬成婆
  4. Rust之包,箱和模块管理(四):用use关键字引用其他包
  5. 《初入linux》--第二十部分-Apache服务器的几个实用技巧
  6. hadoop3.3.0版本搭建
  7. js正则禁止输中文韩文日文
  8. 方舟编译器将开源!华为邀广大开发者助力鸿蒙系统
  9. 是什么刺激了房企开始布局人工智能?
  10. [Swift]LeetCode825. 适龄的朋友 | Friends Of Appropriate Ages