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

【数据结构OJ题】用栈实现队列

原题链接:https://leetcode.cn/problems/implement-queue-using-stacks/

目录

1. 题目描述

2. 思路分析

3. 代码实现


1. 题目描述

 

2. 思路分析

用两个栈实现,一个栈进行入队操作,另一个栈进行出队操作。
出队操作: 当出队的栈不为空时,直接进行出栈操作;如果为空,需要把入队的栈元素全部导入到出队的栈,然后再进行出栈操作

3. 代码实现

typedef int STDataType;
#define INIT_CAPACITY 4
typedef struct Stack
{STDataType* a;int top;  //栈顶int capacity;  //容量
}ST;//初始化栈
void STInit(ST* ps);
//入栈
void STPush(ST* ps, STDataType x);
//出栈
void STPop(ST* ps);
//获取栈顶元素
STDataType STTop(ST* ps);
//获取栈中有效元素个数
int STSize(ST* ps);
//检测栈是否为空
bool STEmpty(ST* ps);
//销毁栈
void STDestroy(ST* ps);void STInit(ST* ps)
{assert(ps);ps->a = NULL;ps->top = 0;ps->capacity = 0;
}void STPush(ST* ps, STDataType x)
{assert(ps);if (ps->top == ps->capacity){int newCapacity = ps->capacity == 0 ? INIT_CAPACITY : ps->capacity * 2;STDataType* tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * newCapacity);if (tmp == NULL){perror("realloc failed");exit(-1);}ps->a = tmp;ps->capacity = newCapacity;}ps->a[ps->top] = x;ps->top++;
}void STPop(ST* ps)
{assert(ps);//空assert(ps->a > 0);--ps->top;
}STDataType STTop(ST* ps)
{assert(ps);//空assert(ps->a > 0);return ps->a[ps->top - 1];
}int STSize(ST* ps)
{assert(ps);return ps->top;
}bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}void STDestroy(ST* ps)
{assert(ps);ps->a = NULL;ps->top = ps->capacity = 0;
}typedef struct {ST pushst;ST popst;
} MyQueue;MyQueue* myQueueCreate() {MyQueue *obj=(MyQueue*)malloc(sizeof(MyQueue));STInit(&obj->pushst);STInit(&obj->popst);return obj;
}void myQueuePush(MyQueue* obj, int x) {STPush(&obj->pushst,x);
}int myQueuePeek(MyQueue* obj) {if(STEmpty(&obj->popst)){//捯数据while(!STEmpty(&obj->pushst)){STPush(&obj->popst,STTop(&obj->pushst));STPop(&obj->pushst);}}return STTop(&obj->popst);
}int myQueuePop(MyQueue* obj) {int front=myQueuePeek(obj);STPop(&obj->popst);return front;
}bool myQueueEmpty(MyQueue* obj) {return STEmpty(&obj->popst)&&STEmpty(&obj->pushst);
}void myQueueFree(MyQueue* obj) {STDestroy(&obj->popst);STDestroy(&obj->pushst);free(obj);
}/*** Your MyQueue struct will be instantiated and called as such:* MyQueue* obj = myQueueCreate();* myQueuePush(obj, x);* int param_2 = myQueuePop(obj);* int param_3 = myQueuePeek(obj);* bool param_4 = myQueueEmpty(obj);* myQueueFree(obj);
*/

 

http://www.lryc.cn/news/134651.html

相关文章:

  • 通达信指标公式15:除权除息数据统计分析
  • day-27 代码随想录算法训练营(19)回溯part03
  • CSDN编程题-每日一练(2023-08-22)
  • 使用 KubeBlocks 为 K8s 提供稳如老狗的数据库服务
  • SFL212B-10-21-15、SFL212B-20-21-40喷嘴挡板伺服阀
  • 阿里云100元预算可选的云服务器配置2核2G3M带宽
  • Linux问题--docker启动mysql时提示3306端口被占用
  • 2023年中秋月饼市场趋势分析(月饼京东销售数据分析)
  • A Survey on Model Compression for Large Language Models
  • 读取/加载 properties/yml 配置文件
  • UG\NX二次开发 创建中心线
  • 用java语言写一个网页爬虫 用于获取图片
  • 三数之和-LeetCode
  • ubuntu 对多CPU统一设置高性能模式
  • 志凌海纳 SmartX 携手灵雀云推出全栈云原生联合解决方案
  • 排名前 6 位的数学编程语言
  • arm:day6
  • MyBatis快速入门以及环境搭建和CRUD的实现
  • 基于Pytorch实现的声纹识别系统
  • Fast DDS (2)
  • HarmonyOS/OpenHarmony应用开发-ArkTS语言渲染控制if/else条件渲染
  • 飞天使-k8s基础组件分析-pod
  • css题库
  • 中文医疗大模型汇总
  • smiley-http-proxy-servlet 实现springboot 接口反向代理,站点代理,项目鉴权,安全的引入第三方项目服务
  • Java集合利器 Map Set
  • HJ106 字符逆序
  • sentinel的基本使用
  • 【STM32】串口通信乱码(认识系统时钟来源)
  • Java实现敏感词过滤功能