基于python的数据结构之数组Queue
2021/6/8 22:51:01
本文主要是介绍基于python的数据结构之数组Queue,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
思路:
- 需要队头队尾指针
- push操作:
- 每次
push, head + 1
- 每次
- pop操作:
- pop队尾,
tail + 1
- pop队尾,
- 确保
len(Queue) <= array_size
- 到头之后取模返回就行
- 这一点十分重要,这是能够无限进行pop和push的关键计算方法。不管
# -*- coding:utf-8 -*- # Author: Greed_Vic(PL Z) # Product_name: PyCharm # File_name: arrayQ # @Time: 21:23 2021/6/8 class Array(object): """ 定义一个数组 """ def __init__(self, size=32): self._size = size # 设置数组长度 self._items = [None] * size # 开辟数组,初始None def __getitem__(self, index): return self._items[index] # 特殊方法,用来获取此下标的元素 def __setitem__(self, index, value): self._items[index] = value # 特殊方法,用来赋值? def __len__(self): return self._size # 特殊方法,获取长度 接受 len(array) def __iter__(self): for item in self._items: # 特殊方法, 接受迭代 yield item def clear(self, value=None): for i in range(self._items): self._items[i] = value # 重置 class ArrayQueue(object): """ 数组队列 """ def __init__(self, maxsize=18): self.maxsize = maxsize self.array = Array(maxsize) self.head = 0 self.tail = 0 def push(self, val): if self.head - self.tail >= self.maxsize: # 长度队列已经满了 raise Exception('Full ArrayQueue') self.array[self.head % self.maxsize] = val # 利用取模的方式进行获取位置 self.head += 1 # 入队一个 head 加一 def pop(self): if self.tail >= self.head: raise Exception('Empty ArrayQueue, you should push val first!') # pop操作只能在有数据的情况下进行 val = self.array[self.tail % self.maxsize] self.tail += 1 return val def __len__(self): return self.head - self.tail # 外界可用 len()方法进行获取长度 if __name__ == '__main__': """ 单测 """ def testAQ(): size = 5 q = ArrayQueue(size) for i in range(size): print(q.head, q.tail) assert len(q) == size assert q.pop() == 0 assert q.pop() == 1 q.push(9) assert len(q) == 4 assert q.pop() == 2 assert q.pop() == 3 assert q.pop() == 4 assert q.pop() == 9 print("Test Done!") testAQ()
这篇关于基于python的数据结构之数组Queue的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-03用FastAPI掌握Python异步IO:轻松实现高并发网络请求处理
- 2025-01-02封装学习:Python面向对象编程基础教程
- 2024-12-28Python编程基础教程
- 2024-12-27Python编程入门指南
- 2024-12-27Python编程基础
- 2024-12-27Python编程基础教程
- 2024-12-27Python编程基础指南
- 2024-12-24Python编程入门指南
- 2024-12-24Python编程基础入门
- 2024-12-24Python编程基础:变量与数据类型