Skip to content

Commit 8019d8b

Browse files
authored
Create main.cpp
1 parent 49d6fe9 commit 8019d8b

File tree

1 file changed

+102
-0
lines changed
  • 16 - Queue Data Structure Problems/01 - Linear Queue Problems/11 - Implement k Queues in an Single Array

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#include <iostream>
2+
using namespace std;
3+
4+
class kQueue{
5+
public:
6+
int *arr;
7+
int k;
8+
int n;
9+
int *front;
10+
int *rear;
11+
int freeSpot;
12+
int *next;
13+
14+
kQueue(int n, int k){
15+
this -> n = n;
16+
this -> k = k;
17+
arr = new int[n];
18+
front = new int[k];
19+
rear = new int[k];
20+
next = new int[n];
21+
freeSpot = 0;
22+
23+
for(int i = 0; i < k; i++){
24+
front[i] = -1;
25+
rear [i] = -1;
26+
}
27+
28+
for(int i = 0; i < n-1; i++){
29+
next[i] = i + 1;
30+
}
31+
next[n-1] = -1;
32+
}
33+
34+
void enQueue(int data, int qn){
35+
// overflow
36+
if(freeSpot == -1){
37+
cout << "No empty space is available" << endl;
38+
return;
39+
}
40+
41+
// find first free index;
42+
int index = freeSpot;
43+
44+
// update freeSpot;
45+
freeSpot = next[index];
46+
47+
// check wheather first element
48+
if(front[qn-1] == -1){
49+
front[qn-1] = index;
50+
}else{
51+
// link new element to the prev element
52+
next[rear[qn-1]] = index;
53+
}
54+
55+
// update next;
56+
next[index] = -1;
57+
58+
// update rear;
59+
rear[qn-1] = index;
60+
61+
// push element;
62+
arr[index] = data;
63+
64+
}
65+
66+
int deQueue(int qn){
67+
// underflow
68+
if(front[qn-1] == -1){
69+
cout << "Queue underflow" <<endl;
70+
return -1;
71+
}
72+
73+
// find index to pop
74+
int index = front[qn-1];
75+
76+
// update front pointer
77+
front[qn-1] = next[index];
78+
79+
// next freeSpot
80+
next[index] = freeSpot;
81+
freeSpot = index;
82+
83+
return arr[index];
84+
}
85+
};
86+
87+
int main() {
88+
kQueue q(10, 3);
89+
90+
q.enQueue(10, 1);
91+
q.enQueue(15, 1);
92+
q.enQueue(20, 2);
93+
q.enQueue(25, 1);
94+
q.enQueue(30, 2);
95+
q.enQueue(35, 3);
96+
97+
cout << "Element poped from q1 : " << q.deQueue(1) <<endl;
98+
cout << "Element poped from q1 : " << q.deQueue(1) <<endl;
99+
cout << "Element poped from q2 : " << q.deQueue(2) <<endl;
100+
cout << "Element poped from q3 : " << q.deQueue(3) <<endl;
101+
return 0;
102+
}

0 commit comments

Comments
 (0)