| 
2 | 2 | 
 
  | 
3 | 3 | class CircularQueue(object):  | 
4 | 4 |     def __init__(self, limit = 10):  | 
5 |  | -        self.front = None  | 
6 |  | -        self.rear = None  | 
7 | 5 |         self.limit = limit  | 
8 |  | -        self.queue = []  | 
 | 6 | +        self.queue = [None for i in range(limit)]    | 
 | 7 | +        self.front = self.rear = -1  | 
9 | 8 | 
 
  | 
10 | 9 |     # for printing the queue  | 
11 | 10 |     def __str__(self):  | 
12 |  | -        return ' '.join([str(i) for i in self.queue])  | 
 | 11 | +        if (self.rear >= self.front):  | 
 | 12 | +            return ' '.join([str(self.queue[i]) for i in range(self.front, self.rear + 1)])  | 
 | 13 | +    | 
 | 14 | +        else:   | 
 | 15 | +            q1 = ' '.join([str(self.queue[i]) for i in range(self.front, self.limit)])  | 
 | 16 | +            q2 = ' '.join([str(self.queue[i]) for i in range(0, self.rear + 1)])  | 
 | 17 | +            return q1 + ' ' + q2  | 
13 | 18 | 
 
  | 
14 | 19 |     # for checking if queue is empty  | 
15 | 20 |     def isEmpty(self):  | 
16 |  | -        return self.queue == []  | 
 | 21 | +        return self.front == -1  | 
17 | 22 | 
 
  | 
18 | 23 |     # for checking if the queue is full  | 
19 | 24 |     def isFull(self):  | 
20 |  | -        return len(self.queue) == self.limit  | 
 | 25 | +        return (self.rear + 1) % self.limit == self.front  | 
21 | 26 | 
 
  | 
22 |  | -    # for adding an element at the rear end  | 
 | 27 | +    # for adding an element to the queue  | 
23 | 28 |     def enqueue(self, data):  | 
24 | 29 |         if self.isFull():  | 
25 | 30 |             print('Queue is Full!')  | 
26 | 31 |         elif self.isEmpty():  | 
27 |  | -            self.front = self.rear = 0  | 
28 |  | -            self.queue.append(data)  | 
 | 32 | +            self.front = 0  | 
 | 33 | +            self.rear = 0  | 
 | 34 | +            self.queue[self.rear] = data  | 
29 | 35 |         else:  | 
30 |  | -            self.rear += 1  | 
31 |  | -            self.queue.append(data)  | 
 | 36 | +            self.rear = (self.rear + 1) % self.limit    | 
 | 37 | +            self.queue[self.rear] = data   | 
32 | 38 | 
 
  | 
33 |  | -    # for deleting the deleting an element from front end  | 
 | 39 | +    # for removing an element from the queue  | 
34 | 40 |     def dequeue(self):  | 
35 | 41 |         if self.isEmpty():  | 
36 | 42 |             print('Queue is Empty!')  | 
 | 43 | +        elif (self.front == self.rear):    | 
 | 44 | +            self.front = -1  | 
 | 45 | +            self.rear = -1  | 
37 | 46 |         else:  | 
38 |  | -            self.front += 1  | 
39 |  | -            return self.queue.pop(0)  | 
 | 47 | +            self.front = (self.front + 1) % self.limit   | 
40 | 48 | 
 
  | 
41 | 49 | if __name__ == '__main__':  | 
42 | 50 |     myCQ = CircularQueue(5)  | 
 | 
0 commit comments