实现链表
-
代码实现
-
创建一个链表节点
-
连接两个链表节点
-
打印链表的结构图
-
遍历每个链表节点
-
遍历每个链表节点的值
实现循环队列
-
代码实现
-
初始化一个循环队列
-
向队列中添加元素
-
遍历队列中的元素值
-
打印队列结构图
-
弹出队列的头部元素
-
压入元素超出队列的设定容量时自动弹出头部元素
-
利用循环队列实现窗口滑动计算
源代码:
class LinkedList(object):
def __init__(self, value):
self.__val = value
self.__next = None
def next(self):
return self.__next
def val(self):
return self.__val
def set_val(self, v):
self.__val = v
def to_iter(self, func=lambda x: x):
t = self
while t is not None:
yield func(t)
t = t.next()
def __rshift__(self, that):
self.__next = that
def __iter__(self):
yield from self.to_iter()
def __str__(self):
return f"LinkedList({self.__val})"
def graph_str(self):
return "->".join(map(str, self))
class LoopQueue(object):
def __init__(self, length, default=0):
self._queue_head = LinkedList(default)
self._queue_tail = self._queue_head
self._queue_head >> self._queue_tail
self._max_len = length
self._len = 0
def add_element(self, element):
if self._len < self._max_len:
self._queue_tail >> LinkedList(element)
self._queue_tail = self._queue_tail.next()
self._queue_tail >> self._queue_head
self._len += 1
elif self._len == self._max_len:
self._queue_head.set_val(element)
self._queue_tail = self._queue_head
return self.pop_head()
def pop_head(self, func=lambda x: x):
self._queue_head = self._queue_head.next()
return func(self._queue_head)
def to_iter(self, func=lambda x: x):
h = self._queue_head
while True:
h = h.next()
yield func(h)
if h is self._queue_tail:
break
def __str__(self):
result_str = "->".join(map(str, self.to_iter()))
result_str = f"{result_str}\n^{'-' * (len(result_str)-4)}|"
return result_str
def __len__(self):
return self._len
def __iter__(self):
yield from self.to_iter()
def __lshift__(self, other):
return self.add_element(other)
文章到这里就结束了,今天暂时只介绍了循环队列怎么使用;
如果后面对原理讲解有需求,我会在出一篇文章来讲解循环队列的原理;
如果文章对您有帮助不妨动动小手三连一下哟, 谢谢大家的支持!