顺序表队列 入队0(n) 出队0(1)
列表的下端为出口
这里需要注意的是 self._elems = [None] * init_len
不然后面的程序会出现 IndexError
1 #!/usr/bin/env python3 2 3 class QueueUnderflow(ValueError): 4 pass 5 6 class Simple_SQueue(object): 7 def __init__(self, init_len=8): 8 self.len = init_len 9 self._elems = [None] * init_len 10 self.num = 0 11 12 def is_empty(self): 13 return self._elems == [] 14 15 def count(self): 16 return self.num 17 18 def is_full(self): 19 return self.num == self.len 20 21 def dequeue(self): 22 if self.num == 0: 23 raise QueueUnderflow 24 e = self._elems[self.num-1] 25 self.num -= 1 26 return e 27 28 def peek(self): 29 if self.num == 0: 30 raise QueueUnderflow 31 e = self._elems[self.num-1] 32 return e 33 34 def enqueue(self, elem): 35 if self.is_full(): 36 self._extends(init_len) 37 if self.num == 0: 38 self._elems[0] = elem 39 self.num += 1 40 return 41 for i in range(self.num,0,-1): 42 self._elems[i] = self._elems[i-1] 43 self._elems[0] = elem 44 self.num += 1 45 46 def _extends(self): 47 pass 48 49 def bianli(self): 50 li = [] 51 for i in range(self.num-1,-1,-1): 52 li.append(self._elems[i]) 53 return li 54 55 if __name__ == '__main__': 56 sq = Simple_SQueue() 57 for i in [1,2,3,4,5]: 58 sq.enqueue(i) 59 print(sq.bianli()) 60 sq.dequeue() 61 sq.dequeue() 62 print(sq.bianli())