用兩個(gè)棧來實(shí)現(xiàn)一個(gè)隊(duì)列奕短,完成隊(duì)列的Push和Pop操作缚陷。 隊(duì)列中的元素為int類型。
語言java
用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的功能?要求給出算法和思路!
<分析>:
入隊(duì):將元素進(jìn)棧A
出隊(duì):判斷棧B是否為空(不為空時(shí)候的棧Bpop的順序是A里push的順序)摹蘑,如果為空舀透,則將棧A中所有元素pop,并push進(jìn)棧B密任,棧B出棧颜启;
如果不為空,棧B直接出棧浪讳。
import java.util.Stack;
public class Solution {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack1.empty()&&stack2.empty()){
throw new RuntimeException("Queue is empty!");
}
if(stack2.empty())
{
while(!stack1.empty())
{
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
擴(kuò)展:用兩個(gè)隊(duì)列實(shí)現(xiàn)一個(gè)棧的功能?要求給出算法和思路!
<分析>:
入棧:將元素進(jìn)隊(duì)列A
出棧:判斷隊(duì)列A中元素的個(gè)數(shù)是否為1缰盏,如果等于1,則出隊(duì)列驻债,否則將隊(duì)列A中的元素
以此出隊(duì)列并放入隊(duì)列B乳规,直到隊(duì)列A中的元素留下一個(gè),然后隊(duì)列A出隊(duì)列合呐,再把
隊(duì)列B中的元素出隊(duì)列以此放入隊(duì)列A中。