1 Python链表

1.1基本概念

概念:链表是通过一个个节点组成的,每个节点都包含了称为cargo的基本单元,它也是一种**递归**的数据结构。

图示:能保持数据之间的逻辑顺序,但不必按照顺序存储。

和C不一样的是python没有专门的指针概念,在python中每个变量都是指针

链表的删除可以通过修改指针来实现

Python实现链表的方法:

class Node:'''data:节点保存的数据_next:保存下一个节点对象'''def __init__(self,data,pnext=None):self.data=dataself._next=pnext

1.2 链表的基本要素

1.节点,每一个节点有两个域:

左:值域,右:针域

2.head节点:特殊节点,永远指向第一个节点

3.tail节点:特殊节点,永远指向最后一个节点

4.None:链表最后节点的针域的指针指向None值,因此也叫接地点.

class Node:def __init__(self,data = None, next = None):self.data = dataself.next = next

创建独立节点:

node1 = Node(1)
node2 = Node(2)
node3 = Node(3)

表示节点间关系:

node1.next = node2
node2.next = node3

1.3链表的常用方法

LinkedList() 创建空链表,不需要参数,返回值是空链表
is_empty() 测试链表是否为空,不需要参数,返回值是布尔值
append(data) 在尾部增加一个元素作为列表最后一个,参数是要追加的元素,无返回值
iter() 遍历链表,无参数,无返回值,此方法一般是一个生成器
insert(idx,value) 插入一个元素,参数为插入元素的索引和值
remove(idx)移除1个元素,参数为要移除的元素或索引,并修改链表
size() 返回链表的元素数,不需要参数,返回值是个整数
search(item) 查找链表某元素,参数为要查找的元素或索引,返回是布尔值

链表是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

1.4链表种类

单向链表、单向循环链表、双向链表、双向循环链表。

两种最简单的链表为单向链表和双向链表。

单向链表通过一个外部的头链接来访问第1项,单向链表的节点被分成两个部分,第一部分保存或显示关于节点的信息,第二部分储存下一节点地址。

单向链表只能向一个方向遍历。单向链表中每个节点只有一个指针。

单向链表结构图:

双向链表结构图:

  • 链表无法进行随机访问,只能进行顺序访问。
  • 链表分配内存的方式和数组不同,在链表中插入或删除点时,可以直接进行插入或删除,不需要在内存中移动数据项;
  • 每一次插入和删除的过程,链表会调整大小,不需要额外的内存代价,也不需要复制数据项。

1.5遍历链表

链表的基本操作:遍历next节点

  • 在列表中查找一个元素
  • 在列表中插入一个元素
  • 从列表中删除一列元素
probe = head
while probe != None:probe = probe.next
  • 注意:

    ​ 不可以用head来遍历列表,否则会丢失列表的一些节点,可以使用和head相同类型的临时的指针变量,这个变量先初始化为链表结构的head指针,然后控制一个循环。

单向链表遍历为例,流程框图如下:

遍历结束后,temp指针为None,而head指针还是指向第一个节点,遍历在时间上是线性的,并且不需要额外的内存。

遍历单链表结构会访问每一个节点,并且当遇到一个空链接的时候终止,而None就是充当负责停止这个过程的哨兵。

1.6链表运用

class LinkedList:def __init__(self):self.head = Noneself.tail = Nonedef is_empty(self):return self.head is Nonedef append(self,data):node = Node(data)if self.head is None:self.head = nodeself.tail = nodeelse:self.tail.next = nodeself.tail = nodedef iter(self):if not self.head:returncur = self.headyield cur.datawhile cur.next:cur =cur.nextyield cur.datadef insert(self, idx, value):cur = self.headcur_idx = 0if cur is None:raise Exception("The list is an empty")while cur_idx < idx - 1:cur = cur.nextif cur is None:raise Exception('......')cur_idx = cur_idx + 1node = Node(value)node.next = cur.nextcur.next = nodeif node.next is None:self.tail = nodedef remove(self, idx):cur = self.headcur_idx = 0if self.head is None:  # 空链表时raise Exception('The list is an empty list')while cur_idx < idx-1:cur = cur.nextif cur is None:raise Exception('list length less than index')cur_idx += 1if idx == 0:   # 当删除第一个节点时self.head = cur.nextcur = cur.nextreturnif self.head is self.tail:   # 当只有一个节点的链表时self.head = Noneself.tail = Nonereturncur.next = cur.next.nextif cur.next is None:  # 当删除的节点是链表最后一个节点时self.tail = curdef size(self):current = self.headcount = 0if current is None:return 'The list is an empty list'while current is not None:count += 1current = current.nextreturn countdef search(self, item):current = self.headfound = Falsewhile current is not None and not found:if current.data == item:found = Trueelse:current = current.nextreturn found

验证操作:

if __name__ == '__main__':link_list = LinkedList()for i in range(150):link_list.append(i)print(link_list.is_empty())link_list.insert(10, 30)

数据结构与算法:1.链表结构相关推荐

  1. 数据结构与算法之链表结构寻找p、q最近的公共祖先

    链表结构,寻找p.q最近的公共祖先 数据结构与算法之链表结构寻找p.q最近的公共祖先 链表结构,寻找p.q最近的公共祖先 问题 想法 代码 问题 设一棵二叉树的结点结构为(LLINK, INFO, R ...

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

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

  3. 数据结构与算法--单链表相关面试题

    此文章仅作为自己学习过程中的记录和总结,同时会有意地去用英文来做笔记,一些术语的英译不太准确,内容如有错漏也请多指教,谢谢! 一.概述 获取单链表的有效元素个数[新浪面试题1] 获取单链表倒数第k个结 ...

  4. 数据结构与算法 内核链表实现商品购物系统项目+Makefile

    数据结构与算法 内核链表实现商品购物系统项目 第一章 项目实现思维 [1]编译介绍 [2]框架思维 第二章 Makefile编写 第三章 代码编写实现 [1]favorite.txt文件 [2]his ...

  5. 一文通数据结构与算法之——链表+常见题型与解题策略+Leetcode经典题

    文章目录 1 链表 1.1 常见题型及解题策略 1.1.1 LeetCode中关于链表的题目有以下五种类型题: 1.1.2 解题策略 1.2 链表的基本内容 1.2.1 链表的基本结构: 1.2.2 ...

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

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

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

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

  8. python定义链表节点_Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】...

    本文实例讲述了Python数据结构与算法之链表定义与用法.分享给大家供大家参考,具体如下: 本文将为大家讲解: (1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计 (2)链表类插入和 ...

  9. 数据结构与算法之RandomPool结构和岛问题

    数据结构与算法之RandomPool结构和岛问题 目录 RandomPool结构 岛问题 1. RandomPool结构 (一)题目概述 (二)思路分析 完成上述功能需要创建两个hashmap结构 i ...

最新文章

  1. Docker核心技术 1
  2. 密码篇——对称加密—AES
  3. python原始web与django框架 mvc模式开发
  4. python数据科学-多变量数据分析
  5. 更深入地了解Java 8 Date and Time API
  6. 面试算法基础及编程 第四弹 (字符串、数值类、或其他常见相关)
  7. OCR训练常见问题(1)
  8. MySQL索引(1)
  9. 用Dojo实现Ajax请求:XH“.NET研究”R、跨域、及其他
  10. 服务站: WCF 消息传递基础 -- MSDN Magazine, April 2007
  11. html渲染自动保存图片,3dmax设置渲染完自动保存图片的方法
  12. 马斯克联名2000多AI专家誓言禁绝杀人机器人!发起人泰格马克将亲临AI World2018...
  13. 转载 注解@PostConstruct与@PreDestroy讲解及实例 - 云淡风轻、仅此一抹 - 博客频道 - CSDN.NET http://blog.csdn.net/yaerfeng/art
  14. DTCloud—QWeb
  15. c语言二级编程实例,二级c语言编程 -实例
  16. HP路由器和交换机日志分析
  17. 超级电容容量、耐压值、电容值计算方法
  18. Camera ITS测试
  19. 虾皮直播怎么开启店铺引流-扬帆际海
  20. Robomongo的安装及简单使用

热门文章

  1. tp5 三行代码实现调用redis底层的方法
  2. PyTorch logit函数
  3. Python--nonzero()函数
  4. CAD中的选择集过滤----有条件选择AutoCAD实体
  5. Android 原生 TabLayout 使用全解析
  6. 吉林大学计算机学院期末题
  7. 点坐标获取,导出与导入
  8. Java毕业设计:企业公司人事管理系统(java+springboot+vue+mysql)
  9. 美团服务器不稳定号码保护,美团外卖饿了么开启“号码保护”功能,保护个人隐私...
  10. 前端面试超全整理3(webpack性能优化及监控)