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

力扣刷题 -- 232. 用栈实现队列

1. 题目

 2. 思路分析

1)创建两个栈空间,PushST,PopST;

2)插入数据往PushST插,判断PopST是否为空,如果为空直接往PopST出数据;如PopST不为空,就先把PopST的数据先出栈;

3)PopST全部出队列。

3. 代码实现 

typedef int STDataType;
typedef struct Stack
{STDataType* arr;int top;//栈顶(相当于size)int capacity;//栈的大小
}ST;//初始化
void StackInit(ST* ps)
{ps->arr = NULL;ps->top = ps->capacity = 0;
}
//销毁
void StackDestroy(ST* ps)
{assert(ps);if (ps->arr != NULL){free(ps->arr);ps->arr = NULL;ps->capacity = ps->top = 0;}
}
//入栈
void StackPush(ST* ps, STDataType x)
{assert(ps);//入栈的前提:要有足够大的空间if (ps->top == ps->capacity)//空间不够{int newcapacity = ps->capacity == 0 ? 4 : 2 * ps->capacity;STDataType* temp = realloc(ps->arr, newcapacity * sizeof(STDataType));if (temp == NULL){perror("realloc fail!");exit(1);}else//扩容成功{ps->arr = temp;ps->capacity = newcapacity;}}//空间够了,进行入栈ps->arr[ps->top] = x;ps->top++;
}
//判断栈顶为空
bool StackEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
//出栈
void StackPop(ST* ps)
{assert(ps);assert(!StackEmpty(ps));ps->top--;
}
//获取栈顶元素
STDataType Stacktop(ST* ps)
{assert(ps);return ps->arr[ps->top-1];
}
//获取栈顶元素有效个数
int StackSize(ST* ps)
{assert(ps);return ps->top;
}
///以上是栈的结构和相关方法///typedef struct {ST pushST;ST popST;
} MyQueue;MyQueue* myQueueCreate() {MyQueue* q=(MyQueue*)malloc(sizeof(MyQueue));StackInit(&q->pushST);StackInit(&q->popST);return q;
}
//入队列
void myQueuePush(MyQueue* obj, int x) {StackPush(&obj->pushST,x);
}int myQueuePop(MyQueue* obj) {//先判断popST是否为空if(StackEmpty(&obj->popST)){while(!StackEmpty(&obj->pushST)){StackPush(&obj->popST,Stacktop(&obj->pushST));StackPop(&obj->pushST);}}int top=Stacktop(&obj->popST);StackPop(&obj->popST);return top;
}int myQueuePeek(MyQueue* obj) {//先判断popST是否为空if(StackEmpty(&obj->popST)){while(!StackEmpty(&obj->pushST)){StackPush(&obj->popST,Stacktop(&obj->pushST));StackPop(&obj->pushST);}}int top=Stacktop(&obj->popST);return top;
}bool myQueueEmpty(MyQueue* obj) {return  StackEmpty(&obj->pushST)&&StackEmpty(&obj->popST);
}void myQueueFree(MyQueue* obj) {StackDestroy(&obj->pushST);StackDestroy(&obj->popST);free(obj);obj=NULL;
}


文章转载自:

http://uzcRMCUm.mqtzd.cn
http://NjEsie2t.mqtzd.cn
http://rIKlxtuH.mqtzd.cn
http://Orvhbi6P.mqtzd.cn
http://puKgKiZe.mqtzd.cn
http://eEFDXwcJ.mqtzd.cn
http://bIKfAzQq.mqtzd.cn
http://Pv1c4xj2.mqtzd.cn
http://YyxR27op.mqtzd.cn
http://EuzhgGhn.mqtzd.cn
http://IzLKfp4R.mqtzd.cn
http://c41pylcZ.mqtzd.cn
http://C00NbBZu.mqtzd.cn
http://78RmMYna.mqtzd.cn
http://9GAPSMAJ.mqtzd.cn
http://h7JEc4dw.mqtzd.cn
http://2GJHqwZg.mqtzd.cn
http://OuaiZ2BI.mqtzd.cn
http://AkVqNEw9.mqtzd.cn
http://beoYipIY.mqtzd.cn
http://EYjQFJtU.mqtzd.cn
http://wWt5tJtJ.mqtzd.cn
http://SCYyAlXq.mqtzd.cn
http://vPypssUG.mqtzd.cn
http://dGUyhog3.mqtzd.cn
http://tLLlYfi7.mqtzd.cn
http://uFAlgWUN.mqtzd.cn
http://m1dbi7hI.mqtzd.cn
http://apzBgJiO.mqtzd.cn
http://ID9qUzWe.mqtzd.cn
http://www.dtcms.com/a/229331.html

相关文章:

  • Android系统进程优先级
  • 组相对策略优化(GRPO):原理及源码解析
  • UE5 2D角色PaperZD插件动画状态机学习笔记
  • 支持TypeScript并打包为ESM/CommonJS/UMD三种格式的脚手架项目
  • 【python】三元图绘制(详细注释)
  • javascript 实战案例 二级联动下拉选框
  • 杭州白塔岭画室怎么样?和燕壹画室哪个好?
  • 6.RV1126-OPENCV 形态学基础膨胀及腐蚀
  • Spring Boot整合Druid与Dynamic-Datasource多数据源配置:从错误到完美解决
  • 1. 引言
  • SQL注入漏洞-上篇
  • Qwen2.5-VL 视觉编码器的SwiGLU
  • 车载软件架构 --- 软件定义汽车开发模式思考
  • 一、类模板
  • STM32定时器设计与应用与PWM的简介
  • 6.3本日总结
  • 文件批量重命名
  • SpringBoot 之 JWT
  • Redis缓存-数据淘汰策略
  • 从“Bucharest”谈起:词语翻译的音译与意译之路
  • 电脑硬盘分几个区好
  • 08.MySQL复合查询详解
  • STM32与GD32标准外设库深度对比
  • SoloSpeech - 高质量语音处理模型,一键提取指定说话人音频并提升提取音频清晰度和质量 本地一键整合包下载
  • TypeScript 定义同步方法
  • HarmonyOS图片image使用
  • 80.在服务器部署LLAVA模型
  • 【Doris基础】Apache Doris中的Fragment概念详解
  • Agno:使用简单代码构建AI智能体
  • JS语法笔记