File tree Expand file tree Collapse 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 Expand file tree Collapse file tree 1 file changed +102
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments