1.4.28

1.4.28 #

解答 #

每次入队的时候将队列倒转,这样入队的元素就是第一个了。

代码 #

internal class QueueStack<TItem>
{
    private readonly Queue<TItem> _queue;

    /// <summary>
    /// 初始化一个栈。
    /// </summary>
    public QueueStack()
    {
        _queue = new Queue<TItem>();
    }

    /// <summary>
    /// 向栈中添加一个元素。
    /// </summary>
    /// <param name="item"></param>
    public void Push(TItem item)
    {
        _queue.Enqueue(item);
        var size = _queue.Size();
        // 倒转队列
        for (var i = 0; i < size - 1; i++)
        {
            _queue.Enqueue(_queue.Dequeue());
        }
    }

    /// <summary>
    /// 从栈中弹出一个元素。
    /// </summary>
    /// <returns></returns>
    public TItem Pop()
    {
        return _queue.Dequeue();
    }

    /// <summary>
    /// 确定栈是否为空。
    /// </summary>
    /// <returns></returns>
    public bool IsEmpty()
    {
        return _queue.IsEmpty();
    }
}