创建栈的方法

//================栈创建===================

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值