forked from tanmayhinge-zz/competitive-programming-workshop
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathQueue_wto_STL.cpp
134 lines (109 loc) · 2.71 KB
/
Queue_wto_STL.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <iostream>
#include <cstdlib>
using namespace std;
// Define the default capacity of a queue
#define SIZE 1000
// A class to store a queue
class Queue
{
int *arr; // array to store queue elements
int capacity; // maximum capacity of the queue
int front; // front points to the front element in the queue (if any)
int rear; // rear points to the last element in the queue
int count; // current size of the queue
public:
Queue(int size = SIZE); // constructor
~Queue(); // destructor
int dequeue();
void enqueue(int x);
int peek();
int size();
bool isEmpty();
bool isFull();
};
// Constructor to initialize a queue
Queue::Queue(int size)
{
arr = new int[size];
capacity = size;
front = 0;
rear = -1;
count = 0;
}
// Destructor to free memory allocated to the queue
Queue::~Queue() {
delete[] arr;
}
// Utility function to dequeue the front element
int Queue::dequeue()
{
// check for queue underflow
if (isEmpty())
{
cout << "Underflow\nProgram Terminated\n";
exit(EXIT_FAILURE);
}
int x = arr[front];
cout << "Removing " << x << endl;
front = (front + 1) % capacity;
count--;
return x;
}
// Utility function to add an item to the queue
void Queue::enqueue(int item)
{
// check for queue overflow
if (isFull())
{
cout << "Overflow\nProgram Terminated\n";
exit(EXIT_FAILURE);
}
cout << "Inserting " << item << endl;
rear = (rear + 1) % capacity;
arr[rear] = item;
count++;
}
// Utility function to return the front element of the queue
int Queue::peek()
{
if (isEmpty())
{
cout << "Underflow\nProgram Terminated\n";
exit(EXIT_FAILURE);
}
return arr[front];
}
// Utility function to return the size of the queue
int Queue::size() {
return count;
}
// Utility function to check if the queue is empty or not
bool Queue::isEmpty() {
return (size() == 0);
}
// Utility function to check if the queue is full or not
bool Queue::isFull() {
return (size() == capacity);
}
int main()
{
// create a queue of capacity 5
Queue q(5);
q.enqueue(1);
q.enqueue(2);
q.enqueue(3);
cout << "The front element is " << q.peek() << endl;
q.dequeue();
q.enqueue(4);
cout << "The queue size is " << q.size() << endl;
q.dequeue();
q.dequeue();
q.dequeue();
if (q.isEmpty()) {
cout << "The queue is empty\n";
}
else {
cout << "The queue is not empty\n";
}
return 0;
}