利用两个栈实现队列的入队出队以及判断队列是否为空

image

bool enQueue(SeqStack_t *S1, SeqStack_t *S2, int x)
{
    DataType_t temp = x;
    // 判断S1是否满
    if (SeqStack_IsFull(S1))
    {
        // 判断S2是空
        if (SeqStack_IsEmpty(S2))![image](uploading...)
        {
            while (!SeqStack_IsEmpty(S1))
            {
                temp = SeqStack_Pop(S1);
                SeqStack_Push(S2, temp);
            }
            // S1中元素均进入S2中,可向S1压入X
            SeqStack_Push(S1, temp);

            return true;
        }
        else
        {
            return false;
        }
    }
    else // 未满
    {
        // S1未满可向S1压入X
        SeqStack_Push(S1, temp);
    }
}

bool isQueueEmpty(SeqStack_t *S1, SeqStack_t *S2)
{
    return (SeqStack_IsEmpty(S1) && SeqStack_IsEmpty(S2));
}

int deQueue(SeqStack_t *S1, SeqStack_t *S2, int x)
{
    DataType_t temp = x;
    // 判断队列是否空
    if (isQueueEmpty(S1, S2))
    {
        printf("队列为空\n");
        return NULL;
    }
    else
    {
        // S2非空
        if (!SeqStack_IsEmpty(S2))
        {
            temp = SeqStack_Pop(S2);
            return temp;
        }
        else // S2空
        {
            // 若S1非空
            if (!SeqStack_IsEmpty(S1))
            {
                while (!SeqStack_IsEmpty(S1))
                {
                    temp = SeqStack_Pop(S1);
                    SeqStack_Push(S2, temp);
                }
                // 向外输出temp
                temp = SeqStack_Pop(S2);

                return temp;
            }
            else // S1空
            {
                printf("队列为空\n");
                return NULL;
            }
        }
    }
}
posted @ 2024-04-26 20:32  藍桉未遇釋槐鳥  阅读(32)  评论(0)    收藏  举报