使用两个栈实现一个队列

本题的思路是两个栈,在这里将栈分为1和2。
在第一次进栈时,将数据直接压入1号栈内,以后进站时,每次都需将1号栈的数据依次出栈并压入2号栈内,然后将要存的数据压入1号栈内,在将2号栈的数据依次出栈并压入1号栈内,这样正常出栈的顺序就是队列的顺序。
这里写图片描述

实现代码如下:

//两个栈实现一个队列
void Queue(Stack *pS1, Stack *pS2, DataType data)
{
    if (pS1 == NULL || pS2 == NULL)
    {
        return;
    }
    if (pS1->Top == 0)
    {
        StackPush(pS1, data);
        return;
    }
    while (pS1->Top != 0)
    {
        StackPush(pS2, pS1->arr[pS1->Top - 1]);
        StackPop(pS1);
    }
    StackPush(pS1, data);
    while (pS2->Top != 0)
    {
        StackPush(pS1, pS2->arr[pS2->Top - 1]);
        StackPop(pS2);
    }
}
阅读更多

没有更多推荐了,返回首页