fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. template <typename Type>
  5. class Node{
  6. public:
  7. Type data;
  8. Node<Type>* next;
  9.  
  10. // Constructor
  11. Node(const Type& value){
  12. this->data = value;
  13. this->next = nullptr;
  14. }
  15. };
  16.  
  17. template <typename Type>
  18. class Queue{
  19. private:
  20. Node<Type>* front;
  21. Node<Type>* rear;
  22. int maxSize, length;
  23.  
  24. public:
  25. Queue(){
  26. front = nullptr;
  27. rear = nullptr;
  28. length = 0;
  29. maxSize = 10000;
  30. }
  31.  
  32. /// check if queue is full
  33. bool isFull(){
  34. if(length == maxSize)
  35. return true;
  36. else
  37. return false;
  38. }
  39.  
  40. /// check if queue is empty
  41. bool isEmpty(){
  42. if(length == 0)
  43. return true;
  44. else
  45. return false;
  46. }
  47.  
  48. /// get front element
  49. Type getFront(){
  50. if(isEmpty()){
  51. throw runtime_error("Queue is empty");
  52. }
  53. return front->data;
  54. }
  55.  
  56. /// get rear element
  57. Type getRear(){
  58. if(isEmpty()){
  59. throw runtime_error("Queue is empty");
  60. }
  61. return rear->data;
  62. }
  63.  
  64. /// get length
  65. int getLength(){
  66. return length;
  67. }
  68.  
  69. /// insert (enqueue)
  70. void enqueue(Type key){
  71. if(isFull()){
  72. throw runtime_error("Queue overflow!!!");
  73. }
  74.  
  75. Node<Type>* newNode = new Node<Type>(key);
  76.  
  77. if(isEmpty()){
  78. front = rear = newNode;
  79. }
  80. else{
  81. rear->next = newNode;
  82. rear = newNode;
  83. }
  84.  
  85. length++;
  86. }
  87.  
  88. /// delete (dequeue)
  89. void dequeue(){
  90. if(isEmpty()){
  91. throw runtime_error("Queue underflow!!!");
  92. }
  93.  
  94. Node<Type>* temp = front;
  95. front = front->next;
  96. delete temp;
  97. length--;
  98.  
  99. if(front == nullptr){ // if queue becomes empty
  100. rear = nullptr;
  101. }
  102. }
  103.  
  104. /// destructor
  105. ~Queue(){
  106. while(!isEmpty()){
  107. dequeue();
  108. }
  109. }
  110. };
  111.  
  112. int main()
  113. {
  114. Queue<char> q1;
  115.  
  116. q1.enqueue('a');
  117. q1.enqueue('b');
  118. q1.enqueue('c');
  119.  
  120. cout << "Length: " << q1.getLength()
  121. << " Front: " << q1.getFront()
  122. << " Rear: " << q1.getRear() << endl;
  123.  
  124. q1.dequeue();
  125.  
  126. cout << "After Dequeue -> Front: " << q1.getFront() << endl;
  127.  
  128. return 0;
  129. }
Success #stdin #stdout 0.01s 5320KB
stdin
Standard input is empty
stdout
Length: 3 Front: a Rear: c
After Dequeue -> Front: b