“棧和隊列”的互相實現
1.兩隊列實現棧
思想: 總是留下某個隊列中剩餘一個值,爲刪除的值
如下圖:
核心代碼:
//總是留下某個隊列中剩餘一個值,爲刪除的值
public static void enterStack(TwoQueueToOneStack qu1, TwoQueueToOneStack qu2, int val) {
if (!qu1.isEmpty()) {
qu1.push(val);
}else {
qu2.push(val);
}
}
public static int popStack(TwoQueueToOneStack qu1, TwoQueueToOneStack qu2) {
int temp;
if (!qu1.isEmpty()) {
while (qu1.userSize > 1) {
qu2.push(qu1.pop());
}
temp = qu1.pop();
}else {
while (qu2.userSize > 1) {
qu1.push(qu2.pop());
}
temp = qu2.pop();
}
return temp;
}
2.兩棧實現隊列
思想: 下圖裏面有
如下圖:
核心代碼:
//qu2用來push放值,qu1存放倒入qu2的(userSize -1 個值,qu2剩餘一個除掉,結束後qu1再倒回qu2)
public static void pushQueue(TwoStackToOneQueue s1, TwoStackToOneQueue s2, int val) {
if (!s1.isEmpty()) {
s1.push(val);
}else {
s2.push(val);
}
}
public static int popQueue(TwoStackToOneQueue s1, TwoStackToOneQueue s2) {
int temp;
if (!s1.isEmpty()) {
while (s1.userSize > 1) {
s2.push(s1.pop());
}
temp = s1.pop();
while (s2.userSize > 0) {
s2.push(s2.pop());
}
}else {
while (s2.userSize > 1) {
s1.push(s2.pop());
}
temp = s2.pop();
while (s1.userSize > 0) {//qu1再倒回qu2
s2.push(s1.pop());
}
}
return temp;
}
Github代碼鏈接:
https://github.com/QzzBL/Qzz_Java/tree/master/Java基礎數據結構/棧和隊列的互相實現
2018.12.09/周天
by 922