Geeksforgeeks Org
Geeksforgeeks Org
Geeksforgeeks Org
A queue can be implemented using two stacks. Let queue to be implemented be q and stacks used to implement q be stack1 and
stack2. q can be implemented in two ways:
Method 1 (By making enQueue operation costly) This method makes sure that oldest entered element is always at the top of
stack 1, so that deQueue operation just pops from stack1. To put the element at top of stack1, stack2 is used.
enQueue(q, x)
1) While stack1 is not empty, push everything from satck1 to stack2.
2) Push x to stack1 (assuming size of stacks is unlimited).
3) Push everything back to stack1.
dnQueue(q)
1) If stack1 is empty then error
2) Pop an item from stack1 and return it
Method 2 (By making deQueue operation costly)In this method, in en-queue operation, the new element is entered at the top of
stack1. In de-queue operation, if stack2 is empty then all the elements are moved to stack2 and finally top of stack2 is returned.
enQueue(q, x)
1) Push x to stack1 (assuming size of stacks is unlimited).
deQueue(q)
1) If both stacks are empty then error.
2) If stack2 is empty
While stack1 is not empty, push everything from stack1 to stack2.
3) Pop the element from stack2 and return it.
}
}
x = pop(&q->stack2);
return x;
}
}
else
{
top = *top_ref;
res = top->data;
*top_ref = top->next;
free(top);
return res;
}
}
/* Dequeue items */
printf("%d ", deQueue(q));
printf("%d ", deQueue(q));
printf("%d ", deQueue(q));
getchar();
}
Run on IDE
Java
Output:
123
Queue can also be implemented using one user stack and one Function Call Stack. Below is modified Method 2 where
recursion (or Function Call Stack) is used to implement queue using only one user defined stack.
enQueue(x)
1) Push x to stack1.
deQueue:
1) If stack1 is empty then error.
2) If stack1 has only one element then return it.
3) Recursively pop everything from the stack1, store the popped item
in a variable res, push the res back to stack1 and return res
The step 3 makes sure that the last popped item is always returned and since the recursion stops when there is only one item in
stack1 (step 2), we get the last element of stack1 in dequeue() and all other items are pushed back in step
}
else if(q->stack1->next == NULL)
{
return pop(&q->stack1);
}
else
{
/* pop an item from the stack1 */
x = pop(&q->stack1);
}
}
if(new_node == NULL)
{
printf("Stack overflow \n");
getchar();
exit(0);
}
else
{
top = *top_ref;
res = top->data;
*top_ref = top->next;
free(top);
return res;
}
}
enQueue(q, 1);
enQueue(q, 2);
enQueue(q, 3);
/* Dequeue items */
printf("%d ", deQueue(q));
printf("%d ", deQueue(q));
printf("%d ", deQueue(q));
getchar();
}
Run on IDE
Java
Output:
123
Asked in: Inmobi, Accolite, Adobe, Amazon, DE Shaw, Flipkart, Goldman Sachs, InfoEdge, MakeMyTrip, Microsoft,
Oracle
Please write comments if you find any of the above codes/algorithms incorrect, or find better ways to solve the same problem.
Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.
Recommended Posts:
(Login to Rate)
Load Comments
Trending Content
Python List , Set , Tuple & Dictionary
Number Theory
School Programming
Popular Categories
Interview Experiences
Dynamic Programming
Greedy Algorithms
Backtracking
Pattern Searching
Geometric Algorithms
Searching
Sorting
Analysis of Algorithms
Mathematical Algorithms
Randomized Algorithms
Recursion
Game Theory
Statistical Algorithms
Advertise Here
Tags
Advanced Data Structure Amazon Aptitude Aptitude Arrays Bit Magic C C C++ C++ Quiz CPP-Library C Quiz Data Structures
Dynamic Programming Experienced GBlog Geometric Graph Hash Internship Interview Experiences Java JavaScript
Linked Lists Mathematical Matrix Microsoft number-digits PHP Program Output Project Puzzles Python QA - Placement Quizzes
QA - Placement Quizzes School Programming Searching series Sorting STL Strings Technical ScripterTrees UGC-NET Web
Technologies
Advertise Here
Recent Comments
COMPANY
About Us
Careers
Privacy Policy
Contact Us
LEARN
Algorithms
Data Structures
Languages
CS Subjects
Video Tutorials
PRACTICE
Company-wise
Topic-wise
Contests
Subjective Questions
CONTRIBUTE
Write an Article
GBlog
Videos