2
2
3
3
class CircularQ ():
4
4
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
9
11
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
20
18
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
33
26
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' )
47
39
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