力扣 232. 用栈实现队列(C语言实现)

目录

  • 1.解题思路
  • 2.代码实现

1.解题思路

利用两个栈,设栈s1为入栈,s2为出栈,则当s2为空时,出队列只能将s1的后N-1项挪到s2后剩下的就为出栈的项,但如果s2不为空那就说明此时s2栈中的元素就已经是按照队列的顺序排好了,直接出栈即可.

在这里插入图片描述

在这里插入图片描述

2.代码实现

栈的实现代码:

typedef int STDataType;
typedef struct Stack
{STDataType* _a;int _top;		// 栈顶int _capacity;  // 容量 
}Stack;
void StackInit(Stack* ps)
{assert(ps);ps->_a = NULL;ps->_capacity = 0;ps->_top = 0;
}
void StackPush(Stack* pst, STDataType x)
{assert(pst);if (pst->_top == pst->_capacity){int newcapacity = pst->_capacity == 0 ? 4 : pst->_capacity * 2;STDataType* tmp = (STDataType*)realloc(pst->_a, sizeof(STDataType) * newcapacity);if (tmp == NULL){perror("realloc fail");return;}pst->_a = tmp;pst->_capacity = newcapacity;}pst->_a[pst->_top] = x;pst->_top++;
}
void StackPop(Stack* ps)
{assert(ps->_top > 0);ps->_top--;}
STDataType StackTop(Stack* ps)
{return ps->_a[ps->_top - 1];}
int StackSize(Stack* ps)
{return ps->_top;}
bool StackEmpty(Stack* ps)
{return ps->_top == 0;}
void StackDestroy(Stack* ps)
{free(ps->_a);ps->_capacity = 0;ps->_top = 0;}

解题代码:

typedef struct {Stack s1;Stack s2;
} MyQueue;MyQueue* myQueueCreate() {MyQueue* m = (MyQueue*)malloc(sizeof(MyQueue));StackInit(&m->s1);StackInit(&m->s2);
}void myQueuePush(MyQueue* obj, int x) {StackPush(&obj->s1, x);}int myQueuePop(MyQueue* obj) {if (!StackEmpty(&obj->s2)){int tmp = StackTop(&obj->s2);StackPop(&obj->s2);return tmp;}else{while (StackSize(&obj->s1) > 1){int tmp = StackTop(&obj->s1);StackPush(&obj->s2, tmp);StackPop(&obj->s1);}int tmp1 = StackTop(&obj->s1);StackPop(&obj->s1);return tmp1;}
}int myQueuePeek(MyQueue* obj) {if (!StackEmpty(&obj->s1)){return obj->s1._a[0];}else{return obj->s2._a[obj->s2._top - 1];}}bool myQueueEmpty(MyQueue* obj) {if (StackEmpty(&obj->s1) && StackEmpty(&obj->s2))return true;elsereturn false;}void myQueueFree(MyQueue* obj) {StackDestroy(&obj->s1);StackDestroy(&obj->s2);}

结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/174291.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5学习系列之主结构

HTML5学习系列之主结构 前言HTML5主结构定义页眉定义导航定义主要区域定义文章块定义区块定义附栏定义页脚 具体使用总结 前言 学习记录 HTML5主结构 定义页眉 head表示页眉&#xff0c;用来表示标题栏&#xff0c;引导和导航作用的结构元素。 <header role"banner…

解析JSON字符串:属性值为null的时候不被序列化

如果希望属性值为null及不序列化&#xff0c;只序列化不为null的值。 1、测试代码 配置代码&#xff1a; mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); 或者通过注解JsonInclude(JsonInclude.Include.NON_NULL) //常见问题2&#xff1a;属性为null&a…

8 历史服务器配置

为了查看程序的历史运行情况&#xff0c;需要配置一下历史服务器 1、配置mapred-site.xml vim mapred-site.xml在该文件里面增加如下配置 //原先的配置不用删除 <!-- 历史服务器端地址 --> <property><name>mapreduce.jobhistory.address</name><…

缺陷预测(一)——论文复现

运行CGCN文件 问题一&#xff1a;CNN输入维度的问题出现的问题解决问题原因 问题二&#xff1a;mix时&#xff0c;输入的train_in和train_gen.inputs数据格式不一致出现的问题解决问题 最终结果 问题一&#xff1a;CNN输入维度的问题 出现的问题 数据集改好之后&#xff0c;出…

D. Jumping on Walls bfs

Problem - 199D - Codeforces 题目大意&#xff1a;有一个两个垂直的平行墙壁组成的一个峡谷。一个人初始是在左边墙壁第一层。在每个墙壁上有些障碍点&#xff0c;用X表示&#xff0c;这些障碍点不能被到达。&#xff0c;他可以执行以下三个操作&#xff1a; 向当前墙壁往上…

Win10系统把D盘空间分给C盘的方法

在Win10系统中&#xff0c;用户发现C盘的空间太少了&#xff0c;导致电脑运作出现了卡顿的问题&#xff0c;所以想把D盘的空间分给C盘&#xff0c;但不清楚具体的操作步骤。接下来小编给大家介绍两种简单的操作方法&#xff0c;帮助大家轻松将Win10系统D盘的空间分给C盘&#x…

JavaScript_表单校验用户名和密码

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>注册页面</title><style>*{margin: 0px;padding: 0px;box-sizing: border-box;}body{background: url("img/register_bg.png") …

邻接矩阵储存图实现深度优先遍历(C++)

目录 基本要求&#xff1a; 图的结构体&#xff1a; 图的构造&#xff1a; 图的深度优先&#xff08;DFS&#xff09;&#xff1a; 图的打印输出&#xff1a; 完整代码&#xff1a; 测试数据&#xff1a; 运行结果&#xff1a; 通过给出的图的顶点和边的信息&#xff0c…

mindspore mindyolo目标检测华为昇腾上推理使用、训练;华为OBS文件传输使用

参考&#xff1a; https://github.com/mindspore-lab/mindyolo 使用案例&#xff1a; https://github.com/mindspore-lab/mindyolo/blob/master/GETTING_STARTED.md 安装&#xff1a; pip install mindyolo特别注意opencv-python、opencv-python-headless版本问题&#xff0…

js运算,笔试踩坑知识点

文章目录 前端面试系列运算符记住口诀先计算 后 赋值赋值从右向左 和 - -计算从左向右括号里的加减优先于括号外的乘除交换俩数的值答案 前端面试系列 js运算 笔试踩坑知识点 前端js面试题 &#xff08;三&#xff09; 前端js面试题&#xff08;二&#xff09; 前端js面试题 (…

tensorflow 1.15 gpu docker环境搭建;Nvidia Docker容器基于TensorFlow1.15测试GPU;——全流程应用指南

前言: TensorFlow简介 TensorFlow 在新款 NVIDIA Pascal GPU 上的运行速度可提升高达 50%&#xff0c;并且能够顺利跨 GPU 进行扩展。 如今&#xff0c;训练模型的时间可以从几天缩短到几小时 TensorFlow 使用优化的 C 和 NVIDIA CUDA 工具包编写&#xff0c;使模型能够在训练…

OpenCV入门——概述 || 环境搭建

文章目录 OpenCV与图形学的关系OpenCV与FFmpeg的关系博客内容概览计算机视觉的应用OpenCV简介环境搭建 OpenCV与图形学的关系 从图形中理解其内容&#xff0c;是计算机视觉的任务&#xff1b;通过模型渲染出图像&#xff0c;是图形学的任务。 OpenCV与FFmpeg的关系 博客内容概…