循环链表的入队操作0(1) 出队操作0(1)
#!/usr/bin/env python3 class QueueUnderflow(ValueError): pass class CQueue(object): def __init__(self, init_len=8): self.len = init_len self._elems = [None] * init_len self.head = 0 self.num = 0 def is_empty(self): return self.num == 0 def is_full(self): return self.num == self.len def peek(self): if self.num == 0: raise QueueUnderflow e = self._elems[self.head] return e 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, elem): if self.is_full(): self._extends() self._elems[(self.head + self.num) % self.len] = elem self.num += 1 def _extends(self): old_len = self.len self.len = old_len * 2 new_elems = [None] * 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 bianli(self): li = [] for i in range(self.num): li.append(self._elems[(self.head+i) % self.len]) return li if __name__ == ‘__main__‘: cq = CQueue() for i in range(12): cq.enqueue(i) print(cq.bianli()) cq.dequeue() cq.dequeue() print(cq.bianli())
原文:http://www.cnblogs.com/xautxuqiang/p/6416543.html