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双向链表实现实例代码
Nov 21 Python
Python获取远程文件大小的函数代码分享
May 13 Python
python使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
基于Python3.6+splinter实现自动抢火车票
Sep 25 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
python turtle 绘制太极图的实例
Dec 18 Python
详解opencv中画圆circle函数和椭圆ellipse函数
Dec 27 Python
python统计字符的个数代码实例
Feb 07 Python
Kmeans均值聚类算法原理以及Python如何实现
Sep 26 Python
利用Python网络爬虫爬取各大音乐评论的代码
Apr 13 Python
OpenCV-Python实现人脸磨皮算法
Jun 07 Python
使用Python开发冰球小游戏
Apr 30 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
PHP中文汉字验证码
2007/04/08 PHP
PHP迭代器实现斐波纳契数列的函数
2013/11/12 PHP
PHP 实现判断用户是否手机访问
2015/01/21 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
javascript 动态添加事件代码
2008/11/30 Javascript
兼容IE与firefox火狐的回车事件(js与jquery)
2010/10/20 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
JavaScript实现DIV层拖动及动态增加新层的方法
2015/05/12 Javascript
JavaScript实现页面跳转的方式汇总
2016/05/16 Javascript
基于JS代码实现图片在页面中旋转效果
2016/06/16 Javascript
jQuery 如何实现一个滑动按钮开关
2016/12/01 Javascript
微信小程序 radio单选框组件详解及实例代码
2017/01/10 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
2017/01/11 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
详解用webpack的CommonsChunkPlugin提取公共代码的3种方式
2017/11/09 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
微信小程序云开发实现云数据库读写权限
2019/05/17 Javascript
详解小程序如何动态绑定点击的执行方法
2019/11/26 Javascript
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
基于Django统计博客文章阅读量
2019/10/29 Python
Pytorch之卷积层的使用详解
2019/12/31 Python
Herschel Supply Co.美国:背包、手提袋及配件
2020/11/24 全球购物
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
电脑销售顾问自荐信
2014/01/29 职场文书
专业求职信撰写要诀
2014/02/18 职场文书
2014中考励志标语
2014/06/05 职场文书
环保项目建议书
2014/08/26 职场文书
2014教师评职称工作总结
2014/11/10 职场文书
2015年度公共机构节能工作总结
2015/05/26 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python