“栈和队列”的互相实现
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