FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
algorithms/queue/queue.py at master · ii0/algorithms · GitHub
ii0
/
algorithms
Public
forked from
keon/algorithms
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
algorithms
/
queue
/
queue.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
114 lines (99 loc) · 3.18 KB
Breadcrumbs
algorithms
/
queue
/
queue.py
Copy path
File metadata and controls
114 lines (99 loc) · 3.18 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# Queue Abstract Data Type (ADT)
# * Queue() creates a new queue that is empty.
# It needs no parameters and returns an empty queue.
# * enqueue(item) adds a new item to the rear of the queue.
# It needs the item and returns nothing.
# * dequeue() removes the front item from the queue.
# It needs no parameters and returns the item. The queue is modified.
# * isEmpty() tests to see whether the queue is empty.
# It needs no parameters and returns a boolean value.
# * size() returns the number of items in the queue.
# It needs no parameters and returns an integer.
class
AbstractQueue
:
def
__init__
(
self
):
self
.
top
=
0
def
isEmpty
(
self
):
return
self
.
top
==
0
def
__len__
(
self
):
return
self
.
top
def
__str__
(
self
):
result
=
'------
\n
'
for
element
in
self
:
result
+=
str
(
element
)
+
'
\n
'
return
result
[:
-
1
]
+
'
\n
------'
class
ArrayQueue
(
AbstractStack
):
def
__init__
(
self
,
size
=
10
):
"""
Initialize python List with size of 10 or user given input.
Python List type is a dynamic array, so we have to restrict its
dynamic nature to make it work like a static array.
"""
AbstractStack
.
__init__
(
self
)
self
.
array
=
[
None
]
*
size
self
.
front
=
0
self
.
rear
=
0
def
enqueue
(
self
,
value
):
if
self
.
top
==
len
(
self
.
array
):
self
.
expand
()
self
.
array
[
self
.
top
]
=
value
self
.
top
+=
1
def
dequeue
(
self
):
if
self
.
isEmpty
():
raise
IndexError
(
"stack is empty"
)
value
=
self
.
array
[
self
.
top
-
1
]
self
.
array
[
self
.
top
-
1
]
=
None
self
.
top
-=
1
return
value
def
expand
(
self
):
"""
expands size of the array.
Time Complexity: O(n)
"""
new_array
=
[
None
]
*
len
(
self
.
array
)
*
2
# double the size of the array
for
i
,
element
in
enumerate
(
self
.
array
):
new_array
[
i
]
=
element
self
.
array
=
new_array
def
__iter__
(
self
):
probe
=
self
.
top
-
1
while
True
:
if
probe
<
0
:
raise
StopIteration
yield
self
.
array
[
probe
]
probe
-=
1
class
QueueNode
(
object
):
def
__init__
(
self
,
value
):
self
.
value
=
value
self
.
next
=
None
class
LinkedListQueue
(
AbstractStack
):
def
__init__
(
self
):
AbstractQueue
.
__init__
(
self
)
self
.
front
=
None
self
.
rear
=
None
def
enqueue
(
self
,
value
):
node
=
QueueNode
(
value
)
if
not
front
:
self
.
front
=
node
self
.
rear
=
node
else
:
self
.
rear
.
next
=
node
self
.
rear
=
node
self
.
top
+=
1
def
dequeue
(
self
):
if
self
.
isEmpty
():
raise
IndexError
(
"Queue is empty"
)
value
=
self
.
front
.
value
if
self
.
front
is
self
.
rear
:
self
.
rear
=
None
self
.
front
=
self
.
front
.
next
self
.
top
-=
1
return
value
def
__iter__
(
self
):
probe
=
self
.
head
while
True
:
if
probe
is
None
:
raise
StopIteration
yield
probe
.
value
probe
=
probe
.
next
class
HeapPriorityQueue
(
AbstractStack
):
def
__init__
(
self
):
pass
Back
|
FazBrowse Home
|
New Git URL