python之双链表

双链表简单讲解

双向链表(doubly linked list)是一种链式数据结构,它的每个节点包含两个指针,一个指向前一个节点,一个指向后一个节点。与单向链表相比,双向链表可以在任何位置进行插入和删除操作,因为每个节点都可以通过前向或后向指针访问其前驱和后继。

图例说明

这里讲解一个双链表节点添加的例子,我们看到10,15,20这三个点的位置,其中原本是10和20相互连接,首先,我们要先将15的next指向20,因为,如果我们现将10的next指向15的话,那20的地址就会消失,这要就会导致我们的数据丢失,所以要先连接15和20,然后就是把20的prior(前驱)指向15,最后再是15的prior(前驱)指向10,10的next指向15,这样我们就完成插入的程序了。

代码实现

class Node(object):"""创建一个双链表"""def __init__(self, item):self.item = itemself.next = Noneself.prior = Noneclass FunctionLink(object):def __init__(self):self.linklength = 1self.head = None  # 首先初始化,让头结点指向空def creatLinkListHead(self, li):"""头插法:return:"""head = Node(li[0])for element in li[1:]:self.linklength += 1node = Node(element)  # 创建一个节点node.next = headhead.prior = nodehead = nodereturn headdef creatLinkListTail(self, li):"""此方法为尾插法:param li::return:"""head = Node(li[0])for element in li[1:]:self.linklength += 1node = Node(element)head.next = nodenode.prior = headreturn headdef printLinkList(self, lk):"""此方法为打印链表中的数字:param lk:传入头结点的地址:return:"""while lk:if not lk.next:print(lk.item)lk = lk.nextelse:print(lk.item, end=",")lk = lk.nextdef inserLinkList(self, index, element, curNode):"""此方法为插入数据:param index:输入要传入数据的位置索引值:param element: 输入要传入的数据:param curNode: 输入你的头链表位置:return:"""head = curNode  # 现将链表的头链表进行存储number = 1if index > self.linklength:raise Exception("对不起您输入的索引值超过了链表的长度")else:while True:if index == number:p = Node(element)  # 创建节点p.next = curNode.nextcurNode.next.prior = pp.prior = curNodecurNode.next = pself.linklength += 1curNode = headbreakelse:curNode = curNode.nextnumber += 1def deleteLinkList(self, index, curNode):"""删除输入的索引值后面的结点:param index: 要删除的索引位置:param curNode: 头结点地址:return:"""head = curNode  # 先将头指针的地址赋值给一个临时节点number = 1if index > self.linklength:raise Exception("对不起,您输入的索引位置超过了链表的长度,请重新输入")else:while True:if number == index:p = curNode.nextcurNode.next = p.nextp.next.prior = curNodeself.linklength -= 1curNode = headbreakelse:curNode = curNode.nextnumber += 1if __name__ == '__main__':func = FunctionLink()doublelk = func.creatLinkListHead([1, 2, 3, 4])func.printLinkList(doublelk)func.inserLinkList(2, 10, doublelk)func.printLinkList(doublelk)func.deleteLinkList(2, doublelk)func.printLinkList(doublelk)

结果展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PDF转为图片

PDF转为图片 背景pdf展示目标效果 发展过程最终解决方案:python PDF转图片pdf2image注意:poppler 安装 背景 最近接了一项目,主要的需求就是本地的文联单位,需要做一个电子刊物阅览的网站,将民族的刊物发布到网站上供…

字节开源的netPoll多路复用器源码解析

字节开源的netPoll多路复用器源码解析 引言NetPollepoll API原生网络库实现netpoll 设计思路netpoll 对比 go net数据结构 源码解析多路复用池初始化Epoll相关API可读事件处理server启动accept 事件客户端连接初始化客户端连接建立 可读事件等待读取数据 可写事件处理客户端启动…

word增加引用-endnote使用

使用软件: web of science https://webofscience.clarivate.cn/wos/alldb/basic-search; Pub Med等数据库endnote20 链接: https://pan.baidu.com/s/1VQMEsgFY3kcpCNfIyqEjtQ?pwdy1mz 提取码: y1mz 复制这段内容后打开百度网盘手机App,操作更方便哦 --…

信号与线性系统翻转课堂笔记4——连续LTI系统的微分方程模型与求解

信号与线性系统翻转课堂笔记4——连续LTI系统的微分方程模型与求解 The Flipped Classroom4 of Signals and Linear Systems 对应教材:《信号与线性系统分析(第五版)》高等教育出版社,吴大正著 一、要点 (1&#x…

探索 Coinbase 二层链 Base 的潜力与风险

作者:lesleyfootprint.network 在不断变化的加密货币领域,Coinbase 已经确立了自己领先中心化交易所(CEX)的地位。然而,Coinbase 坚信去中心化是创造一个开放、全球范围内对每个人都可访问的加密经济的关键&#xff0…

python学习3

大家好,今天又来更新python学习篇了。本次的内容比较简单,时描述性统计代码,直接给出所有代码,如下: import pandas as pd from scipy.stats import fisher_exact from fuzzywuzzy import fuzz from fuzzywuzzy impor…

高性能计算HPC与统一存储

高性能计算(HPC)广泛应用于处理大量数据的复杂计算,提供更精确高效的计算结果,在石油勘探、基因分析、气象预测等领域,是企业科研机构进行研发的有效手段。为了分析复杂和大量的数据,存储方案需要响应更快&…

【兔子王赠书第12期】赠ChatGPT中文范例的自然语言处理入门书

文章目录 写在前面自然语言处理图书推荐图书简介编辑推荐 推荐理由粉丝福利写在后面 写在前面 小伙伴们好久不见吖,本期博主给大家推荐一本入门自然语言处理的经典图书,一起来看看吧~ 自然语言处理 自然语言处理(Natural Language Process…

【面向对象】C++/python/java的多态比较

一、面向对象的主要特点 封装:封装是把数据和操作数据的方法绑定在一起,对数据的访问只能通过已定义的接口。这可以保护数据不被外部程序直接访问或修改,增强数据的安全性。继承:继承是一种联结类的层次模型,并且允许…

机器学习 | KNN算法

一、KNN算法核心思想和原理 1.1、怎么想出来的? 近朱者赤,近墨者黑! 距离决定一切、民主集中制 1.2、基本原理 —— 分类 k个最近的邻居 民主集中制投票分类表决与加权分类表决 1.3、基本原理 —— 回归 计算未知点的值决策规则不同均值法与…

【UML】第5篇 UML中的视图和图

目录 一、视图和图 二、图的种类 2.1 结构图 2.2 行为图 图是UML中最重要的概念了,起码我是这么认为。 上篇关于低代码的文章,我也说了,未来也许AI编码,我们更重要的工作,是能够为业务进行建模,拆解&a…

mybatis plus 公共字段自动填充createBy updateBy

一、公共字段自动填充 需求:好多表公共的字段,赋值逻辑也相同,不用每次为其赋值,‘拦截器’统一赋值。 1. 在新增数据时,需要设置创建时间、创建人、修改时间、修改人等字段,在编辑数据时需要设置修改时间…

FL Studio21.2.2963水果音乐软件安装

FL Studio是功能强大的音乐制作解决方案,使用旨在为用户提供一个友好完整的音乐创建环境,让您能够轻松创建、管理、编辑、混合具有专业品质的音乐,一切的一切都集中在一个软件中,只要您想,只要您需要,它总能…

深兰科技入选财联社“2023科创好公司”榜单

12月13日,“2023科创好公司”评选榜单正式公布,深兰科技成功入选,获得该榜单中“新能源汽车及自动驾驶”赛道的“科创好公司”称号。 “科创好公司”榜评选是由财联社及《科创板日报》联合打造的一级市场投后服务体系中的重要活动项目&#x…

Axure 9基本元件,表单及表格元件简介,表单案例

目录 一.基本元件 1.元件基本介绍 2.基本元件的使用 二.表单及表格元件 三.表单案例 四.简单简历绘制 一.基本元件 1.元件基本介绍 概述 - 在Axure RP中,元件是**构建原型图的基础模块**。 将元件从元件库里拖拽到画布中,即可添加元件到你的原型…

什么店生意好?C++采集美团商家信息做数据分析

最近遇到几个朋友,想要一起合伙投资一个实体店,不问类型,就看哪类产品相对比较受欢迎。抛除地址位置,租金的影响,我们之谈产品。因此,我熬了几个通宵,写了这么一段爬取美团商家商品信息的数据并…

如何在 Windows 10/11 上恢复永久删除的文件夹

如果您曾经错误地删除过某个文件夹,您就会知道随之而来的恐慌。您认为当您在某些内容上单击“删除”时,它就会永远消失。但情况并非总是如此。您可以使用几种不同的方法来恢复已删除的文件夹 。 本指南将向您展示如何在 Windows 10/11 上恢复永久删除的…

Axure RP - 交互设计的强大引擎

目录 前言 1. 交互设计:连接用户与产品的纽带 2. 情景设计:预测用户行为的未来 3. 演示和共享:让设计活起来 我的其他博客 前言 在数字化时代,用户体验的重要性日益突显,而交互设计成为塑造产品与用户互动的关键。…

colmap三维重建核心逻辑梳理

colmap三维重建核心逻辑梳理 1. 算法流程束流2. 初始化3. 重建主流程 1. 算法流程束流 重建核心逻辑见 incremental_mapper.cc 中 IncrementMapperController 中 Reconstruct 初始化变量和对象判断是否有初始重建模型,若有,则获取初始重建模型数量&am…

基于Python实现的一个书法字体风格识别器源码,通过输入图片,识别出图片中的书法字体风格,采用Tkinter实现GUI界面

项目描述 本项目是一个书法字体风格识别器,通过输入图片,识别出图片中的书法字体风格。项目包含以下文件: 0_setting.yaml:配置文件,包含书法字体风格列表、图片调整大小的目标尺寸等设置。1_Xy.py:预处理…