用两个栈可以实现队列。
可以让栈A当做出口,栈B当做入口。每当入栈的时候全都入到B中,而出栈的时候判断栈A中是否为空,不为空就出A,为空就把B中栈全入到A中,然后再从A中出。
即
代码如下:稍微加了点异常处理 不过结果不影响。
class StackQuene
{
private Stack<int> stackA = new Stack<int>(); //队列的出口
private Stack<int> stackB = new Stack<int>(); //队列的入口
//进队列
public void EnqueneByStack(int num) {
stackB.Push(num);
}
//出队列
public int DequeneByStack() {
try
{
if (stackA.Count == 0 && stackB.Count == 0)
{
return stackA.Pop();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return -1;
}
if (stackA.Count > 0)
{
return stackA.Pop();
}
else
{
ChangeBA();
}
return stackA.Pop();
}
//将栈B中数据入栈A
public void ChangeBA() {
while (stackB.Count > 0) {
stackA.Push(stackB.Pop());
}
}
static void Main(string[] args)
{
StackQuene sq = new StackQuene();
sq.EnqueneByStack(1);
sq.EnqueneByStack(2);
sq.EnqueneByStack(3);
Console.WriteLine(sq.DequeneByStack());
sq.EnqueneByStack(4);
Console.WriteLine(sq.DequeneByStack());
Console.WriteLine(sq.DequeneByStack());
Console.WriteLine(sq.DequeneByStack());
sq.EnqueneByStack(5);
Console.WriteLine(sq.DequeneByStack());
Console.WriteLine(sq.DequeneByStack());
//Console.WriteLine(sq.DequeneByStack());
}
}