数组队列
class Queue:
def __init__(self):
self.entries = []
self.front = 0
self.size = 0
def __repr__(self):
printed = "<" + str(self.entries)[1:-1] + ">"
return printed
# 入队 enqueue
def put(self,data):
self.entries.append(data)
self.size += 1
# 出队 dequeue
def pop(self):
self.size -= 1
dequeued = self.entries[self.front]
self.entries = self.entries[1:]
return dequeued
def length(self):
return self.size
def head(self):
return self.entries[0]
def rotate(self,rotation):
for i in range(rotation):
self.put(self.get())
链表队列
from typing import List,Any,Optional
class Node:
def __init__(self,data: Any,next: Optional = None):
self.data = data
self.next = next
def __repr__(self):
return f"Node({self.data})"
class Linkedqueue:
def __init__(self):
self.front = None
self.rear = None
self.size = 0
# 进队
def put(self,data: Any):
new_node = Node(data)
if self.front is None:
self.front = new_node
self.rear = new_node
else:
self.rear.next = new_node
self.rear = new_node
self.size += 1
# 出队
def pop(self):
if self.front is None:
raise IndexError("空队列")
else:
node = self.front
self.front = self.front.next
self.size -= 1
# 取值
def get(self,index: int):
if index < 0 or index >= self.size:
raise Exception("越界")
cur = self.front
for _ in range(index):
cur = cur.next
return cur
# 是否为空
def is_empty(self):
return self.front is None
def __repr__(self):
cur = self.front
result = ""
while cur is not None:
result += f"{cur}<--"
cur = cur.next
return result + "End"