【leetcode】232. 用栈实现队列

用栈实现队列 题目链接
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

typedef int valuetype;
typedef struct {valuetype* arr;int top;int capacity;
} Stack;void Init(Stack* stack);void Push(Stack* stack, valuetype value);
void Pop(Stack* stack);valuetype Top(Stack* stack);
int Size(Stack* stack);
bool Empty(Stack* stack);void Destroy(Stack* stack);// 和上面图写的不一样,这里Stack不是指针
typedef struct {Stack stack1; // 存Stack stack2; // 取
} MyQueue;MyQueue* myQueueCreate() {MyQueue* queue = (MyQueue*)malloc(sizeof(MyQueue));Init(&queue->stack1);Init(&queue->stack2);return queue;
}void myQueuePush(MyQueue* obj, int x) {assert(obj);Push(&obj->stack1, x);
}int myQueuePop(MyQueue* obj) {assert(obj);int top = myQueuePeek(obj);Pop(&obj->stack2);return top;
}int myQueuePeek(MyQueue* obj) {assert(obj);if (Empty(&obj->stack2)) {// 把stack1的数据挨个取出来放到stack2while (!Empty(&obj->stack1)) {Push(&obj->stack2, Top(&obj->stack1));Pop(&obj->stack1);}} // 从stack2取队头数据return Top(&obj->stack2);
}bool myQueueEmpty(MyQueue* obj) {assert(obj);return Empty(&obj->stack1) && Empty(&obj->stack2);
}void myQueueFree(MyQueue* obj) {assert(obj);Destroy(&obj->stack1);Destroy(&obj->stack2);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);
*/void Init(Stack* stack) {assert(stack);stack->arr = NULL;stack->capacity = stack->top = 0;
}void Push(Stack* stack, valuetype value) {assert(stack);if (stack->top == stack->capacity) {stack->capacity = stack->capacity == 0 ? 10 : (int)(stack->capacity * 1.5);stack->arr = (valuetype*)realloc(stack->arr, sizeof(valuetype) * stack->capacity);if (stack->arr == NULL) {perror("realloc failed in the function Push(Stack*, valuetype).");return;}}stack->arr[stack->top++] = value;
}void Pop(Stack* stack) {assert(stack && stack->top > 0);stack->top--;
}valuetype Top(Stack* stack) {assert(stack && stack->top > 0);return stack->arr[stack->top - 1];
}int Size(Stack* stack) {assert(stack);return stack->top;
}bool Empty(Stack* stack) {assert(stack);return stack->top == 0;
}void Destroy(Stack* stack) {assert(stack);free(stack->arr);stack->arr = NULL;stack->capacity = stack->top = 0;
}

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

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

相关文章

C/C++ - 函数进阶(C++)

目录 默认参数 函数重载 内联函数 函数模板 递归函数 回调函数 默认参数 定义 默认参数是在函数声明或定义中指定的具有默认值的函数参数。默认参数允许在调用函数时可以省略对应的参数,使用默认值进行替代。 使用 默认参数可以用于全局函数和成员函数。默认参…

Docker安装RcoketMQ

1、Docker安装RcoketMQ-4.9.4 在同级文件夹创建目录config,并在里面创建文件broker.conf,文件内容如下: brokerClusterNameDefaultCluster brokerNamebroker-a brokerId0 deleteWhen04 fileReservedTime48 brokerRoleASYNC_MASTER flushDis…

子类构造器的特点

子类的全部构造器,都会先调用父类的构造器,再执行自己 class F{public F(){System.out.println("父类的无参数构造器");} }class Z extends F{public Z(){System.out.println("子类的无参数构造器");} }public class Test {public s…

Python第三方扩展库Matplotlib

Python第三方扩展库Matplotlib Matplotlib 是第三方库,不是Python安装程序自带的库,需要额外安装,它是Python的一个综合性的绘图库,提供了大量的绘图函数用于创建静态、动态、交互式的图形和数据可视化,可以帮助用户创…

【深度学习:目标检测】深度学习中目标检测模型、用例和示例

【深度学习:目标检测】深度学习中目标检测模型、用例和示例 什么是物体检测?物体检测与图像分类物体检测与图像分割 计算机视觉中的目标检测物体检测的优点物体检测的缺点深度学习和目标检测人员检测 物体检测如何工作?一阶段与两阶段深度学习…

算法每日一题: 边权重均等查询 | 公共子祖先

大家好,我是星恒,今天给大家带来的是一道图里面有关公共子祖先的题目,理解起来简单,大家 题目:leetcode 2846 现有一棵由 n 个节点组成的无向树,节点按从 0 到 n - 1 编号。给你一个整数 n 和一个长度为 n …

༺༽༾ཊ—Unity之-05-抽象工厂模式—ཏ༿༼༻

首先创建一个项目, 在这个初始界面我们需要做一些准备工作, 建基础通用文件夹, 创建一个Plane 重置后 缩放100倍 加一个颜色, 任务:使用 抽象工厂模式 创建 人物与宠物 模型, 首先资源商店下载 人物与宠物…

258. Add Digits(各位相加)

问题描述 给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数。返回这个结果。 问题分析 我们至少要将num的每一位相加一次得到一个新的数字,然后判断是否新的数字需要每一位再次相加,如此重复下去,这…

PCB的通孔,盲孔,埋孔

通孔:双层板从顶层到底层的打通,这样电流就能够从顶层到底层 盲孔:因为看不到底,像一口井一样,只能打到中间,里面灌上铜,我们可以从第一层切换到第二层,第三层等等,盲孔…

2024年数学建模美赛 分析与编程

2024年数学建模美赛 分析与编程 1、本专栏将在2024年美赛题目公布后,进行深入分析,建议收藏; 2、本专栏对2023年赛题,其它题目分析详见专题讨论; 2023年数学建模美赛A题(A drought stricken plant communi…

什么是数据库设计?基本步骤有哪些?

数据库设计结构图 实线代表输入,虚线代表输出,每个节点的输出作为下一个节点的输入。 基本步骤 1.需求分析阶段 数据需求分析是在项目确定之后,用户和设计人员对数据库应用系统所要涉及的内容(数据)和功能&#xff0…

Java RC4加密算法

一、RC4加密算法 在密码学中,RC4(来自Rivest Cipher 4的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。 百度百科 - RC4:https://baike.baidu.com/item/RC4/34545…