python实现数据结构中双向循环链表操作的示例
作者:GUET_DM_WLB 发布时间:2023-09-05 00:36:47
标签:python,双向循环链表
看此博客之前建议先看看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
来源:https://blog.csdn.net/qq_35874169/article/details/108967489


猜你喜欢
- 很多Python学习者想必都会有如下感悟:最开始学习Python的时候,因为没有去探索好用的工具,吃了很多苦头。后来工作中深刻体会到,合理使
- QQ影音至9月发布之后一直口碑很好,视觉界面和交互设计也颇受好评,这是设计师们努力的结果,也是众多用户反馈的功劳。我们希望可以提供更多价值回
- 对有自增长字段的表导入数据注意事项: 1、把自增长字段暂时设置成非自增长的;导入数据成功后,再设置成自增长字段。 2、导出、导入数据时,注意
- 废话不多说了,直接给大家贴代码了。import urllibimport urllib2import cookielibdef getImg
- 1,System.ComponentModelSystem.ComponentModel 命名空间提供用于实现组件和控件的运行时和设计时行为
- Python的创始人为荷兰人吉多·范罗苏姆 (Guido van Rossum)。 * 圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞
- Python continue语句:当执行到 continue 语句时,将不再执行本次循环中 continue 语句接下来的部分,而是继续下
- copy模块用于对象的拷贝操作。该模块非常简单,只提供了两个主要的方法: copy.copy 与 copy.deepcopy ,分别表示浅复
- 1.由于数据库设计问题造成SQL数据库新增数据时超时症状:Microsoft OLE DB Provider for SQL Server
- 背景最近在搞爬虫,很多小组件里面都使用了 Python 的 requests 库,很好用,很强大。但最近发现很多任务总是莫名其妙的卡住,不报
- 代码如下所示:scole = input("input your scole:")if scole>90: &nb
- [LeetCode] 181.Employees Earning More Than Their Managers 员工挣得比经理多The&
- 今天闲来无聊无意间看到了百度股票,就想着用python爬一下数据,于是就找到了东方财经网,结合这两个网站,写了一个小爬虫,数据保存在文件中,
- 理想高通滤波实现 python opencvimport numpy as np import cv2 from matplotlib im
- 在学习python的时候,被推荐了使用PyCharm这款IDE,但是在import包的时候却发生了问题- -无法引入,但是明明通过了pip进
- 本文实例讲述了RC4文件加密的python实现方法。分享给大家供大家参考。具体分析如下:基于RC4流加密算法,使用扩展的16*16的S盒,3
- 1.安装python windows版本好:python-2.5.1.msi2.安装pycrypto windows版本号:py
- 用命令创建Django项目1.将磁盘切换为D盘2.在D盘的路径下创建Django项目创建项目应用3.最后显示新建index文件夹启动项目1.
- 如下所示:aa = [1,2,3,4,5]aa.index(max(aa))如果aa是numpy数组:aa = numpy.array([1
- 无论哪种编程语言,时间肯定都是非常重要的部分,今天来看一下python如何来处理时间和python定时任务,注意咯:本篇所讲是python3