兩個棧實現(xiàn)隊列
查看文章:http://www.cnblogs.com/kaituorensheng/archive/2013/03/02/2939690.html
有三種思路:
-
s1是入棧的,s2是出棧的钝尸。
- 入隊列時:如果s1為空狠半,把s2中所有的元素倒出壓到s1中幅骄;否則直接壓入s1
- 出隊列時:如果s2不為空遣蚀,把s2中的棧頂元素直接彈出色乾;否則辕坝,把s1的所有元素全部彈出壓入s2中窍奋,再彈出s2的棧頂元素
-
s1是入棧的,s2是出棧的。保證所有元素都在一個棧里面
- 入隊列時:如果s1為空琳袄,把s2中所有的元素倒出壓到s1中江场;否則直接壓入s1
- 出隊列時:如果s2不為空,把s2中的棧頂元素直接彈出窖逗;否則址否,把s1的所有元素全部彈出壓入s2中,再彈出s2的棧頂元素
-
s1是入棧的碎紊,s2是出棧的
- 入隊列:直接壓入s1即可
- 出隊列:如果s2不為空佑附,把s2中的棧頂元素直接彈出;否則仗考,把s1的所有元素全部彈出壓入s2中音同,再彈出s2的棧頂元素
最優(yōu)解是第三種方式
public class sQueue<T> {
Stack<T> s1 = new Stack<T>();
Stack<T> s2 = new Stack<T>();
public void appendTrail(T append) {
s1.push(append);
}
public T deleteHead(Stack<T> s) {
if (s2 == null) {
while (s1.size() > 0) {
s2.push(s1.pop());
}
}
return s2.pop();
}
}