单向链表

```class Empty(Exception):
pass

class Node():
def __init__(self,element,next):
self.element = element
self.next = next

def __init__(self):
self.size = 0

self.size +=1

def remove_first(self):
if self.size == 0:
self.size -= 1```

循环链表

```class CircularQueue():

"""
使用循环链表实现的队列
"""

class Node():
def __init__(self, element, next):
self.element = element
self.next = next

def __init__(self):
self.tail = None
self.size = 0

def __len__(self):
return self.size

def is_empty(self):
return self.size == 0

def first(self):
if self.is_empty():
raise Empty('Queue is empty')
return self.tail.next.element

def dequeue(self):
if self.is_empty():
raise Empty('Queue is empty')
if self.size == 1:
self.tail = None
else:
self.size -= 1

def enqueue(self, e):
new = self.Node(e, None)
if self.is_empty():
new.next = new
else:
new.next = self.tail.next
self.tail.next = new
self.tail = new
self.size += 1

def rotate(self):
"""
将队列的头部变为尾部，循环移动一位
"""
if self.size > 0:
self.tail = self.tail.next```

双向链表

具体实现

```class DoubleLinkedList():

"""
具有头哨兵与尾哨兵的双向链表
"""

class Node():
def __init__(self,element,prev,next):
self.element = element
self.prev = prev
self.next = next

def __init__(self):
self.tail = self.Node(None,None,None)
self.size = 0

def __len__(self):
return self.size

def is_empty(self):
return self.size == 0

def insert_between(self,e,predecessor,successor):
new = self.Node(e,predecessor,successor)
predecessor.next = new
successor.prev = new
self.size += 1
return new

def delete_node(self,node):
predecessor = node.prev
successor = node.next
predecessor.next = successor
successor.prev = predecessor
element = node.element
self.size -= 1
node.prev=node.next=None
return element```

insert_between传入的是元素与前驱节点和后继节点

delete_node传入的是要删除的节点

0 条评论

• 从PEP-8学习Python编码风格

Python3中应当总是使用UTF-8。（Python2使用ASCII。）在使用了规定编码后不需要再声明文件编码。

• Python要self的理由

Python的类的方法和普通的函数有一个很明显的区别，在类的方法必须有个额外的第一个参数 (self )，但在调用这个方法的时候不必为这个参数赋值 （显胜于隐 ...

• Python自建logging模块

每一个logger对象，都有一个日志级别，它只会输出高于它level的日志。如果一个logger的level是INFO，那么调用logger.debug()是无...

• 【CV中的Attention机制】BiSeNet中的FFM模块与ARM模块

语义分割需要丰富的空间信息和相关大的感受野，目前很多语义分割方法为了达到实时推理的速度选择牺牲空间分辨率，这可能会导致比较差的模型表现。

• Python要self的理由

Python的类的方法和普通的函数有一个很明显的区别，在类的方法必须有个额外的第一个参数 (self )，但在调用这个方法的时候不必为这个参数赋值 （显胜于隐 ...

• python自学成才之路 类详细用法

python是一门面向对象编程的语言，python的类和java中的类思想上有很多一样的地方，比如python类也是通过class修饰，里面也有成员属性，成员方...

• Python Day7

是一种新建类的方式，新建的类称为子类，子类会遗传父亲的属性，可以减少代码冗余 在python当中，子类（派生类）可以继承一个或多个父类（基类，超类）

• Python GUI项目实战（一）登录窗体的设计与实现

前面我们学习了Python GUI 图型化界面Tkinter的基础知识，为了检测我们的学习成果，学以致用。我们从今天开始做一个综合Tkinter案例--基于Tk...