• Source
    1. // C++ implementation of De-queue using circular
    2. // array
    3. #include<iostream>
    4. using namespace std;
    5.  
    6. // Maximum size of array or Dequeue
    7. #define MAX 100
    8.  
    9. // A structure to represent a Deque
    10. class Deque
    11. {
    12. int arr[MAX];
    13. int front;
    14. int rear;
    15. int size;
    16. public :
    17. Deque(int size)
    18. {
    19. front = -1;
    20. rear = 0;
    21. this->size = size;
    22. }
    23.  
    24. // Operations on Deque:
    25. void insertfront(int key);
    26. void insertrear(int key);
    27. void deletefront();
    28. void deleterear();
    29. bool isFull();
    30. bool isEmpty();
    31. int getFront();
    32. int getRear();
    33. };
    34.  
    35. // Checks whether Deque is full or not.
    36. bool Deque::isFull()
    37. {
    38. return ((front == 0 && rear == size-1)||
    39. front == rear+1);
    40. }
    41.  
    42. // Checks whether Deque is empty or not.
    43. bool Deque::isEmpty ()
    44. {
    45. return (front == -1);
    46. }
    47.  
    48. // Inserts an element at front
    49. void Deque::insertfront(int key)
    50. {
    51. // check whether Deque if full or not
    52. if (isFull())
    53. {
    54. cout << "Overflow\n" << endl;
    55. return;
    56. }
    57.  
    58. // If queue is initially empty
    59. if (front == -1)
    60. {
    61. front = 0;
    62. rear = 0;
    63. }
    64.  
    65. // front is at first position of queue
    66. else if (front == 0)
    67. front = size - 1 ;
    68.  
    69. else // decrement front end by '1'
    70. front = front-1;
    71.  
    72. // insert current element into Deque
    73. arr[front] = key ;
    74. }
    75.  
    76. // function to inset element at rear end
    77. // of Deque.
    78. void Deque ::insertrear(int key)
    79. {
    80. if (isFull())
    81. {
    82. cout << " Overflow\n " << endl;
    83. return;
    84. }
    85.  
    86. // If queue is initially empty
    87. if (front == -1)
    88. {
    89. front = 0;
    90. rear = 0;
    91. }
    92.  
    93. // rear is at last position of queue
    94. else if (rear == size-1)
    95. rear = 0;
    96.  
    97. // increment rear end by '1'
    98. else
    99. rear = rear+1;
    100.  
    101. // insert current element into Deque
    102. arr[rear] = key ;
    103. }
    104.  
    105. // Deletes element at front end of Deque
    106. void Deque ::deletefront()
    107. {
    108. // check whether Deque is empty or not
    109. if (isEmpty())
    110. {
    111. cout << "Queue Underflow\n" << endl;
    112. return ;
    113. }
    114.  
    115. // Deque has only one element
    116. if (front == rear)
    117. {
    118. front = -1;
    119. rear = -1;
    120. }
    121. else
    122. // back to initial position
    123. if (front == size -1)
    124. front = 0;
    125.  
    126. else // increment front by '1' to remove current
    127. // front value from Deque
    128. front = front+1;
    129. }
    130.  
    131. // Delete element at rear end of Deque
    132. void Deque::deleterear()
    133. {
    134. if (isEmpty())
    135. {
    136. cout << " Underflow\n" << endl ;
    137. return ;
    138. }
    139.  
    140. // Deque has only one element
    141. if (front == rear)
    142. {
    143. front = -1;
    144. rear = -1;
    145. }
    146. else if (rear == 0)
    147. rear = size-1;
    148. else
    149. rear = rear-1;
    150. }
    151.  
    152. // Returns front element of Deque
    153. int Deque::getFront()
    154. {
    155. // check whether Deque is empty or not
    156. if (isEmpty())
    157. {
    158. cout << " Underflow\n" << endl;
    159. return -1 ;
    160. }
    161. return arr[front];
    162. }
    163.  
    164. // function return rear element of Deque
    165. int Deque::getRear()
    166. {
    167. // check whether Deque is empty or not
    168. if(isEmpty() || rear < 0)
    169. {
    170. cout << " Underflow\n" << endl;
    171. return -1 ;
    172. }
    173. return arr[rear];
    174. }
    175.  
    176. // Driver program to test above function
    177. int main()
    178. {
    179. Deque dq(5);
    180. cout << "Insert element at rear end : 5 \n";
    181. dq.insertrear(5);
    182.  
    183. cout << "insert element at rear end : 10 \n";
    184. dq.insertrear(10);
    185.  
    186. cout << "get rear element " << " "
    187. << dq.getRear() << endl;
    188.  
    189. dq.deleterear();
    190. cout << "After delete rear element new rear"
    191. << " become " << dq.getRear() << endl;
    192.  
    193. cout << "inserting element at front end \n";
    194. dq.insertfront(15);
    195.  
    196. cout << "get front element " << " "
    197. << dq.getFront() << endl;
    198.  
    199. dq.deletefront();
    200.  
    201. cout << "After delete front element new "
    202. << "front become " << dq.getFront() << endl;
    203. return 0;
    204. }