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 列表(List)操作方法详解
Mar 11 Python
跟老齐学Python之大话题小函数(1)
Oct 10 Python
Python实现的监测服务器硬盘使用率脚本分享
Nov 07 Python
Python的Flask框架应用程序实现使用QQ账号登录的方法
Jun 07 Python
Python利用正则表达式实现计算器算法思路解析
Apr 25 Python
详解如何用python实现一个简单下载器的服务端和客户端
Oct 28 Python
Python class的继承方法代码实例
Feb 14 Python
python opencv实现图片缺陷检测(讲解直方图以及相关系数对比法)
Apr 07 Python
一文详述 Python 中的 property 语法
Sep 01 Python
scrapy中如何设置应用cookies的方法(3种)
Sep 22 Python
python 统计list中各个元素出现的次数的几种方法
Feb 20 Python
pytorch 一行代码查看网络参数总量的实现
May 12 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中关于普通表单多文件上传的处理方法
2011/03/25 PHP
PHP生成随机密码类分享
2014/06/25 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
js 编写规范
2010/03/03 Javascript
chrome原生方法之数组
2011/11/30 Javascript
javascript中call,apply,bind的用法对比分析
2015/02/12 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
微信小程序官方动态自定义底部tabBar的例子
2019/09/04 Javascript
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
浅谈Python处理PDF的方法
2017/11/10 Python
python的exec、eval使用分析
2017/12/11 Python
python实现数据写入excel表格
2018/03/25 Python
python编写简易聊天室实现局域网内聊天功能
2018/07/28 Python
在Python中分别打印列表中的每一个元素方法
2018/11/07 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
2019/06/21 Python
使用pandas读取文件的实现
2019/07/31 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
Python基于execjs运行js过程解析
2020/11/27 Python
SHEIN台湾:购买最新流行女装服饰
2019/05/18 全球购物
教师党员承诺书
2014/03/25 职场文书
高三上学期学习自我评价
2014/04/23 职场文书
优秀家长事迹材料
2014/05/17 职场文书
让世界充满爱演讲稿
2014/05/24 职场文书
农业项目建议书
2014/08/25 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
python爬取企查查企业信息之selenium自动模拟登录企查查
2021/04/08 Python
Oracle 临时表空间SQL语句的实现
2021/09/25 Oracle
详解CSS3浏览器兼容
2022/12/24 HTML / CSS