# -*-coding:utf-8-*-
class Array(object):
def __init__(self, size=32):
self._size = size
self._item = [None] * size
def __getitem__(self, index):
return self._item[index]
def __setitem__(self, index, value):
self._item[index] = value
def __len__(self):
return self._size
def clear(self):
for i in range(len(self._item)):
self._item[i] = None
def __iter__(self):
for item in self._item:
yield item
####################################################
# 实现队列 Queue
####################################################
class FullError(Exception):
pass
class EmptyError(Exception):
pass
class ArrayQueue():
def __init__(self, maxsize):
self.maxsize = maxsize
self.head = 0
self.tail = 0
self.array = Array()
def push(self, value):
if len(self) >= self.maxsize:
raise FullError("queue full")
self.array[self.head % self.maxsize] = value
self.head += 1
def pop(self):
if not len(self):
raise EmptyError("queue empty")
value = self.array[self.tail % self.maxsize]
self.tail += 1
return value
def __len__(self):
return self.head - self.tail
"""数组实现队列 单测"""
def test_array_queue():
maxsize = 3
q = ArrayQueue(maxsize)
for i in range(maxsize):
q.push(i)
assert len(q) == 3
import pytest
with pytest.raises(FullError) as Err_info:
q.push(3)
assert "queue full" in str(Err_info.value)
q.pop()
assert len(q) == 2
q.pop()
q.pop()
with pytest.raises(EmptyError) as empty_info:
q.pop()
assert "empty" in str(empty_info.value)
q.push(2)
数组(用数组实现队列)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。