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的Urllib库的一些高级用法
Apr 30 Python
python 判断是否为正小数和正整数的实例
Jul 23 Python
用python实现的线程池实例代码
Jan 06 Python
Python登录系统界面实现详解
Jun 25 Python
使用python批量修改文件名的方法(视频合并时)
Mar 24 Python
Python图像处理库PIL的ImageFont模块使用介绍
Feb 26 Python
PYQT5 vscode联合操作qtdesigner的方法
Mar 24 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
Python基于callable函数检测对象是否可被调用
Oct 16 Python
python 获取字典键值对的实现
Nov 12 Python
python中xlutils库用法浅析
Dec 29 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 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超级全局变量
2010/01/26 PHP
drupal 代码实现URL重写
2011/05/04 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
PHP笛卡尔积实现原理及代码实例
2020/12/09 PHP
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
IE 下的只读 innerHTML
2009/08/21 Javascript
IE6,IE7下js动态加载图片不显示错误
2010/07/17 Javascript
js中生成map对象的方法
2014/01/09 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
javascript关于open.window子页面执行完成后刷新父页面的问题分析
2015/04/27 Javascript
JavaScript 经典实例日常收集整理(常用经典)
2016/03/30 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
2016/05/10 Javascript
利用jquery实现下拉框的禁用与启用
2016/12/07 Javascript
JS实现列表页面隔行变色效果
2017/03/25 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
Vue cli构建及项目打包以及出现的问题解决
2018/08/27 Javascript
nodejs读取图片返回给浏览器显示
2019/07/25 NodeJs
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
用Python编写一个简单的FUSE文件系统的教程
2015/04/02 Python
Python根据成绩分析系统浅析
2019/02/11 Python
Tensorflow模型实现预测或识别单张图片
2019/07/19 Python
PyCharm 配置远程python解释器和在本地修改服务器代码
2019/07/23 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
使用Python将xmind脑图转成excel用例的实现代码(一)
2020/10/12 Python
Python+OpenCV检测灯光亮点的实现方法
2020/11/02 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
纯css3制作网站后台管理面板
2014/12/30 HTML / CSS
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
网络编辑职责
2014/03/01 职场文书
产品质量保证书
2014/04/29 职场文书
2014年工程部工作总结
2014/11/25 职场文书
北京故宫导游词
2015/01/31 职场文书
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL