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

news/2024/11/20 13:44:08/

原题链接: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.ppmy.cn/news/1044180.html

相关文章

计组 | 机器周期、平均运算速率、数据传输速率、总线带宽怎么计算?

目录 一、计算公式 二、练习题 1.总线带宽 2.机器周期 3.平均运算速度 4.数据传输速率 一、计算公式 总线带宽计算: 总线带宽Dr时钟频率f 数据量D D /(时钟周期T/(一个总线周期占用时钟周期的个数)) 其中涉及到的单位MHz与 MB/s是怎…

sql:知识点记录一

1.Mysql逻辑架构:连接层、服务层、引擎层、存储层 2.show engines:查看存储引擎 3.Mysql两种存储引擎的区别: 建立索引:比如说用户很喜欢用name去查询表,就可以给数据库的name字段建立索引,提高查询效率&a…

Azure创建可用性集

什么是可用性集 在Azure中,可用性集(Availability Set)是一种用于提高虚拟机(VM)可用性和可靠性的功能。它通过将虚拟机分布在不同的物理硬件和故障域中来提供高可用性。每个故障域都是一个独立的电力和网络故障区域&…

ps丢失d3dcompiler_47.dll怎么办,启动无反应,分享三个解决方法

d3dcompiler_47.dll64位是windows系统中重要的dll文件,缺少了它可能会引起部分软件或者游戏不能运行。 如果系统出现“找不到d3dcompiler_47.dll”或“d3dcompiler_47.dll丢失”等错误信息,那么我们就该着手修复它。 先带了解一下d3dcompiler_47.dll是什…

一些常用的CSDN 设置命令、插入目录、改变字体颜色等

文章目录 字体颜色显示调节插入图片大小图片居中 字体颜色显示 字体两边加 调节插入图片大小 注意下边多一个600x600,等号前边有个空格 在这里插入图片描述](https://img-blog.csdnimg.cn/5a0d3d2d37cf481db0e1346432be3da1.png [在这里插入图片描述](https://img-…

学习红外成像仪开发注意要点

学习红外成像仪开发注意要点 三河凡科科技飞讯红外成像仪开发学习注意要点 红外成像仪是一种高级的光学设备,可用于探测、分析和显示红外辐射,它广泛应用于医学、军事、石油、矿产资源勘探等领域。红外成像仪的开发需要注意以下几个方面: 1…

过来,我告诉你个秘密:送给程序员男友最好的礼物,快教你对象学习磁盘分区啦!小点声哈,别让其他人学会了!

[原文连接:来自给点知识](过来,我告诉你个秘密:送给程序员男友最好的礼物,快教你对象学习磁盘分区啦!小点声哈,别让其他人学会了!) 再唱不出那样的歌曲 听到都会红着脸躲避 虽然会经常忘了我依然爱着你 …

open cv学习 (九)腐蚀和膨胀

腐蚀和膨胀 demo1 # 腐蚀 import cv2 import numpy as np img cv2.imread("./atm.jpg")k np.ones((3, 3), np.uint8) cv2.imshow("img", img) dst cv2.erode(img, k) cv2.imshow("dst", dst) cv2.waitKey() cv2.destroyAllWindows()demo2 …