Skip to content

Commit d376ba1

Browse files
realDuYuanChaogithub-actions
andauthored
Add queue (#20)
* add queue * queue example * Formatted with psf/black Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
1 parent f867cff commit d376ba1

File tree

2 files changed

+159
-0
lines changed

2 files changed

+159
-0
lines changed

basics/deque_example.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
def main() -> None:
2+
"""
3+
>>> from collections import deque
4+
>>> queue = deque(["Python", "Java", "C"])
5+
>>> len(queue)
6+
3
7+
>>> queue
8+
deque(['Python', 'Java', 'C'])
9+
>>> queue.popleft()
10+
'Python'
11+
>>> queue.popleft()
12+
'Java'
13+
>>> queue.clear()
14+
>>> len(queue)
15+
0
16+
>>> queue
17+
deque([])
18+
>>> queue.popleft()
19+
Traceback (most recent call last):
20+
...
21+
IndexError: pop from an empty deque
22+
"""
23+
24+
25+
if __name__ == "__main__":
26+
from doctest import testmod
27+
28+
testmod()

data_structures/queue/queue.py

Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
"""
2+
https://en.wikipedia.org/wiki/Queue_(abstract_data_type)
3+
"""
4+
from typing import Any
5+
6+
7+
class Queue:
8+
def __init__(self) -> None:
9+
self.queue = []
10+
11+
def __len__(self) -> int:
12+
"""
13+
>>> queue = Queue()
14+
>>> len(queue)
15+
0
16+
>>> for i in range(0, 5):
17+
... assert len(queue) == i
18+
... queue.enqueue(i)
19+
>>> len(queue)
20+
5
21+
"""
22+
return len(self.queue)
23+
24+
def __str__(self) -> str:
25+
"""
26+
>>> queue = Queue()
27+
>>> str(queue)
28+
''
29+
>>> for i in range(1, 6):
30+
... queue.enqueue(i)
31+
>>> str(queue)
32+
'1 <- 2 <- 3 <- 4 <- 5'
33+
"""
34+
return " <- ".join([str(item) for item in self.queue])
35+
36+
def size(self) -> int:
37+
"""
38+
>>> queue = Queue()
39+
>>> queue.size()
40+
0
41+
>>> for i in range(0, 5):
42+
... assert queue.size() == i
43+
... queue.enqueue(i)
44+
>>> queue.size()
45+
5
46+
"""
47+
return len(self)
48+
49+
def is_empty(self) -> bool:
50+
"""
51+
>>> queue = Queue()
52+
>>> queue.is_empty()
53+
True
54+
>>> queue.enqueue('a')
55+
>>> queue.enqueue('b')
56+
>>> queue.is_empty()
57+
False
58+
"""
59+
return len(self) == 0
60+
61+
def enqueue(self, item: Any) -> None:
62+
"""
63+
>>> queue = Queue()
64+
>>> str(queue)
65+
''
66+
>>> for i in range(0, 5):
67+
... queue.enqueue(i)
68+
>>> str(queue)
69+
'0 <- 1 <- 2 <- 3 <- 4'
70+
"""
71+
self.queue.append(item)
72+
73+
def dequeue(self) -> Any:
74+
"""
75+
>>> queue = Queue()
76+
>>> for i in range(0, 5):
77+
... queue.enqueue(i)
78+
>>> str(queue)
79+
'0 <- 1 <- 2 <- 3 <- 4'
80+
>>> queue.dequeue()
81+
0
82+
>>> queue.dequeue()
83+
1
84+
>>> str(queue)
85+
'2 <- 3 <- 4'
86+
>>> for i in range(2, 5):
87+
... assert queue.dequeue() == i
88+
>>> str(queue)
89+
''
90+
"""
91+
if self.is_empty():
92+
raise IndexError("dequeue from empty queue")
93+
ret_item = self.queue[0]
94+
self.queue = self.queue[1:]
95+
return ret_item
96+
97+
def peek(self) -> Any:
98+
"""
99+
>>> queue = Queue()
100+
>>> queue.enqueue("Python")
101+
>>> queue.enqueue("Java")
102+
>>> queue.enqueue("C")
103+
>>> queue.peek()
104+
'Python'
105+
>>> queue.dequeue()
106+
'Python'
107+
>>> queue.dequeue()
108+
'Java'
109+
"""
110+
if self.is_empty():
111+
raise IndexError("dequeue from empty queue")
112+
return self.queue[0]
113+
114+
def clear(self) -> None:
115+
"""
116+
>>> queue = Queue()
117+
>>> for i in range(1, 6):
118+
... queue.enqueue(i)
119+
>>> str(queue)
120+
'1 <- 2 <- 3 <- 4 <- 5'
121+
>>> queue.clear()
122+
>>> str(queue)
123+
''
124+
"""
125+
self.queue = []
126+
127+
128+
if __name__ == "__main__":
129+
from doctest import testmod
130+
131+
testmod()

0 commit comments

Comments
 (0)