1. 程式人生 > >python 用數組實現隊列

python 用數組實現隊列

test imp div style exce arr get python port

# 數組有一個固定的長度。頭指針和尾指針,都指向數組第一個值。
# 當進行push操作的時候,頭指針後移。當進行pop操作的時候,尾指針向後移
# 當到達最後一個值的時候,重新指向第一個值。取模 %queue_size()



# 首先實現一個數組

class Array(object):
    def __init__(self,size = 32):
        self._size = size
        self._items = [None] * size  # 容器_items, 是一個每個值為None的列表


    def __getitem__
(self, index): # 實現下標訪問 return self._items[index] def __setitem__(self, index, value): self._items[index] = value def __len__(self): return self._size def clear(self, value=None): for i in range(len(self._items)): self._items[i]
= value def __iter__(self): for item in self._items: yield item class ArrayQueue(object): def __init__(self, maxsize): self.maxsize = maxsize self.array = Array(maxsize) self.head = 0 self.tail = 0 def push(self, value):
if len(self) >= self.maxsize: raise Exception(queue full) self.array[self.head % self.maxsize] = value self.head += 1 def pop(self): value = self.array[self.tail % self.maxsize] self.tail += 1 return value def __len__(self): return self.head - self.tail def test_arrrayqueue(): import pytest size = 5 q = ArrayQueue(size) for i in range(size): q.push(i) assert len(q) == size assert q.pop() == 0 assert q.pop() == 1 q.push(5) assert len(q) == 4 assert q.pop() == 2 assert q.pop() == 3 assert q.pop() == 4 assert q.pop() == 5 assert len(q) == 0

python 用數組實現隊列