0% found this document useful (0 votes)
18 views

Queue

The document discusses various queue data structures and algorithms related to queues. It covers implementing a linear queue using an array, implementing a circular queue, reversing a queue, finding the first negative number in a sliding window of size k, reversing the first k elements of a queue, finding the first non-repeating character in a stream, and solving the circular tour problem.

Uploaded by

tanu06321
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views

Queue

The document discusses various queue data structures and algorithms related to queues. It covers implementing a linear queue using an array, implementing a circular queue, reversing a queue, finding the first negative number in a sliding window of size k, reversing the first k elements of a queue, finding the first non-repeating character in a stream, and solving the circular tour problem.

Uploaded by

tanu06321
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

__________________________________________________________________________________I

mplementation

____________________________________________________linear queue

https://www.codingninjas.com/codestudio/problems/queue-using-array-or-singly-
linked-list_2099908?
leftPanelTab=0&campaign=LoveBabbar_Codestudio&utm_source=youtube&utm_medium=affilia
te&utm_campaign=LoveBabbar_Codestudio

#include <bits/stdc++.h>
class Queue {
int* arr;
int qfront;
int rear;
int size;
public:
Queue() {
// Implement the Constructor
size = 100001;
arr = new int[size];
qfront = 0;
rear = 0;
}

/*----------------- Public Functions of Queue -----------------*/

bool isEmpty() {
if(rear == qfront){
return true;
}
else{
return false;
}
}

void enqueue(int data) {


// Implement the enqueue() function
if(rear == size){
return;
}
else{
arr[rear] = data;
rear++;
}
}

int dequeue() {
if(qfront == rear){
return -1;
}
else{
int ans = arr[qfront];
arr[qfront] = -1;
qfront++;
if(qfront == rear){
qfront = 0;
rear = 0;
}
return ans;
}
}

int front() {
if(rear == qfront){
return -1;
}
else{
return arr[qfront];
}
}
};

________________________________________________________circular queue

https://www.codingninjas.com/codestudio/problems/circular-queue_1170058?
leftPanelTab=1&campaign=LoveBabbar_Codestudio&utm_source=youtube&utm_medium=affilia
te&utm_campaign=LoveBabbar_Codestudio

#include <bits/stdc++.h>
class CircularQueue{
public:
// Initialize your data structure.
int* arr;
int front;
int rear;
int size;
CircularQueue(int n){
// Write your code here.
size = n;
arr = new int[size];
front = rear =-1;
}

// Enqueues 'X' into the queue. Returns true if it gets pushed into the stack,
and false otherwise.
bool enqueue(int value) {
// to check whether queue is full.
if (front == 0 && rear == size - 1){
return false;
}
// to check whether queue is full.
else if(rear == (front-1)%(size-1)){
return false;
}
else if(front == -1){ // first element to push
front = rear = 0;
arr[rear] = value;
}
else if(rear == size-1 && front!=0){ //to maintain cyclic nature
rear = 0;
arr[rear] = value;
}
else{

rear++;
arr[rear] = value;
}
return true;

// Dequeues top element from queue. Returns -1 if the stack is empty, otherwise
returns the popped element.
int dequeue(){
if(front == -1 && rear == -1){ // to check queue is enpty
return -1;
}
else if(front==rear){ // single element is present
int ans = arr[front];
front = rear =-1;
return ans;

}
else if(front == size-1){ // to maintain cyclic nature
int ans = arr[front];
front = 0;
return ans;
}
else{
int ans = arr[front];
front++;
return ans;
}

}
};

_____________________________________________________________________________Q.53)
Queqe Reversal

https://practice.geeksforgeeks.org/problems/queue-reversal/1

void reverse(queue<int> &q){


// base case
if(q.empty()){
return;
}

int a = q.front();
q.pop();

reverse(q);

q.push(a);

return;
}

queue<int> rev(queue<int> q)
{
reverse(q);
return q;
}

_____________________________________________________________________________Q.54)
First negative integer in every window of size k

https://practice.geeksforgeeks.org/problems/first-negative-integer-in-every-window-
of-size-k3345/1

vector<long long> printFirstNegativeInteger(long long int A[],


long long int N, long long int K) {

deque< long long> dq;

vector<long long> ans;

//for first k element


for(int i=0; i<K; i++){
if(A[i]<0){
dq.push_back(i);
}
}

//store ans for first k window


if(dq.size()>0){
ans.push_back(A[dq.front()]);
}
else{
ans.push_back(0);
}

//process for remaining window


for(int i=K; i<N; i++){
//removal
if(!dq.empty() && i-dq.front()>=K){
dq.pop_front();
}
//addition
if(A[i]<0){
dq.push_back(i);
}

//ans store
if(dq.size()>0){
ans.push_back(A[dq.front()]);
}
else{
ans.push_back(0);
}
}
return ans;

___________________________________________________________________________________
_Q.55) Reverse First K elements of Queue

https://practice.geeksforgeeks.org/problems/reverse-first-k-elements-of-queue/1

queue<int> modifyQueue(queue<int> q, int k) {


// step 1
int n = q.size();
stack<int> s;
for(int i=0; i<k; i++){
int a = q.front();
s.push(a);
q.pop();
}

while(!s.empty()){
int a = s.top();
q.push(a);
s.pop();
}

for(int i=0; i<n-k; i++){


int a = q.front();
q.pop();
q.push(a);
}
return q;
}
___________________________________________________________________________Q.56)
First non-repeating character in a stream

https://practice.geeksforgeeks.org/problems/first-non-repeating-character-in-a-
stream1216/1

string FirstNonRepeating(string A){


unordered_map<char,int> count;
queue<char> q;
string ans;

for(int i=0; i<A.size(); i++){


//increase count
count[A[i]]++;

//queue me push
q.push(A[i]);

while(!q.empty()){
if(count[q.front()]>1){
//repeating character
q.pop();
}
else{
//non repeating character mil gya
ans.push_back(q.front());
break;
}
}
if(q.empty()){
ans.push_back('#');
}
}
return ans;
}

______________________________________________________________________________Q.57)
Circular tour
https://practice.geeksforgeeks.org/problems/circular-tour-1587115620/1

int tour(petrolPump p[],int n)


{
int balance = 0;
int deficit = 0;
int start = 0;

for(int i=0; i<n; i++){


balance += p[i].petrol - p[i].distance;
if(balance<0){
deficit += balance;
start = i+1;
balance = 0;
}
}
if(deficit + balance >=0){
return start;
}
else{
return -1;
}
}

You might also like