//================栈创建===================
typedef struct{
int* stk;//表示内存空间的大小
int size;//表示栈的长度
}Stack;//创建栈的结构体
Stack* stkCreate(int X)//用于初始化栈,X为栈的容量
{
Stack* create = malloc(sizeof(Stack));//创建一个栈create,分配空间为Stack的大小
create->stk = malloc(sizeof(int)*X);//为create中的stk分配X个int空间
create->size = 0;//没有存入数据,默认size为0
return create;//返回初始化后的create地址
}
void stkPush(Stack* s,int x)//栈添加操作
{
s->stk[s->size++]=x;//存放到s的stk中索引为size的位置,然后让size加一
}
void stkPop(Stack* s)//栈删除操作
{
s->size--;//size减一即可
}
int stkPeek(Stack* s)//栈获取操作
{
return s->stk[s->size-1];//获取栈顶元素(size为下一个储存的索引,故需要减1)
}
bool stkIsEmpty(Stack* s)//判断栈空操作
{
return s->size==0;//判断size是否为0
}
void stkFree(Stack* s)//释放空间操作
{
free(s->stk);
}
//================队列创建===================
typedef struct {
Stack* Out;//创建一个栈用于输出
Stack* In;//创建一个栈用于输入
} MyQueue;
/** Initialize your data structure here. */
MyQueue* myQueueCreate() {
MyQueue* create = malloc(sizeof(MyQueue));//创建一个队列create,分配MyQueue大小空间
create->Out = stkCreate(100);//初始化Out栈,题目要求最大空间为100
create->In = stkCreate(100);//初始化In栈
return create;
}
/** Push element x to the back of queue. */
void myQueuePush(MyQueue* obj, int x) {
stkPush(obj->In,x);//往obj中的In栈中存入输入
}
/** Removes the element from in front of queue and returns that element. */
int myQueuePop(MyQueue* obj) {
if(stkIsEmpty(obj->Out))//如果Out栈是空的
{
while(!stkIsEmpty(obj->In))//循环取出In栈
{
stkPush(obj->Out,stkPeek(obj->In));//放入Out栈中
stkPop(obj->In);//删除In栈栈顶
}
}
int result = stkPeek(obj->Out);//Out栈栈顶既是队首
stkPop(obj->Out);//删除队首
return result;//返回值
}
/** Get the front element. */
int myQueuePeek(MyQueue* obj) {
//同理myQueuePop
if(stkIsEmpty(obj->Out))//如果Out栈是空的
{
while(!stkIsEmpty(obj->In))//循环取出In栈
{
stkPush(obj->Out,stkPeek(obj->In));//放入Out栈中
stkPop(obj->In);//删除In栈栈顶
}
}
return stkPeek(obj->Out);;//返回值
}
/** Returns whether the queue is empty. */
bool myQueueEmpty(MyQueue* obj) {
return stkIsEmpty(obj->In)&&stkIsEmpty(obj->Out);//判断两个栈是否都为空
}
void myQueueFree(MyQueue* obj) {
stkFree(obj->Out);//释放两个栈的空间
stkFree(obj->In);
}
作者:shen-bi-ren-l
链接:https://leetcode.cn/problems/implement-queue-using-stacks/solution/cyu-yan-chuang-jian-zhan-shu-ju-jie-gou-fm0nc/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
创建栈的方法
最新推荐文章于 2023-11-24 22:47:50 发布