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

# -*- 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)

执行结果如下

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

数据分析如下图

python实现双向循环链表的更多相关文章

  1. python实现 双向循环链表

    最近身边的朋友在研究用python来实现数据结构.遇到一个问题就是双向循环链表的实现,改指向的时候总是发蒙. 我自己尝实现了一个python的双向循环链表.附上代码,希望对大家有帮助. 如果不懂什么是 ...

  2. Linux内核2.6.14源码分析-双向循环链表代码分析(巨详细)

    Linux内核源码分析-链表代码分析 分析人:余旭 分析时间:2005年11月17日星期四 11:40:10 AM 雨 温度:10-11度 编号:1-4 类别:准备工作 Email:yuxu97101 ...

  3. 双向链表、双向循环链表的JS实现

    关于链表简介.单链表.单向循环链表.JS中的使用以及扩充方法:  单链表.循环链表的JS实现 关于四种链表的完整封装: https://github.com/zhuwq585/Data-Structu ...

  4. C语言通用双向循环链表操作函数集

    说明 相比Linux内核链表宿主结构可有多个链表结构的优点,本函数集侧重封装性和易用性,而灵活性和效率有所降低.     可基于该函数集方便地构造栈或队列集.     本函数集暂未考虑并发保护. 一  ...

  5. 双向循环链表的Java版本实现

    1.单项循环列表 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环.和单链表相比,循环单链表的长处是从链尾到链 ...

  6. c语言编程之双向循环链表

    双向循环链表就是形成两个环,注意每个环的首尾相连基本就可以了. 程序中采用尾插法进行添加节点. #include<stdio.h> #include<stdlib.h> #de ...

  7. Linux内核中的通用双向循环链表

    开发中接触Linux越来越多,休息放松之余,免不了翻看翻看神秘的Linux的内核.看到双向链表时,觉得挺有意思的,此文记下. 作为众多基础数据结构中的一员,双向循环链表在各种“教科书”中的实现是相当的 ...

  8. java与数据结构(4)---java实现双向循环链表

    线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...

  9. 基于visual Studio2013解决算法导论之025双向循环链表

     题目 双向循环链表 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #in ...

随机推荐

  1. 2019 农信互联java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.农信互联等公司offer,岗位是Java后端开发,因为发展原因最终选择去了农信互联,入职一年时间了,也成为了面 ...

  2. TinyMCE入门

    引入TinyMCE脚本 <script src="https://cdn.tiny.cloud/1/no-api-key/tinymce/5/tinymce.min.js" ...

  3. android studio学习----通过libs来导入jar包

    百度经验有一种方法: 1 点击启动AndroidStudio,启动后的界面如图所示. 2 复制你需要添加的jar,并将其黏贴到app— —src— —main— —libs文件夹下,可运行的Andro ...

  4. JIRA的安装及配置

    JIRA安装    命令行打开服务:cmd:services.msc 同禅道和tapd是一样功能的. 1.安装jdk 2.安装mysql 3.安装JIRA  JIRA安装密钥的查找 1.登陆管理页面: ...

  5. ORACLE百分比分析函数RATIO_TO_REPORT() OVER()

    有时候不用的指标的绝对值不能比,但是转转为百分比的形式就容易看出波动了,是数据分析的好用的一个分析函数 20:00:24 SYS@orcl> conn scott/tiger; Connecte ...

  6. Windows 系统常用命令

    /** 环境变量配置 * sysdm.cpl */ /** 系统服务管理 * sservices.msc */ /** 远程服务器连接 * mstsc */ /** doc命令窗口 * doc */

  7. apache2.4

    介绍 Apache HTTP server是Apache软件基金会的一个开源的网页服务器,可以运行在几乎所有广泛使用的计算机平台上,由于跨平台和安全性被广泛使用,是目前最流行的web服务器软件之一,目 ...

  8. Nginx 高级配置-变量使用

    Nginx 高级配置-变量使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  nginx的变量可以在配置文件中引用,作为功能判断或者日志等场景使用,变量可以分为内置变量和自定义变 ...

  9. IoU与非极大值抑制(NMS)的理解与实现

    1. IoU(区域交并比) 计算IoU的公式如下图,可以看到IoU是一个比值,即交并比. 在分子中,我们计算预测框和ground-truth之间的重叠区域: 分母是并集区域,或者更简单地说,是预测框和 ...

  10. dapi 基于Django的轻量级测试平台二 前端页面

    QQ群: GitHub:https://github.com/yjlch1016/dapi 一.登录页login.html: 二.首页home.html: 三.产品线列表页product.html: ...