参考自 MOOC数据结构与算法Python版

目录

  • 一、什么是列表List
  • 二、抽象数据类型List
    • 2.1 List的基本操作
  • 三、 Python实现链表:节点Node
    • 3.1 从尾到头打印链表

一、什么是列表List

一种数据项按照相对位置存放的数据集,特别的,被称为“无序表unordered list”, 其中数据项只按照存放位置来索引,如第1个、第2个……、最后一个等。

二、抽象数据类型List

2.1 List的基本操作

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

三、 Python实现链表:节点Node

  • 为了实现无序表数据结构, 可以采用链接表的方案。
  • 虽然列表数据结构要求保持数据项的前后相对位置, 但这种前后位置的保持, 并不要求数据项依次存放在连续的存储空间(在数据项之间建立链接指向, 就可以保持其前后相对位置)
  • 链表实现的最基本的元素是Node
  • 每个节点至少要包含2个信息: 数据项本身,以 及指向下一个节点的引用信息。注意:next为None的意义是没有下一个节点了

链表实现:

  • 可以采用链接节点的方式构建数据集来实现无序表
  • add: 最后被加入的数据项是头节点
  • size:从链条头head开始遍历到表尾同时用变量累加经过的节点个数
  • search:从链表头head开始遍历到表尾, 同时判断当前节点的数据项是否目标
  • remove(item):首先要找到item, 这个过程跟search一样, 但在删除节点时, 需要特别的技巧:current指向的是当前匹配数据项的节点,而删除需要把前一个节点的next指向current的下一个节点,所以我们在search current的同时,还要维护前一个(previous)节点的引用。找到item之后, current指向item节点,previous指向前一个节点, 开始执行删除,需要区分两种情况:
    1. current是首个节点
    2. 位于链条中间的节点

代码如下:

class Node:def __init__(self,initdata):self.data = initdataself.next = Noneself.head = Nonedef getData(self):return self.datadef getNext(self):return self.nextdef setData(self,newdata):self.data = newdatadef setNext(self, newnext):self.next = newnextdef add(self, item):temp = Node(item)temp.setNext(self.head)self.head = tempdef size(self):current = self.headcount = 0while current!=None:count += 1current = current.getNext()return countdef search(self,item):current = self.headfound = Falsewhile current != None and not found:if current.getData() == item:found = Trueelse:current = current.getNext()return founddef 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)

3.1 从尾到头打印链表

剑指offer原题,复原了接口

class Solution:# 返回从尾部到头部的列表值序列,例如[1,2,3]def printListFromTailToHead(self, listNode):# write code here# 方法一  使用栈if not listNode:return []temp = []result = []while listNode:temp.append(listNode.value) # 进栈listNode = listNode.nextwhile temp:result.append(temp.pop()) # 出栈return result
class node(object):def __init__(self, item):self.value = itemself.next = None
if __name__ == '__main__':# 创建链表head_node = node(67)node1 = node(0)node2 = node(24)node3 = node(58)head_node.next = node1node1.next = node2node2.next = node3so = Solution()print(so.printListFromTailToHead(head_node))
output:
[58, 24, 0, 67]

数据结构与算法(python) 线性结构:无序列表 Unordered List以及链表相关推荐

  1. 数据结构与算法之线性结构链表

    数据结构与算法之线性结构链表 这一篇文章主要介绍的是通过java实现单链表.循环链表和双向循环链表,仅供自己复习使用,如有什么不足之处,欢迎指出. 单链表: package xianxingjiego ...

  2. 数据结构与算法之线性表(超详细顺序表、链表)

    原创公众号:bigsai 文章已收录在 全网都在关注的数据结构与算法学习仓库 欢迎star 前言 通过前面数据结构与算法基础知识我么知道了数据结构的一些概念和重要性,那么我们今天总结下线性表相关的内容 ...

  3. python函数结构图_Python数据结构与算法之图结构(Graph)实例分析

    本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...

  4. python define graph_Python数据结构与算法之图结构(Graph)实例分析

    本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...

  5. 从零开始学数据结构和算法(二)线性表的链式存储结构

    链表 链式存储结构 定义 线性表的链式存储结构的特点是用一组任意的存储单元的存储线性表的数据元素,这组存储单元是可以连续的,也可以是不连续的. 种类 结构图 单链表 应用:MessageQueue 插 ...

  6. 《数据结构与算法 Python语言描述》 读书笔记

    已经发布博客 <数据结构与算法 Python语言描述> 读书笔记 第二章 抽象数据类型和Python类 2.1 抽象数据类型abstract data type:ADT 2.1.1 使用编 ...

  7. 数据结构与算法python版 MOOC 第三周

    三.基本线性结构 本系列博客基于" (北京大学)数据结构与算法python版"慕课,课程在中国大学慕课和bilibili上均可找到. 1. 内容 定义线性结构 讲解栈的结构结构 栈 ...

  8. 数据结构与算法python版 MOOC 第九周

    九.树及算法-上 本系列博客基于" (北京大学)数据结构与算法python版"慕课,课程在中国大学慕课和bilibili上均可找到. 1. 内容 树结构的相关术语 树的表示方法:嵌 ...

  9. 数据结构python课后答案_数据结构与算法:Python语言描述 1~5章课后习题

    数据结构与算法:Python语言描述 1~5章课后习题 发布时间:2018-07-19 20:42, 浏览次数:1885 , 标签: Python MarkDown语法写的,不知道为啥上传到CSDN不 ...

最新文章

  1. NVIDIA深度架构
  2. java 多线程 1 “常用的实现多线程的2种方式”:Thread 和 Runnable
  3. 在myeclipse文件中如何创建properties类型的文件,从而连接数据库
  4. [NOIP2001]Car的旅行路线
  5. vue-cli-service 不是内部或者外部命令的解决办法(用了你就知道了)
  6. mpvue生命周期初探
  7. oracle表设置主键自增长,笔记:oracle表设置主键自增长
  8. java借口案例实现_java实现接口的典型案例
  9. markdown如何设置图片大小_不会吧,还不会用markdown排版吗
  10. linux 之静默安装oracle
  11. Unity3D基础22:GUI Texture组件/Sence下显示图片
  12. [python]上传文件验证
  13. python程序设计基础第二版pdf下载_Python语言程序设计基础(第二版) 包含Python语言程序设计基础(第二版)pdf - 下载 - 搜珍网...
  14. UML常用图--类图,用例图,序列图(时序图),协作图(通信图),状态图,活动图
  15. java发送http请求 utf8_Java 发送http请求(get、post)的示例
  16. 常见的网络流量识别技术
  17. Python中Print()函数的用法___实例详解(全,例多)
  18. 跟零计算机基础的房东女儿讲了一下午的中间人劫持京东事件后,她感激涕零,决定给我免除房租......
  19. Hazelcast Jet Pipeline详解
  20. 节能与环保杂志节能与环保杂志社节能与环保编辑部2023年第2期目录

热门文章

  1. 为什么支付宝跨行转账可以不收费?支付宝为什么要做这个业务?盈利模式是什么?
  2. 健康档案开放工作机制_使开放的组织工作(书)
  3. 【计算机毕业设计】美容美发微信小程序的设计与实现
  4. 共享经济:团队共享VS个体共享
  5. S32K14x CAN休眠唤醒的实现方案
  6. 循黑线程序c语言,51单片机舵机循黑线小车程序
  7. 模拟【CSP201609-3炉石传说】
  8. linux 命令行 mpv,在Ubuntu本机编译mpv,秒杀其他播放器
  9. 思王弗(写测试类注释时突发奇想)
  10. 极简投资笔记-做一个富有的你自己