题目很简单了,用队列去实现栈。
实现思路是:在pop时把队列中count - 1 个元数依次 dequeue且enquene 到原队列中,这样就把第count个元素推到了第一个位置,此时dequeue就是结果。
下边上C#代码:
public class MyStack
{
Queue<int> q;
public int count { get; private set; }
/** Initialize your data structure here. */
public MyStack()
{
q = new Queue<int>();
count = 0;
}
/** Push element x onto stack. */
public void Push(int x)
{
q.Enqueue(x);
count++;
}
/** Removes the element on top of the stack and returns that element. */
public int Pop()
{
if (count == 0) return default(int);
for (int i = 0; i < count - 1; i++)
{
q.Enqueue(q.Dequeue());//把前count-1个元素依次出队并入队,从而把第count个元素推到第一个位置。
}
count--;
return q.Dequeue();
}
/** Get the top element. */
public int Top()
{
if (count == 0) return default(int);
if (q.Count == 1)
return q.Peek();
int rslt = 0;
for (int i = 0; i < count; i++)
{
if (i == count - 1) rslt = q.Peek(); //取出第count个元素
q.Enqueue(q.Dequeue());
}
return rslt;
}
/** Returns whether the stack is empty. */
public bool Empty()
{
return count == 0;
}
}
注:把代码中int 换成T 就可实现模板栈了。