队列-Python 实现
用 Python 来实现 队列和双端队列, 直接上代码理解即可. 队列蛮好理解的, 就是模拟咱生活中的排队. 先进, 先出嘛.
"""
队列 - ADT
队列 Queue 被构造为在队尾添加元素, 队首删除元素的有序集合, FIFO
Queue(): 创建一个空队列
enqueue(itme): 入队, 将元素添加到队尾
dequeue(): 出队, 删除队首元素并返回
is_empty(): 判断队列是否为空
sise(): 返回队列中的元素个数
思路:
用 list 作为底层, 约定, 最左端为队尾, 最右端为队首
"""
class Queue:
def __init__(self):
self.items = []
def enqueue(self, item):
"""添加元素到队尾"""
self.items.insert(0, item)
def dequeue(self):
"""删除队首元素并返回"""
return self.items.pop()
def is_empty(self):
return self.items == []
def size(self):
return len(self.items)
if __name__ == '__main__':
q = Queue()
for i in range(1,6):
q.enqueue(i)
print(q.size())
print(q.dequeue())
print(q.dequeue())
print(q.is_empty())
Dquue - 双端队列
"""
Deque
双端队列被构造为项的集合, 可以从队首或队尾任意一段增删元素.
Deque(): 创建一个新的Deque
add_front(item): 从队首添加元素
add_rear(item): 从队尾添加元素
remove_front(item): 从队首删除元素, 并返回
remove_rear(item): 从队尾删除元素, 并返回
is_empty(): 判断队列是否空
size(): 返回队列中的项数
思路:
用 list 作为底层架构, 并约定, 最左边为对尾, 最右侧为对首
"""
class Deque:
def __init__(self):
self.items = []
def add_front(self, item):
"""队首添加元素"""
self.items.append(item)
def remove_front(self):
"""队首删除元素"""
return self.items.pop()
def add_rear(self, item):
"""队尾添加元素"""
self.items.insert(0, item)
def remove_rear(self):
"""删除队尾元素"""
return self.items.pop(0)
def is_empty(self):
return self.items == []
def size(self):
return len(self.items)
if __name__ == '__main__':
dq = Deque()
for i in range(3):
dq.add_front(i)
print(dq.size())
dq.add_rear(-1)
print(dq.remove_front())
print(dq.size())
耐心和恒心, 总会获得回报的.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通