首页 > 其他分享 >利用两个栈实现队列的入队出队以及判断队列是否为空

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

时间:2024-04-26 20:47:16浏览次数:21  
标签:SeqStack return temp 队列 S2 S1 入队 出队 IsEmpty

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;
            }
        }
    }
}

标签:SeqStack,return,temp,队列,S2,S1,入队,出队,IsEmpty
From: https://www.cnblogs.com/eon4051/p/18160832

相关文章

  • 链式队列
    队列原理介绍:​ 队列(Queue)和栈类似,相同点是都属于线性结构,不同点是栈遵循“后进先出”原则,而队列遵循“*先进先出*”的原则,也被称为“FIFO”结构,就是“FirstInputFirstOutput”​ 数据结构中的队列的两端都允许操作,只不过要求数据只能从队列的一端插入,从队列的另一端删除,可......
  • 单向链式队列
    目录目录单向链式队列创建空链表创建新结点入队判断链表是否为空出队遍历代码验证单向链式队列/**@filename: main.c@brief单向链式队列@[email protected]@date2024/04/[email protected]:版本@property:属性介绍@note补充注意说明CopyRight(c)2023......
  • 以链表为基础实现链式队列
    数据结构链式队列以链表为基础实现链式队列1.思路:如果打算以链表作为基础来实现队列的操作,可以避免内存浪费以及避免内存成片移动,只需要确定队头和队尾即可,一般把链表头部作为队头,可以实现头删,把链表尾部作为队尾,可以实现尾插。2.图示:3.代码:/****************************......
  • 单链表队列
    单链表队列队列:遵循先进先出1.创建初始化队列/******************************************************************************函数名称:LinQue_Create*函数功能:创建头结点*函数参数:NONE*......
  • 数据结构—单链表队列头删尾插
    单链表队列的头删尾插/*************************************************/***@filename: 单链表队列的头删尾插.md*@brief实现对单链表队列的头删尾插*@[email protected]*@date2024/04/26*@version1.0:在下坂本,有何贵干*@property:no......
  • 循环队列
    /***********************************************************************************************************该程序实现循环队列元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以循环队列中元素*的数据类型为DataType_t,用户可以根据实际情况修改......
  • 两个栈模拟一个队列(Stacks Imitate Queue)
    /****************************************************************************@filename: :StacksSimulateQueue*@brief :两个栈实现队列的功能*@author :[email protected]*@date :2024/04/26*@version1.0 :V1.0*@property :None*@not......
  • C语言数据结构:链式队列的创建及其出入队操作
    /**********************************************************************************************************该程序实现链式队列元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以链式队列中元素*的数据类型为DataType_t,用户可以根据实际情况修改......
  • 顺序循环队列的接口设计
    /***********************************************************************************************************该程序实现循环队列元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以循环队列中元素*的数据类型为DataType_t,用户可以根据实际情况......
  • 双向循环链表队列的接口设计
    /***********************************************************************************************************该程序实现循环队列元素的增删改查,目的是提高设计程序的逻辑思维,另外为了提高可移植性,所以循环队列中元素*的数据类型为DataType_t,用户可以根据实际情况......