leetcode 232.用栈实现队列

⭐️ 题目描述

在这里插入图片描述
在这里插入图片描述

🌟 leetcode链接:用栈实现队列

1️⃣ 思路和图解:

push:
在这里插入图片描述


pop:
在这里插入图片描述


peek:pop 类似。

代码:

// 定义两个栈
typedef struct {
    Stack popStack;
    Stack pushStack;
} MyQueue;

MyQueue* myQueueCreate() {
    MyQueue* obj = (MyQueue*)malloc(sizeof(MyQueue));
    //初始化队列里的两个栈
    StackInit(&obj->popStack);
    StackInit(&obj->pushStack);

    return obj;
}

void myQueuePush(MyQueue* obj, int x) {
    // 往 push 栈中存放数据
    StackPush(&obj->pushStack , x);
}

int myQueuePop(MyQueue* obj) {
    // 如果 pop 栈为空 则先把 push 栈中的数据导入 pop 栈
    if (StackEmpty(&obj->popStack)) {
        while (!StackEmpty(&obj->pushStack)) {
            StackPush(&obj->popStack , StackTop(&obj->pushStack));
            StackPop(&obj->pushStack);
        }
    }

    // 取出 pop 栈顶元素即可
    StackType popTop = StackTop(&obj->popStack);
    // 删除栈顶元素 (模拟队列删除队头)
    StackPop(&obj->popStack);
    return popTop;
}

int myQueuePeek(MyQueue* obj) {
    // 如果 pop 栈为空 则先把 push 栈中的数据导入 pop 栈
    if (StackEmpty(&obj->popStack)) {
        while (!StackEmpty(&obj->pushStack)) {
            StackPush(&obj->popStack , StackTop(&obj->pushStack));
            StackPop(&obj->pushStack);
        }
    }
    // 取出 pop 栈顶元素即可
    return StackTop(&obj->popStack);
}

bool myQueueEmpty(MyQueue* obj) {
    return StackEmpty(&obj->pushStack) && StackEmpty(&obj->popStack);
}

void myQueueFree(MyQueue* obj) {
    StackDestroy(&obj->pushStack);
    StackDestroy(&obj->popStack);
    free(obj);
}

栈和队列相关接口代码(可复制): 【数据结构】栈和队列

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值