队列的两种实现方式一种是数组一种是栈,此处介绍如何将用两个栈来实现一个队列
我们知道栈的特点是FILO(先进后出),而队列的特点是FIFO(先进先出),所以用栈实现队列必须使用两个栈,一个用于执行push和pop操作,另一个用于存放前一个临时出栈的变量。
下面是C#代码(完全原创,如有雷同,不胜荣幸)
using System.Collections.Generic;
namespace PToffer05
{
class Solution
{
Stack<int> s1 = new Stack<int>();
Stack<int> s2 = new Stack<int>();
int l1 = 0;
int l2 = 0;
public void push(int node)
{
//注意这里,必须用ll2代替l2,因为l2在循环中会变化
int ll2 = l2;
for(int i=0;i<ll2; i++)
{
s1.Push(s2.Pop());
l1++;
l2--;
}
//这里只变s1,所以只有l1++
s1.Push(node);
l1++;
}
public int pop()
{
//注意这里,必须用ll1代替l1,因为l1在循环中会变化
int ll1 = l1;
//每次s1要出栈之前检查有没有元素,如果s1为空,s2不为空,则先把s2最上面的压到s1里面,后面出栈出这个
//注意,l1和l2要跟随变化
if (ll1 == 0 && l2 != 0)
{
s1.Push(s2.Pop());
l2--;
l1++;
}
for(int i =0;i<ll1-1;i++)
{
s2.Push(s1.Pop());
l2++;
l1--;
}
//这里只变s1,所以只有l1--
int shuchu = s1.Pop();
l1--;
return shuchu;
}
}
}