Skip to content

Commit 90129c6

Browse files
committed
update cq
1 parent 81bcf56 commit 90129c6

File tree

1 file changed

+46
-51
lines changed

1 file changed

+46
-51
lines changed

Practice Concepts/Data Structures/CircularQ.py

Lines changed: 46 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,58 +2,53 @@
22

33
class CircularQ():
44

5-
def __init__(self, numElements):
6-
self.numElements = numElements
7-
self.queue = [None] * numElements
8-
self.FRONT = self.REAR = -1
5+
def __init__(self, capacity):
6+
self.queue = [None] * capacity
7+
self.capacity = capacity
8+
self.front = 0
9+
self.rear = -1
10+
self.size = 0
911

10-
def ENQUEUE(self, value):
11-
if((self.REAR) + 1 % self.numElements == self.FRONT):
12-
print('Circular Queue is full\n')
13-
elif(self.FRONT == -1):
14-
self.FRONT = 0
15-
self.REAR = 0
16-
self.queue[self.REAR] = value
17-
else:
18-
self.REAR = (self.REAR + 1) % self.numElements
19-
self.queue[self.REAR] = value
12+
def enqueue(self, value):
13+
if self.size == self.capacity:
14+
raise OverflowError('Queue is full')
15+
self.rear = (self.rear + 1) % self.capacity
16+
self.queue[self.rear] = value
17+
self.size += 1
2018

21-
def DEQUEUE(self):
22-
if(self.FRONT == -1):
23-
print('Circular Queue is empty\n')
24-
elif(self.FRONT == self.REAR):
25-
temp = self.queue[self.FRONT]
26-
self.REAR = -1
27-
self.FRONT = -1
28-
return temp
29-
else:
30-
temp = self.queue[self.FRONT]
31-
self.FRONT = (self.FRONT + 1) % self.numElements
32-
return temp
19+
def dequeue(self):
20+
if self.isEmpty():
21+
raise IndexError('Queue is empty')
22+
value = self.queue[self.front]
23+
self.front = (self.front + 1) % self.capacity
24+
self.size -= 1
25+
return value
3326

34-
def printQ(self):
35-
if(self.FRONT == -1):
36-
print('Circular Queue is empty\n')
37-
elif(self.REAR >= self.FRONT):
38-
for i in range(self.FRONT, self.REAR + 1):
39-
print(self.queue[i], end = " ")
40-
print()
41-
else:
42-
for i in range(self.FRONT, self.numElements):
43-
print(self.queue[i], end = " ")
44-
for i in range(0, self.REAR + 1):
45-
print(self.queue[i], end = " ")
46-
print()
27+
def isEmpty(self):
28+
return self.size == 0
29+
30+
def front(self):
31+
if not self.isEmpty():
32+
return self.queue[self.front]
33+
raise IndexError('Queue is empty')
34+
35+
def rear(self):
36+
if not self.isEmpty():
37+
return self.queue[self.rear]
38+
raise IndexError('Queue is empty')
4739

48-
# Driver code
49-
CircQ = CircularQ(5)
50-
CircQ.ENQUEUE(1)
51-
CircQ.ENQUEUE(2)
52-
CircQ.ENQUEUE(3)
53-
CircQ.ENQUEUE(4)
54-
CircQ.ENQUEUE(5)
55-
print("After ENQUEUE:")
56-
CircQ.printQ()
57-
CircQ.DEQUEUE()
58-
print("After DEQUEUE:")
59-
CircQ.printQ()
40+
# Test Cases
41+
queue = CircularQ(3)
42+
queue.enqueue(1)
43+
queue.enqueue(2)
44+
queue.enqueue(3)
45+
assert queue.front() == 1
46+
assert queue.rear() == 3
47+
assert queue.dequeue() == 1
48+
assert queue.front() == 2
49+
assert queue.rear() == 3
50+
assert queue.dequeue() == 2
51+
assert queue.front() == 3
52+
assert queue.rear() == 3
53+
assert queue.dequeue() == 3
54+
assert queue.isEmpty() == True

0 commit comments

Comments
 (0)