03 利用两个栈实现队列的先进先出特性
程序员文章站
2024-03-18 08:46:10
...
文章目录
问题:用两个栈来实现一个队列,完成队列的Push和Pop操作,队列中的元素为int类型
栈的特性
先进后出
图中序列出栈顺序为C B A
队列的特性
先进先出
图中序列出栈顺序为A B C
用两个栈实现队列的原理
- 用栈stack1实现队列的进栈功能:数据直接进栈
- 用栈stack2实现队列的出栈功能:当stack2中为空时,将stack1中数据出栈,再按出栈的顺序压入stack2中,此时stack2中数据的出栈顺序就是要实现的队列的数据出栈顺序;当stack2中有数据时,直接将stack2中的数据出栈
代码实现
let stack1 = []; //模拟入栈
let stack2 = []; //模拟出栈
function push(node)
{
stack1.push(node);
}
function pop()
{
//stack2为空时执行循环内容
if(!stack2.length){
//将stack1中数据全部压入stack2
while(stack1.length){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
注意这里循环控制不要使用for循环,两个栈的长度都在发生变化,利用for循环结果会出现一些问题