数据结构 顺序表实现队列 回顾练习

顺序表队列 入队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())
原文地址:https://www.cnblogs.com/xautxuqiang/p/6416483.html