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

python双向循环链表怎么实现

2023-06-30 16:06:26 456人浏览 安东尼

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

摘要

本文小编为大家详细介绍“python双向循环链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python双向循环链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双向循环链表: 将所有的数据存

本文小编为大家详细介绍“python双向循环链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python双向循环链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

双向循环链表: 将所有的数据存放到节点中,每一个节点相连接,首尾链接,
每一个节点中有一个数据存储区,和两个链接区,一个链接前一个节点,一个链接下一个节点

双向链表操作

链表是否为空
2、链表的长度
3、遍历链表
4、链表头部添加元素
5、链表尾部添加元素
6、链表指定位置添加元素
7、链表删除节点
8、查找节点是否存在

代码实现

# Functions  函数声明class node():    """实例化节点类"""    def __init__(self, item):        self.item = item        self.prev = None        self.next = Noneclass Linklist():    """    存放节点类    """    def __init__(self):        self.head = None    # 1. 链表是否为空    def is_empty(self):        return self.head == None    # 2. 链表的长度    def length(self):        """        返回链表中所有数据的个数        实例化游标,遍历链表,使用计数器自增一        空链表        """        # 实例化游标        cur = self.head        # 判断是否为空        if self.is_empty():            return 0        else:            # 不为空            # 定义计数            count = 1            while cur.next != self.head:                count+=1                cur = cur.next            return count            pass    # 3. 遍历链表    def travel(self):        """        遍历链表        实例化游标,遍历链表,每次输出节点的数据        空链表        只有头节点        """        # 实例化游标        cur = self.head        # 判断是否为空        if self.is_empty():            return None        else:            # 不为空的情况            while cur.next != self.head:                print(cur.item, end=' ')                cur = cur.next            print(cur.item)            pass    # 4. 链表头部添加元素    def add(self, item):        """        头节点添加        实例化节点,        """        # 实例化节点        node = Node(item)        # 实例化游标        cur = self.head        # 判断是否为空        if self.is_empty():            node.next = node            node.prev = node            self.head = node        else:            # 链表不为空的情况            # 只有一个节点的情况            # node.next = self.head            node.next = cur            node.prev = cur            if cur.next == self.head:                # print(cur.item)                cur.prev = node                cur.next = node                self.head = node            elif cur.next != self.head:                pro = self.head                while cur.next != self.head:                    cur = cur.next                pro.prev = node                cur.next = node                self.head = node                pass    # 5. 链表尾部添加元素    def append(self, item):        """        链表尾部添加数据        实例化节点,实例化游标,指向尾部节点,修改指向        链表为空        """        # 实例化节点        node = Node(item)        # 实例化游标        cur = self.head        if self.is_empty():            self.add(item)        else:            # 不为空的情况            # 指针指向最后一个节点            self.head.prev = node            node.next = self.head            while cur.next != self.head:                cur = cur.next            node.prev = cur            cur.next = node            pass    # 6. 链表指定位置添加元素    def insert(self, index, item):        """        指定位置添加数据        实例化节点, 实例化游标        移动游标到索引位置,更改指向        输入索引大小判断        链表是否为空        """        # 实例化节点        node = Node(item)        # 实例化游标        cur = self.head        if index <= 0:            self.add(item)        elif index > (self.length()-1):            self.append(item)        else:            # 中间添加数据            # 声明计数            count = 0            print(index)            while count < index-1:                count+=1                cur = cur.next            # print(cur.item)            node.next = cur.next            node.prev = cur            cur.next.prev = node            cur.next = node            pass    # 7. 链表删除节点    def remove(self, item):        """        删除数据        实例化游标,遍历链表,查找有没有改数据        有,对改数据两侧的节点进行指向修改        """        # 实例化游标        cur = self.head        # 判断是否为空        if self.is_empty():            return None        else:            # 不为空的情况下            # 如果删除的是头节点            if cur.item == item:                # 如果只有一个头节点                if cur.next == self.head:                   self.head = None                else:                    # self.head = cur.next                    pro = cur.next                    while cur.next != self.head:                        cur = cur.next                    cur.next = pro                    pro.prev = cur                    self.head = pro                    pass            else:                while cur.next != self.head:                    if cur.item == item:                        # print(cur.item)                        pro = cur.prev                        nex = cur.next                        pro.next = cur.next                        nex.prev = pro                        return True                    else:                        cur = cur.next                # 如果是最后一个节点                if cur.item == item:                    cur.prev.next = self.head                    self.head.prev = cur.prev    # 8. 查找节点是否存在    def search(self, item):        """        查询指定的数据是否存在        实例化游标        遍历所有的节点。每个节点中判断数据是否相等,相等,返回True        """        # 实例化游标        cur = self.head        # 判断是否为空        if self.is_empty():            return None        else:            # 不为空的情况            # 遍历所有的节点            while cur.next != self.head:                if cur.item == item:                    return True                else:                    cur = cur.next            if cur.item == item:                return True            pass

测试运行

# 程序的入口if __name__ == "__main__":    a = Linklist()    a .add(400)    a .add(300)    a .add(200)    a .add(100)    a.append(10)    a.append(11)    a.add(1)    a.insert(30, 12) # 1 100 200 300 400 10 11 12    a.remove(1)    # 100 200 300 400 10 11 12    a.remove(12)   # 100 200 300 400 10 11    a.remove(400)  # # 100 200 300  10 11    a.remove(4000)    print(a.search(100))  # True    print(a.search(11))   # True    print(a.search(111))  # None    print(a.is_empty())   # False    a.travel()            # 100 200 300 10 11    print(a.length())     # 5    pass

读到这里,这篇“python双向循环链表怎么实现”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网Python频道。

--结束END--

本文标题: python双向循环链表怎么实现

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

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

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

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

下载Word文档
猜你喜欢
  • python双向循环链表怎么实现
    本文小编为大家详细介绍“python双向循环链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“python双向循环链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双向循环链表: 将所有的数据存...
    99+
    2023-06-30
  • C++带头双向循环链表怎么实现
    这篇文章主要介绍“C++带头双向循环链表怎么实现”,在日常操作中,相信很多人在C++带头双向循环链表怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++带头双向循环链表怎么实现”的疑惑有所帮助!接下来...
    99+
    2023-06-29
  • python双向循环链表实例详解
    使用python实现双向循环链表,供大家参考,具体内容如下 双向循环链表: 将所有的数据存放到节点中,每一个节点相连接,首尾链接,每一个节点中有一个数据存储区,和两个链接区,一个链接...
    99+
    2022-11-11
  • C语言如何实现双向链表和双向循环链表
    本文小编为大家详细介绍“C语言如何实现双向链表和双向循环链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现双向链表和双向循环链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双向链表和双向循环链表...
    99+
    2023-06-16
  • python单向循环链表怎么实现
    单向循环链表将所有的链接在一起,每一个节点分为数据存储区和链接区,数据区存储数据,链接区链接下一个节点item: 存储数据的地方next: 链接下一个节点注意: 单向循环链表是首位链接,即尾部的节点要和头部的节点链接单向链表操作1、链表是否...
    99+
    2023-05-16
    Python
  • java双向循环链表的实现代码
    例1:复制代码 代码如下:package com.xlst.util; import java.util.HashMap;import java.util.Map;import ja...
    99+
    2022-11-15
    java 双向循环链表
  • C语言怎么实现带头双向循环链表
    本篇内容主要讲解“C语言怎么实现带头双向循环链表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现带头双向循环链表”吧!创建链表存储结构我们需要创建一个结构体来存储一个链表结点的相关信...
    99+
    2023-06-30
  • C语言带头双向循环链表怎么实现
    这篇“C语言带头双向循环链表怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C语言带头双向循环链表怎么实现”文章吧。带...
    99+
    2023-06-30
  • C语言实现带头双向循环链表
    目录前言1. 创建结构体2.malloc新节点3.创建哨兵位节点4.尾插5.打印6.尾删7.头插8.在指定位置pos的前面进行插入9. 删除指定位置pos节点10.销毁链表前言 在...
    99+
    2022-11-13
  • C++如何实现带头双向循环链表
    这篇文章主要为大家展示了“C++如何实现带头双向循环链表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++如何实现带头双向循环链表”这篇文章吧。什么是带头双向循环链表什么是带头?双向?循环?(...
    99+
    2023-06-29
  • python双向链表怎么实现
    这篇文章主要介绍“python双向链表怎么实现”,在日常操作中,相信很多人在python双向链表怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python双向链表怎么实现”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • C语言怎么实现循环双链表
    这篇文章主要介绍“C语言怎么实现循环双链表”,在日常操作中,相信很多人在C语言怎么实现循环双链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言怎么实现循环双链表”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-25
  • 怎么用Python实现双向链表
    这篇文章主要介绍“怎么用Python实现双向链表”,在日常操作中,相信很多人在怎么用Python实现双向链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python实现双向链表”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • python单向循环链表如何实现
    本篇内容主要讲解“python单向循环链表如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python单向循环链表如何实现”吧!单向循环链表将所有的链接在一起,每一个节点分为数据存储区和链...
    99+
    2023-07-06
  • Python实现双向链表
    之前写的单向链表和环形链表都只是单向的,只能单向遍历,不能根据后面的节点获取前面的节点,除非进行反转操作。 双向链表每个节点都有两个指针,这两个指针分别指向前后两个节点,这样就可以从...
    99+
    2022-11-11
  • 详解C语言中双向循环链表的实现
    目录实现细节辅助理解图具体实现代码1、对链表进行初始化2、任意位置前的插入3、任意位置的删除4、头插和尾删完整代码头文件具体函数测试实现细节 1、带一个哨兵位(哨兵节点,初始节点,不...
    99+
    2022-11-13
  • C语言如何实现带头双向循环链表
    这篇文章主要介绍了C语言如何实现带头双向循环链表,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言在实际生活中最常用的就是这两种链表。无头单向非循环链表。和带头双向循环链表。...
    99+
    2023-06-29
  • C语言实现循环双链表
    本文实例为大家分享了C语言实现循环双链表的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #...
    99+
    2022-11-12
  • C语言怎么实现线性表中的带头双向循环链表
    这篇文章主要介绍了C语言怎么实现线性表中的带头双向循环链表的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言怎么实现线性表中的带头双向循环链表文章都会有所收获,下面我们一起来看看吧。一、本章重点带头双向循环链...
    99+
    2023-06-29
  • C语言实现带头双向循环链表的接口
    本文实例为大家分享了C语言实现带头双向循环链表的接口,供大家参考,具体内容如下 各函数功能如下 申请空间 ListNode* BuyListNode(LTDataType x) ...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作