|  | 
| 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