当前位置: 首页 > article >正文

栈和队列的OJ题——14.用栈实现队列

14.用栈实现队列


232. 用栈实现队列 - 力扣(LeetCode)


 


/*
解题思路:
此题可以用两个栈实现,一个栈进行入队操作,另一个栈进行出队操作
出队操作: 当出队的栈不为空是,直接进行出栈操作,如果为空,需要把入队的栈元素全部导入到出队的栈,然后再进行出栈操作
*/

 

typedef struct {
    //入队栈
    Stack pushST;
    //出队栈
    Stack popST;
} MyQueue;

/** Initialize your data structure here. */
MyQueue* myQueueCreate(int maxSize) {
    MyQueue* pqueue = (MyQueue*)malloc(sizeof(MyQueue));
    StackInit(&pqueue->pushST, maxSize);
    StackInit(&pqueue->popST, maxSize);
    return pqueue;
}

/** Push element x to the back of queue. */
void myQueuePush(MyQueue* obj, int x) {
    //入队栈进行入栈操作
    StackPush(&obj->pushST, x);
}

/** Removes the element from in front of queue and returns that element. */
int myQueuePop(MyQueue* obj) {
    //如果出队栈为空,导入入队栈的元素
    if(StackEmpty(&obj->popST) == 0)
    {
        while(StackEmpty(&obj->pushST) != 0)
        {
            StackPush(&obj->popST, StackTop(&obj->pushST));
            StackPop(&obj->pushST);
        }
    }
    
    int front = StackTop(&obj->popST);
    //出队栈进行出队操作
    StackPop(&obj->popST);
    return front;
}

/** Get the front element. */
int myQueuePeek(MyQueue* obj) {
    //类似于出队操作
    if(StackEmpty(&obj->popST) == 0)
    {
        while(StackEmpty(&obj->pushST) != 0)
        {
            StackPush(&obj->popST, StackTop(&obj->pushST));
            StackPop(&obj->pushST);
        }
    }
    
    return StackTop(&obj->popST);
}

/** Returns whether the queue is empty. */
bool myQueueEmpty(MyQueue* obj) {
    return StackEmpty(&obj->pushST) == 0
        &&  StackEmpty(&obj->popST) == 0;
}

void myQueueFree(MyQueue* obj) {
    StackDestroy(&obj->pushST);
    StackDestroy(&obj->popST);
    
    free(obj);
}

 


http://www.kler.cn/a/155737.html

相关文章:

  • SAP_MM_SD_PP_FICO_视频课程几乎免费送
  • 【CSS】“flex: 1“有什么用?
  • PostgreSQL中的COPY命令:高效数据导入与导出
  • 测试实项中的偶必现难测bug--验证码问题
  • 【AI换装整合包及教程】CatVTON与其他虚拟试衣技术的详细对比
  • 无人机动力测试台如何快速外接第三方传感器
  • Azure Machine Learning - Azure AI 搜索中的索引器
  • 【限时免费】20天拿下华为OD笔试之【哈希集合】2023B-明明的随机数【欧弟算法】全网注释最详细分类最全的华为OD真题题解
  • Qt/QML编程学习之心得:如何添加资源文件到QML工程(十一)
  • 【书信,推荐信】【推荐节日活动】
  • QML中常见布局方法
  • 最小生成树(简单讲解,通俗易懂)
  • 笔迹检验(四):笔迹检验的程序和方法
  • PyQt6 QComboBox下拉组合框控件
  • STM32串口接收不定长数据(接收中断+超时判断)
  • C++ Easyx 三子棋
  • PostgreSQL中常用的几种连接池总结及更新
  • 阻止事件默认行为
  • MySQL之存储引擎
  • Java开发实战(一):Java环境安装
  • MapperStruct的高级用法
  • 阿里微服务质量保障系列:性能监控最佳实践
  • 命令模式-C++实现
  • 超硬核解析Mybatis动态代理原理!只有接口没实现也能跑?
  • Python WebSocket 客户端教程
  • maven如何用命令看配置文件位置