基于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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-04Python外包有哪些常见的主要库-icode9专业技术文章分享
- 2024-10-02基于深度学习的钢铁缺陷检测系统(yolov8、注意力机制、PyQt5界面、Python)
- 2024-10-01怎么用python搭建一个系统-icode9专业技术文章分享
- 2024-09-30Python基础入门教程
- 2024-09-30获取参数学习:Python中的基础教程
- 2024-09-30Python编程基础详解
- 2024-09-29点击加载学习:Python编程基础教程
- 2024-09-29数据科学五大Python前端库:第二部分
- 2024-09-27使用python 将ETH账户的资产打散
- 2024-09-26Python编程基础