广告
返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用Python实现双向链表
  • 438
分享到

怎么用Python实现双向链表

2023-06-30 15:06:36 438人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“怎么用python实现双向链表”,在日常操作中,相信很多人在怎么用Python实现双向链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python实现双向链表”的疑惑有所帮助!接下来

这篇文章主要介绍“怎么用python实现双向链表”,在日常操作中,相信很多人在怎么用Python实现双向链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python实现双向链表”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

怎么用Python实现双向链表

如图为双向环形链表示意图,每一个节点都被两个指针所指向,同时每个节点也指向了两个节点。

实现代码如下:

class Player:    """节点类"""    def __init__(self):        """初始化姓名,分数,指针"""        self.name = ''        self.score = 0        self.rlink = None        self.llink = None  def erGodic(head, num=None, is_print=False, left=False):    """遍历函数,num是遍历到哪一个位置序号,is_print是否触发打印方法,left表示是否由head开始往左遍历"""    ptr = head    count = 0    while True:        if num == count:            break         if not left:            if ptr.rlink != head:                ptr = ptr.rlink            else:                break        else:            if ptr.llink != head:                ptr = ptr.llink            else:                break        count += 1        if is_print:            print('No.'+str(count), ptr.llink.name if ptr.llink != head else 'head', '<---',                  ptr.name, ptr.score, '--->', ptr.rlink.name if ptr.rlink != head else 'head')    return ptr  # 返回遍历完成后的最后一个节点  head = Player()  # 初始化一个链表头指针,不用来存放任何数据head.rlink = head  # 初始化右指针head.llink = head  # 初始化左指针  while True:    select = input("(1).新增   (2).查看   (3).插入   (4).删除   (5).离开\n输入:")    if select == "1":  # 新增节点,分为右新增和左新增        direction = input("(1).右新增   (2).左新增\n输入:")        if direction not in ("1", "2"):            print("输入错误")            continue        new_data = Player()        new_data.name = input("姓名:")        new_data.score = input("分数:")        if direction == "1":  # 右新增            ptr = ergodic(head)  # 从head开始向右遍历获取最后一个节点            ptr.rlink = new_data            new_data.llink = ptr            new_data.rlink = head            head.llink = new_data        else:  # 左新增            ptr = ergodic(head, left=True)  # 从head开始向左遍历获取最后一个节点            ptr.llink = new_data            new_data.rlink = ptr            new_data.llink = head            head.rlink = new_data     elif select == "2":  # 遍历查看所有节点,分为右遍历和左遍历        direction = input("(1).右遍历   (2).左遍历\n输入:")        if direction == "1":  # 右遍历            ergodic(head, is_print=True)        elif direction == "2":  # 左遍历            ergodic(head, is_print=True, left=True)        else:            print("输入错误")     elif select == '3':  # 插入节点,分为右插入和左插入        direction = input("(1).右插入   (2).左插入\n输入:")        if direction not in ("1", "2"):            print("输入错误")            continue        try:            num = int(input("请输入需要插入的节点位置序号:"))  # 输入序号必须是大于0的正整数,如果输入大于最后一个节点的序号则插入到最后一个节点之后            if num < 1:                print("输入必须为大于0的正整数")                continue        except ValueError:            print("输入有误")            continue        insert_data = Player()        insert_data.name = input("姓名:")        insert_data.score = input("分数:")        if direction == "1":  # 右插入            ptr = ergodic(head, num - 1)  # 获取需要插入位置的前一个节点,新插入的节点就在这个节点的后面            insert_data.llink = ptr            insert_data.rlink = ptr.rlink            ptr.rlink = insert_data            insert_data.rlink.llink = insert_data        else:  # 左插入            ptr = ergodic(head, num - 1, left=True)            insert_data.rlink = ptr            insert_data.llink = ptr.llink            ptr.llink = insert_data            insert_data.llink.rlink = insert_data     elif select == '4':  # 删除节点,分为右删除和左删除        direction = input("(1).右删除   (2).左删除\n输入:")        if direction not in ("1", "2"):            print("输入错误")            continue        try:            num = int(input("请输入需要删除的节点位置序号:"))  # 输入序号必须是大于0的正整数,如果输入大于最后一个节点的序号则删除最后一个节点            if num < 1:                print("输入必须为大于0的正整数")                continue        except ValueError:            print("输入有误")            continue        if direction == "1":  # 右删除            ptr = ergodic(head, num)  # 获取需要删除的节点        else:  # 左删除            ptr = ergodic(head, num, left=True)        ptr.llink.rlink = ptr.rlink        ptr.rlink.llink = ptr.llink     elif select == '5':        print("成功离开")        break    else:        print("输入错误,请重试")

部分运行效果如下:

怎么用Python实现双向链表

到此,关于“怎么用Python实现双向链表”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 怎么用Python实现双向链表

本文链接: https://www.lsjlt.com/news/330113.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么用Python实现双向链表
    这篇文章主要介绍“怎么用Python实现双向链表”,在日常操作中,相信很多人在怎么用Python实现双向链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python实现双向链表”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • python双向链表怎么实现
    这篇文章主要介绍“python双向链表怎么实现”,在日常操作中,相信很多人在python双向链表怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python双向链表怎么实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • Python实现双向链表
    之前写的单向链表和环形链表都只是单向的,只能单向遍历,不能根据后面的节点获取前面的节点,除非进行反转操作。 双向链表每个节点都有两个指针,这两个指针分别指向前后两个节点,这样就可以从...
    99+
    2022-11-11
  • python双向循环链表怎么实现
    本文小编为大家详细介绍“python双向循环链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“python双向循环链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双向循环链表: 将所有的数据存...
    99+
    2023-06-30
  • C++怎么实现双向链表
    这篇“C++怎么实现双向链表”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++怎么实现双向链表”文章吧。前言:前面文章分析...
    99+
    2023-06-29
  • java双向链表怎么实现
    Java中的双向链表可以通过定义一个Node类来实现,该类包含一个值和两个指针,分别指向前一个节点和后一个节点。具体实现如下: pu...
    99+
    2023-10-22
    java
  • JAVA中怎么实现链表和双向链表
    这篇文章给大家介绍JAVA中怎么实现链表和双向链表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JAVA基础:语言中链表和双向链表的实现(转)[@more@]链表是一种重要的数据结构,在程序设计中占有很重要的地位。C语...
    99+
    2023-06-03
  • Python 实现双向链表(图解)
    双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。 双向链表基本方法实现(Python) 1...
    99+
    2023-01-31
    双向 链表 Python
  • python实现双向链表原理
    双向链表 一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另...
    99+
    2022-11-11
  • 基于python实现双向链表
    目录一、构建链表节点二、实现链表类三、测试逻辑在一些面试或者力扣题中都要求用双向链表来实现,下面是基于python的双向链表实现。 一、构建链表节点 class Node:    ...
    99+
    2022-11-11
  • Java实现双向链表
    本文实例为大家分享了Java实现双向链表的具体代码,供大家参考,具体内容如下 1、双向链表 1.1 双向链表的每个节点组成包含节点数据,上一个节点(pre),下一个节点(next) ...
    99+
    2022-11-13
  • 怎么用java代码实现双向链表
    这篇文章主要介绍“怎么用java代码实现双向链表”,在日常操作中,相信很多人在怎么用java代码实现双向链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用java代码实现双向链表”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • java中的双向链表怎么实现
    在Java中,可以使用自定义的双向链表类来实现双向链表。以下是一个简单的双向链表的实现示例: public class Doubly...
    99+
    2023-10-24
    java
  • C++实现通用双向链表
    使用C++完成双向通用链表双向链表不用多说,通用链表因为数据结构不确定的,使用一个VOID指针指向数据,什么数据都可以挂上去,这样来封装链表,可以作为基础类也可以单独使用,这里只是为了练习C++封装的语法,实现了简单的增加和删除链表由于实际...
    99+
    2023-06-04
  • Python实现双向链表基本操作
    双向链表的基本操作的实现,供大家参考,具体内容如下 在之前的博客中介绍了三种链表,分别是单链表、单向循环链表以及双向链表。本篇博客将用Python来实现双向链表的如下操作。(用到的工...
    99+
    2022-11-11
  • MYSQL INNODB中通用双向链表怎么实现
    这篇文章给大家分享的是有关MYSQL INNODB中通用双向链表怎么实现的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。源码在Ut0lst.h中注意:这里我将链表中的实际的串联的数...
    99+
    2022-10-18
  • C语言如何实现双向链表和双向循环链表
    本文小编为大家详细介绍“C语言如何实现双向链表和双向循环链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现双向链表和双向循环链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双向链表和双向循环链表...
    99+
    2023-06-16
  • python双向链表实例详解
    使用python实现双向链表,供大家参考,具体内容如下 双向链表: 指的是讲数据链接在一起,每个数据是一个节点,每一个节点都有一个数据区,两个链接区,分别链接上一个节点和下一个节点数...
    99+
    2022-11-11
  • Linux内核中双向链表怎么实现
    这篇文章主要介绍了Linux内核中双向链表怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux内核中双向链表怎么实现文章都会有所收获,下面我们一起来看看吧。首先让我们看一下在 include/lin...
    99+
    2023-06-28
  • 怎么用Python代码实现双链表
    本文小编为大家详细介绍“怎么用Python代码实现双链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么用Python代码实现双链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双链表的每个节点有两个指针: ...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作