python实现数据结构中双向循环链表操作的示例


Posted in Python onOctober 09, 2020

看此博客之前建议先看看B站的视频python数据结构与算法系列课程,该课程中未实现双向循环链表的操作,所以我按照该视频的链表思路实现了双向循环链表的操作,欢迎大家阅读与交流,如有侵权,请联系博主!

下面附上代码:

class Node:
  def __init__(self, elem):
    self.elem = elem
    self.prev = None
    self.next = None


class DoubleCycleLinkList:
  def __init__(self, node=None):
    self.__head = node

  def is_empty(self):
    """判空"""
    if self.__head is None:
      return True
    return False

  def length(self):
    """链表长度"""
    if self.is_empty():
      return 0
    cur = self.__head
    count = 1
    while cur.next is not self.__head:
      count += 1
      cur = cur.next
    return count

  def travel(self):
    """遍历链表"""
    if self.is_empty():
      return
    cur = self.__head
    while cur.next is not self.__head:
      print(cur.elem, end=" ")
      cur = cur.next
    print(cur.elem, end=" ")
    print("")

  def add(self, elem):
    """头插法"""
    node = Node(elem)
    if self.is_empty():
      self.__head = node
      node.prev = node
      node.next = node
    else:
      self.__head.prev.next = node
      node.prev = self.__head.prev
      node.next = self.__head
      self.__head.prev = node
      self.__head = node

  def append(self, elem):
    """尾插法"""
    node = Node(elem)
    if self.is_empty():
      self.__head = node
      node.prev = node
      node.next = node
    else:
      node.next = self.__head
      node.prev = self.__head.prev
      self.__head.prev.next = node
      self.__head.prev = node

  def insert(self, pos, elem):
    """任一位置(pos)插入, 下标从0数起"""
    if pos <= 0:
      self.add(elem)
    elif pos > (self.length() - 1):
      self.append(elem)
    else:
      count = 0
      cur = self.__head
      node = Node(elem)
      while count < (pos - 1):
        count += 1
        cur = cur.next
      node.next = cur.next
      node.prev = cur
      node.next.prev = node
      cur.next = node

  def remove(self, elem):
    """删除某一节点,若有多个符合条件的节点,删除第一个即可"""
    if self.is_empty():
      return
    cur = self.__head
    while cur.next is not self.__head:
      if cur.elem == elem:
        if cur is self.__head:
          self.__head = cur.next
          cur.prev.next = cur.next
          cur.next.prev = cur.prev
        else:
          cur.prev.next = cur.next
          cur.next.prev = cur.prev
        break
      cur = cur.next
    if cur.elem == elem:
      cur.prev.next = self.__head
      self.head = cur.prev

  def search(self, elem):
    """查找某一个节点"""
    if self.is_empty():
      return False
    cur = self.__head
    while cur.next is not self.__head:
      if cur.elem == elem:
        return True
      cur = cur.next
    # while中处理不到尾节点,所以进行最后尾节点的判断
    if cur.elem == elem:
      return True
    return False

到此这篇关于python实现数据结构中双向循环链表操作的示例的文章就介绍到这了,更多相关python 双向循环链表操作内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python抓取网页内容示例分享
Feb 24 Python
仅利用30行Python代码来展示X算法
Apr 01 Python
python的pdb调试命令的命令整理及实例
Jul 12 Python
Python 错误和异常代码详解
Jan 29 Python
pandas去除重复列的实现方法
Jan 29 Python
解决python执行不输出系统命令弹框的问题
Jun 24 Python
这可能是最好玩的python GUI入门实例(推荐)
Jul 19 Python
python numpy 矩阵堆叠实例
Jan 17 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
May 18 Python
keras的ImageDataGenerator和flow()的用法说明
Jul 03 Python
在pycharm创建scrapy项目的实现步骤
Dec 01 Python
Pygame Draw绘图函数的具体使用
Nov 17 Python
Python collections模块的使用方法
Oct 09 #Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 #Python
Python中Selenium模块的使用详解
Oct 09 #Python
python利用platform模块获取系统信息
Oct 09 #Python
python smtplib发送多个email联系人的实现
Oct 09 #Python
python 决策树算法的实现
Oct 09 #Python
Python+unittest+requests 接口自动化测试框架搭建教程
Oct 09 #Python
You might like
YII实现分页的方法
2014/07/09 PHP
PHP使用memcache缓存技术提高响应速度的方法
2014/12/26 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
thinkPHP5.1框架路由::get、post请求简单用法示例
2019/05/06 PHP
Centos7 Yum安装PHP7.2流程教程详解
2019/07/02 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
jQuery中first()方法用法实例
2015/01/06 Javascript
JavaScript中的值是按值传递还是按引用传递问题探讨
2015/01/30 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
js+css实现上下翻页相册代码分享
2015/08/18 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
2016/04/20 Javascript
JavaScript、C# URL编码、解码总结
2017/01/21 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
JS动态修改网页body的背景色实例代码
2017/10/07 Javascript
VUE2.0中Jsonp的使用方法
2018/05/22 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
python中requests小技巧
2017/05/10 Python
详解Python pygame安装过程笔记
2017/06/05 Python
利用python实现xml与数据库读取转换的方法
2017/06/17 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
pytorch 实现cross entropy损失函数计算方式
2020/01/02 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
2020/02/28 Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
2020/06/17 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
澳大利亚领先的皮肤诊所:Skin Matrix(抗衰老、痤疮专家、药妆护肤)
2018/05/20 全球购物
成功的餐厅经营创业计划书
2014/01/15 职场文书
中秋节礼品促销方案
2014/02/02 职场文书
装饰活动策划方案
2014/02/11 职场文书
青奥会口号
2014/06/12 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
golang在GRPC中设置client的超时时间
2021/04/27 Golang
Pygame如何使用精灵和碰撞检测
2021/11/17 Python