-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdequeagain.py
56 lines (49 loc) · 1.66 KB
/
dequeagain.py
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
#deque
from DLL import DoublyLinkedList
class Deque(DoublyLinkedList):
def __init__(self):
super().__init__()
self._pointer1 = self._header
self._pointer2 = self._trailer
self._count = 0
self._first = 0
self._last = 0
def first(self):
if self.is_empty():
raise Empty('Queue Empty')
return self._header._next._element
def last(self):
if self.is_empty():
raise Empty('Queue Empty')
return self._trailer._prev._element
def insert_first(self, e):
if self._first < 1:
self._pointer1 = self._insert_btn(e, self._header, self._pointer2)
else:
self._pointer1 = self._insert_btn(e, self._pointer1, self._pointer2)
self._count += 1
self._first += 1
def insert_last(self, e):
if self._last < 1:
self._pointer2 = self._insert_btn(e, self._trailer._prev, self._trailer)
else:
self._insert_btn(e, self._trailer._prev, self._trailer)
self._count += 1
self._last += 1
def delete_first(self):
if self.is_empty():
raise Empty('Queue is Empty')
self._delete_node(self._header._next)
self._count -= 1
def delete_last(self):
if self.is_empty():
raise Empty('Queue is Empty')
self._delete_node(self._trailer._prev)
self._count -= 1
def __str__(self):
app = []
val = self._header._next
while val._next is not None:
app.append(val._element)
val = val._next
return app