⭐️ 题目描述
🌟 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);
}
✨栈和队列相关接口代码(可复制):
【数据结构】栈和队列