-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathqueue.py
More file actions
63 lines (54 loc) · 1.8 KB
/
queue.py
File metadata and controls
63 lines (54 loc) · 1.8 KB
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
"""
Queue Abstract Data Type
* 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.
* is_empty() tests to see whether the queue is empty.
It needs no parameters and returns a boolean value.
* peek() returns the front element of the queue.
"""
class Queue():
def __init__(self, capacity=10):
"""
Initialize python List with capacity 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.
"""
self._array = [None] * capacity
self._front = 0
self._rear = 0
self._size = 0
def __len__(self):
return self._size
def is_empty(self):
return self._size == 0
def enqueue(self, value):
if self._rear == len(self._array):
self._expand()
self._array[self._rear] = value
self._rear += 1
self._size += 1
def dequeue(self):
if self.is_empty():
raise IndexError('queue is empty')
value = self._array[self._front]
self._array[self._front] = None
self._front += 1
self._size -= 1
return value
def peek(self):
if self.is_empty():
raise IndexError('queue is empty')
return self._array[self._front]
def _expand(self):
self._array += [None] * len(self._array)
def __iter__(self):
probe = self._front
while True:
if probe == self._rear:
return
yield self._array[probe]
probe += 1