数据结构与算法python-第三节-链表

文章目录

  • 数据结构与算法python-第三节-链表
    • 一 链表和顺序表的区别在哪儿呢?
      • 为什么需要链表?
      • 链表的定义
      • 链表的原理
    • 二 单向链表
      • 单链表的常规操作
      • 链表的实现
      • 单链表的实现及测试
      • 单链表与顺序表的对比

一 链表和顺序表的区别在哪儿呢?

同样的,我们还是要存储一组数据。而且存储空间不够的时候,需动态的改变数据区。当我们存储的是离散的数据,我们该使用什么样的数据结构进行串联存储呢?

为什么需要链表?

顺序表的构建需要预选知道数据大小来申请连续的存储空间,而在进行扩充时,又需要进行数据的搬迁,所有使用起来并不是很灵活。而链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理

链表的定义

链表是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,而是在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)

链表的原理

二 单向链表

即方向唯一的链表
单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个连接指向链表中的下一个节点而最后一个节点的链接域则指向一个空格。第一个节点叫做节点,最后一个节点称为伪节点。

表元素域elem用来存放具体的数据;链接域next用来存放下一个节点的位置。
变量p指向链表的头节点的位置,从p出发能找到表中的任意节点

单链表的常规操作

  • is_empty() 链表是否为空
  • lenth() 链表长度
  • travel() 遍历整个链表
  • add() 链表头部添加元素
  • append() 链表尾部添加元素
  • insert() 指定位置添加元素
  • remove() 删除节点
  • search() 查找节点是否存在

链表的实现

在这里有个点要提,关于a=10,b=20;a,b = b,a,改变的是地址的导向,a和b保存的都是对象的地址
节点实现

class SingleNode(object):'''单链表的结点'''def __init__(self,item):# _item存放数据元素self.item = item# _next是下一个节点的标识self.next = None

单链表的实现及测试

class SingleNode(object):'''单链表的结点'''def __init__(self,elem):# _item存放数据元素self.elem = elem# _next是下一个节点的标识self.next = None
class SingleLinkList(object):'''单链表'''def __init__(self,node=None):self.__head = nodedef is_empty(self):'''链表是否为空'''return self.__head==Nonedef length(self):"""链表长度"""# cur游标,用来移动遍历节点cur = self.__head# count记录数量count = 0while cur != None:count += 1cur = cur.nextreturn countdef travel(self):"""遍历整个链表"""cur = self.__headwhile cur != None:print(cur.elem)cur = cur.nextdef add(self,item):"""链表头部添加元素"""node = SingleNode(item)node.next = self.__headself.__head=nodedef append(self,item):"""链表尾部添加元素"""node = SingleNode(item)if self.is_empty():self.__head = nodeelse:cur = self.__headwhile cur.next !=None:cur = cur.nextcur.next = nodedef insert(self,pos,item):"""指定位置插入元素"""""":param pos 从0开始:item elem 元素值"""if pos <=0:self.add(item)elif pos>self.length()-1:self.append(item)else:pre = self.__headcount =0while count < pos - 1:count +=1pre = pre.next# 当循环结束后,pre指向pos-1位置node =SingleNode(item)node.next = pre.nextpre.next =nodedef remove(self,item):"""删除节点"""cur = self.__headpre = Nonewhile cur != None:if cur.elem == item:if cur == self.__head:self.__head = cur.nextelse:pre.next = cur.nextbreakelse:pre = curcur = cur.nextdef search(self,item):"""查找节点是否存在"""cur = self.__headwhile cur.next != None:if cur.elem == item:return Trueelse:cur = cur.nextreturn Falseif __name__ == "__main__":ll = SingleLinkList()print(ll.is_empty())print(ll.length())ll.append(1)print(ll.is_empty())print(ll.length())ll.append(2)ll.append(4)ll.append(3)ll.travel()print(ll.length())ll.add(8)print()ll.travel()print()ll.insert(-1,10)ll.insert(1, 7)ll.insert(10,99)ll.travel()print()ll.remove(10)ll.remove(99)ll.travel()

单链表与顺序表的对比

链表失去了顺序表随机读取的优点,同时链表由于增加了节点的指针域,空间开销比较大,但对存储空间的使用要相对灵活
链表与顺序表的各种操作复杂度如下所示:

注意虽然表面看起来复杂度都是O(n),但是链表和顺序表在插入和删除时进行的是完全不同的操作。链表的主要耗时操作是遍历查找,删除和插入操作本身的复杂度是O(1)。顺序表查找很快,主要耗时的操作是拷贝和覆盖。因为除了目标在尾部的特殊情况,顺序表进行插入和删除时需要对操作点之后的所有元素进行前后移位操作,只能通过拷贝和覆盖的方法进行。

数据结构python-第三节相关推荐

  1. 【数据结构Python描述】优先级队列描述“银行VIP客户插队办理业务”及“被插队客户愤而离去”的模型实现

    文章目录 一.支持插队模型的优先级队列 队列ADT扩充 队列记录描述 方法理论步骤 `update(item, key, value)` `remove(item)` 二.支持插队模型的优先级队列实现 ...

  2. 【数据结构Python描述】树的简介、基本概念和手动实现一个二叉树

    文章目录 一.树的简介 1. 树的定义 2. 相关概念 二.树的ADT 三.树的实现准备 1. 树的基本分类 2. 树的抽象基类 四.树的概念拾遗 1. 深度 2. 高度 五.二叉树的简介 1. 定义 ...

  3. 数据结构 python的书推荐-为什么程序员一定要学数据结构?数据结构书单推荐~...

    原标题:为什么程序员一定要学数据结构?数据结构书单推荐~ 来自:程序员书库(ID:OpenSourceTop) 人们最初使用计算机是用来处理简单的数值计算问题,当你使用计算机来处理一个问题时,一般经过 ...

  4. 数据结构 python的书推荐-java数据结构书一般推荐看什么好?

    想要学习java的各种数据结构,一本良好的书籍会让你受益匪浅,本文就来推荐一些学习java数据结构适合看的书. 一.入门推荐 因为是入门,所以我们先不要求实现,阅读一些通过图片,打比方等通俗易懂的方法 ...

  5. 大学python用什么教材-数据结构 Python语言描述 大学教材

    书名:数据结构:Python语言描述 定价:69.8 ISBN:9787115485779 作者:张光河 版次:第1版 出版时间:2018-07 内容提要: Python是目前流行的程序设计语言,国内 ...

  6. 数据结构(python)

    列表 list 在头部进行插入是个相当耗时的操作(需要把后边的元素一个一个挪个位置).假如你需要频繁在数组两头增删,list 就不太合适. 数组是最常用到的一种线性结构,其实 python 内置了一个 ...

  7. 数据结构 python堆_Python中的堆栈数据结构是什么?

    成为专业认证的数据结构是数据值的集合,它们之间的关系,以及可以应用于数据的函数或操作.现在有很多可用的数据结构.但今天我们的重点将放在堆栈数据结构上.我将讨论以下主题:为什么是数据结构?数据结构类型什 ...

  8. python连续质数计算_GitHub - xxqfft/AlgorithmsByPython: 算法/数据结构/Python/剑指offer/机器学习/leetcode...

    尝试用Python实现一些简单的算法和数据结构 之前的算法和数据结构基本都是用Swift写的,现在尝试用Python实现一些简单的算法和数据结构. update 20160704 准备加入<剑指 ...

  9. 【数据结构Python描述】手动实现一个list列表类并分析常用操作时间复杂度

    文章目录 一.使用动态数组实现列表 1. 动态数组概念引入 2. 验证列表实现策略 3. 动态数组算法实现 二.摊销法分析时间复杂度 1. 摊销法使用示例 2. 数组容量指数增长 3. 数组容量等差增 ...

  10. 数据结构(Python版):Python内置数据类型

    1. Python内置数据类型 python内置数据类型中的列表list和字典dict,可作为Python语言中实现各种常用数据结构的基石,后续各种数据结构均基于他们实现.两种数据类型的常见(操作)方 ...

最新文章

  1. 【Manning新书】可解释人工智能: 构建可解释机器学习系统
  2. 全息技术“量子飞跃”或彻底改变成像技术
  3. Selenium之多窗口句柄的切换
  4. ipynb和py文件一样吗_文件描述符了解一下
  5. SAP C4C Adapt menu debugging
  6. php 循环队列,队列和循环队列-php数组
  7. Maven聚合工程怎么变回普通的Maven工程
  8. Activiti流程定义部署、删除
  9. L1- 017——024
  10. 快捷指令获取url内容_快捷指令,钢铁侠里的“贾维斯”
  11. [转载]物理大神的八卦完整版——大爱物理
  12. Python、Selenium、火狐浏览器,简单的自动化实现
  13. 简述linux下用户与组相关的配置文件,Linux用户和群组管理的主要配置文件
  14. Combination Sum II
  15. 离开微信直接打开APP指定的页面
  16. iOS--常见的几种数据存储方式
  17. 《操作系统真象还原》第十五章 ---- 实现系统交互 操作系统最终章 四十五天的不易与坚持终完结撒花(上)
  18. 快递已经签收怎么查询快递的信息
  19. 开发工具:推荐一款非常好用的SSH客户端WindTerm
  20. Western Blot

热门文章

  1. 05-【公司解决问题】公司解决问题5之k8s问题(部署单元挂载存储卷启动报错:nfs挂载错误wrong fs type, bad option, bad superblock)
  2. 2005年度美国高校排名
  3. 怎样培养独挡一面的能力 .
  4. html中的ui编辑器,kendoUI系列教程之Editor编辑器
  5. 如何选择安全可靠的远程控制软件?TeamViewer做出良好示范
  6. sota结果是什么意思_文本摘要新框架,抽取式摘要“轻松”取得SOTA
  7. 数组、列向量和行向量区别
  8. 基于uinput 实现远程键鼠
  9. Espressif 玩转 SoftAP
  10. java8 reduce的用法_Java8中聚合操作collect、reduce方法详解