Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >python实现双向循环链表

python实现双向循环链表

作者头像
未来sky
发布于 2018-10-08 02:27:28
发布于 2018-10-08 02:27:28
68100
代码可运行
举报
文章被收录于专栏:好好学习吧好好学习吧
运行总次数:0
代码可运行

参考https://www.cnblogs.com/symkmk123/p/9693872.html#4080149

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# -*- coding:utf-8 -*-
# __author__ :kusy
# __content__:双向循环链表实现
# __date__:2018/9/29 16:34


# 节点类
class DNode(object):
    def __init__(self, prev, next, value):
        self.prev = prev    # 前驱
        self.next = next    # 后继
        self.value = value  # 值


class DoubleLinkTable(object):
    def __init__(self):
        self.nCount = 0     # 节点个数
        self.nHead = DNode(None, None, None)    # 表头
        self.nHead.prev = self.nHead    # 表头的前驱后继都是自己
        self.nHead.next = self.nHead    # 表头的前驱后继都是自己
        self.node = self.nHead

    # 节点数目
    def size(self):
        return self.nCount

    # 判断链表是否为空
    def is_empty(self):
        return self.nCount == 0

    # 获取index位置的节点
    def getnode(self, index):
        if index == 0:
            return self.nHead
        if index < 0 or index > self.nCount:
            raise Exception('IndexOutOfBounds')

        # 二分正向查找
        if index < self.nCount / 2:
            self.node = self.nHead.next
            i = 0
            while i < index - 1:
                self.node = self.node.next
                i += 1
            return self.node
        # 反向查找剩余部分
        self.node = self.nHead.prev
        rindex = self.nCount - index
        j = 0
        while j < rindex:
            self.node = self.node.prev
            j = j + 1
        return self.node

    # 获取index位置节点的值
    def get(self, index):
        return self.getnode(index).value

    # 插入新节点(后插)
    def insert(self, index, value):
        now_node = self.getnode(index)
        new_node = DNode(None,None,value)
        new_node.prev = now_node
        new_node.next = now_node.next
        now_node.next.prev = new_node
        now_node.next = new_node
        self.nCount += 1

    # 删除节点
    def delete(self, index):
        if index == 0:
            raise Exception('0 is not allowed!')
        now_node = self.getnode(index)
        now_node.prev.next = now_node.next
        now_node.next.prev = now_node.prev
        self.nCount -= 1

if __name__ == '__main__':
    dlt = DoubleLinkTable()
    # 头节点下标为0
    dlt.insert(0, 12)
    dlt.insert(1, 13)
    dlt.insert(1, 14)
    print('---------------------------')
    for i in range(dlt.nCount+1):
        print(i, ':', dlt.get(i))
    print('size:', dlt.nCount)

    dlt.delete(2)
    print('-------after delete--------')
    for i in range(dlt.nCount+1):
        print(i, ':', dlt.get(i))
    print('size:', dlt.nCount)

执行结果如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
C:\Users\suneee\AppData\Local\Programs\Python\Python36\python.exe E:/wangjz/PyWorkSpace/LearnPython/PY0929/double_linktable.py
---------------------------
0 : None
1 : 12
2 : 14
3 : 13
size: 3
-------after delete--------
0 : None
1 : 12
2 : 13
size: 2

Process finished with exit code 0

数据分析如下图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-09-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
数据结构--双向循环链表
http://www.cnblogs.com/skywang12345/p/3561803.html
未来sky
2018/10/08
6990
数据结构--双向循环链表
用Python实现数据结构之链表
链表与栈,队列不一样,它是由一个个节点构成的,每个节点存储着本身的一些信息,也存储着其他一个或多个节点的引用,可以从一个节点找到其他的节点,节点与节点之间就像是有链连在一起一样,这种数据结构就叫做链表
py3study
2020/01/17
5380
Python 算法基础篇:链表和双向链表的实现与应用
链表和双向链表是常用的线性数据结构,它们在算法和程序设计中有着广泛的应用。本篇博客将重点介绍链表和双向链表的原理、实现以及它们在不同场景下的应用。我们将使用 Python 来演示链表和双向链表的实现,并通过实例展示每一行代码的运行过程。
小蓝枣
2023/07/25
7600
双向循环链表(DoubleLoopLinkList)
双向循环链表 关于双向循环链表可以先阅读这篇文章这里就不再赘述:双向链表(DoubleLinkList) Node template<typename T> class Node { public:
玖柒的小窝
2021/12/15
3420
双向循环链表(DoubleLoopLinkList)
手写双向循环链表+LRU练习
这里我们将循环链表中的结点值采用key与val存储。其余的就比较easy了,相信看完非常容易理解。
公众号guangcity
2020/07/02
4060
python链表
一 简介 1 链表简介 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别
py3study
2020/01/06
7930
Python实现单向循环链表
链表是由一个个的节点组成的,在创建链表之前,要先创建节点,然后把节点“串”到链表上。在同一个链表中,每个节点的结构都相同,只是节点中保存的数据不同和引用不同,所以提前声明一个创建节点的类,需要创建节点时实例化即可。
Python碎片公众号
2021/02/26
1K0
如何实现双向循环链表
双向带头循环链表是一种常见的数据结构,它具有双向遍历的特性,并且在表头和表尾之间形成一个循环。本文将深入探讨双向带头循环链表的结构、操作和应用场景,帮助读者更好地理解和运用这一数据结构。
DevKevin
2024/03/19
1290
如何实现双向循环链表
数据结构与算法(五)-线性表之双向链表与双向循环链表
前言:前面介绍了循环链表,虽然循环链表可以解决单链表每次遍历只能从头结点开始,但是对于查询某一节点的上一节点,还是颇为复杂繁琐,所以可以在结点中加入前一个节点的引用,即双向链表
2018/09/26
1K0
数据结构与算法(五)-线性表之双向链表与双向循环链表
python数据结构之双链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。
python与大数据分析
2022/03/11
2910
python数据结构之双链表
双向链表
双向链表 概念 双向链表是普通链表的扩展,它的特点是具有两个节点。 后继节点:指向下一个节点 前驱节点:指向前一个节点 头节点没有前驱节点,尾节点没有后继节点 实现 # coding: utf-8 # 定义节点 class Node(object): def __init__(self, item): self.elem = item self.next = None self.prev = None cla
皮大大
2021/03/02
4510
入门单链表
链表(linked list)作为一种常见的数据结构,通常由数据和指针组合而成。在一些没有指针结构的程序语言中,如 python、java等,指针被引用所代替。链表中的每个节点通过指针或引用相连接,你可以通过指针或者引用来遍历节点。
用户2870857
2019/12/20
6410
数据结构笔记(一):数组、链表
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。
free赖权华
2020/05/21
4420
Python实现双向链表
链表是由一个一个的节点组成的,在创建链表之前,要先创建节点,然后把节点“串”到链表上。在同一个链表中,每个节点的结构都相同,只是节点中保存的数据不同和链接域的值不同,所以提前声明一个创建节点的类,需要创建节点时实例化即可。
Python碎片公众号
2021/02/26
5550
数据结构之链表
数据结构是一种分析、存储、组织数据的方法与逻辑,它考虑了数据之间的特性与相互关系,简单地说,数据结构就是对数据与算法的研究。数据结构分为8类有:数组、栈、队列、链表、树、散列表、堆、图。
MeteoAI
2019/09/24
5680
数据结构Java实现:循环链表和双向链表
上篇教程给大家分享了单链表的概念,以及如何用 Java 实现一个单链表的结构:数据结构Java实现:单链表。单链表是最基础的一种链表结构,在实际开发中的使用有一些局限性,比如只能单向往后查找节点,如果需要找到某元素的前驱节点,单链表是无法实现的,今天来给大家分享另外两个复杂一些的链表结构:循环链表和双向链表。
南风
2019/06/05
3.5K0
数据结构Java实现:循环链表和双向链表
使用python实现数组、链表、队列、栈
  数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。
不会飞的小鸟
2019/12/19
6160
使用python实现数组、链表、队列、栈
数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 数据结构图文解析之:树的简介及二叉排序树C++模板实现. 数据结构图文解析之:AVL树详解及C++模板实现 数据结构图文解析之:二叉堆详解及C++模板实现 1. 线性表简介 线性表是一种线性结构,它是由零个或多个数据元素构成的有限序列。线性表的特征是在一个序列中,除了头尾元素,每个元素都有且只有一个直接前驱,
Tencent JCoder
2018/07/02
1.2K0
探索 Python 中链表的实现:从基础到高级
链表是一种基础的数据结构,它由一系列节点组成,每个节点都包含数据和指向下一个节点的引用。在Python中,可以使用类来实现链表,本文将介绍如何实现链表,并提供一些丰富的示例代码来帮助你更好地理解其原理和应用。
程序猿川子
2025/01/09
570
探索 Python 中链表的实现:从基础到高级
数据结构与算法(四)——双向链表&双向循环链表
此时,比如我已经获取到了C节点,那么我想要获取到C节点的前一个节点,就需要再次遍历该链表,且时间复杂度是O(n)。那么有没有一个好的方案可以便捷地获取到C的前一个节点呢,答案是使用双向链表。
拉维
2022/03/28
4920
数据结构与算法(四)——双向链表&双向循环链表
相关推荐
数据结构--双向循环链表
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验