class QueueUnderflow(ValueError): """队列为空""" pass class SQueue: def __init__(self, init_len=5): self._len = init_len # 存储区长度 self._elems = [0] * init_len # 元素存储 self._head = 0 # 表头元素下标 self._num = 0 # 元素个数 def is_empty(self): return self._num == 0 def peek(self): """查看队头元素""" if self._num == 0: raise QueueUnderflow return self._elems[self._head] def dequeue(self): """出队""" if self._num == 0: raise QueueUnderflow e = self._elems[self._head] self._head = (self._head + 1) % self._len self._num -= 1 return e def enqueue(self, e): """入队""" if self._head == self._len - 1: self._extend() self._elems[(self._head + self._num) % self._len] = e self._num += 1 def _extend(self): """扩容操作""" old_len = self._len self._len *= 2 new_elems = [0] * self._len for i in range(old_len): new_elems[i] = self._elems[(self._head + i) % old_len] self._elems, self._head = new_elems, 0 def print(self): """打印从队头开始""" end = self._head + self._num print("list:", self._elems[self._head:end])
06.队列
猜你喜欢
转载自www.cnblogs.com/fly-book/p/11720129.html
今日推荐
周排行