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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
详解Python发送邮件实例
Jan 10 Python
Python 40行代码实现人脸识别功能
Apr 02 Python
K-means聚类算法介绍与利用python实现的代码示例
Nov 13 Python
PyQt5 实现字体大小自适应分辨率的方法
Jun 18 Python
python__name__原理及用法详解
Nov 02 Python
分享PyCharm的几个使用技巧
Nov 10 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
Python 3.8 新功能来一波(大部分人都不知道)
Mar 11 Python
基于python SMTP实现自动发送邮件教程解析
Jun 02 Python
Django框架请求生命周期实现原理
Nov 13 Python
Python常遇到的错误和异常
Nov 02 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读取xml实例代码
2010/01/28 PHP
ThinkPHP自动验证失败的解决方法
2011/06/09 PHP
PHP实现微信红包金额拆分试玩的算法示例
2018/04/07 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
理解 JavaScript 预解析
2009/10/25 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
原生js的数组除重复简单实例
2016/05/24 Javascript
javascript经典特效分享 手风琴、轮播图、图片滑动
2016/09/14 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
基于Swiper实现移动端页面图片轮播效果
2017/12/28 Javascript
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
解析Python中的异常处理
2015/04/28 Python
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
python线程池threadpool实现篇
2018/04/27 Python
python实现批量图片格式转换
2020/06/16 Python
django Admin文档生成器使用详解
2019/07/22 Python
python 类的继承 实例方法.静态方法.类方法的代码解析
2019/08/23 Python
使用Python代码实现Linux中的ls遍历目录命令的实例代码
2019/09/07 Python
pytorch 图像预处理之减去均值,除以方差的实例
2020/01/02 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
keras 读取多标签图像数据方式
2020/06/12 Python
CSS3实现鼠标悬停显示扩展内容
2016/08/24 HTML / CSS
Html5 页面适配iPhoneX(就是那么简单)
2019/09/05 HTML / CSS
EGO Shoes美国/加拿大:英国时髦鞋类品牌
2018/08/04 全球购物
解释i节点在文件系统中的作用
2013/11/26 面试题
人事专员岗位职责
2013/11/20 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
学校节能减排方案
2014/06/13 职场文书
感恩祖国演讲稿
2014/09/09 职场文书
市级三好学生评语
2014/12/29 职场文书
2015暑期社会实践个人总结
2015/07/13 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS