Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d376ba1

Browse files
realDuYuanChaogithub-actions
and
github-actions
authored
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)

AltStyle によって変換されたページ (->オリジナル) /