大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
点击查看题目
思路:
在做此题之前,我们先要实现栈,这在上个博客中已经写过,在这就不在赘述,下面是实现队列的代码
点击进入博客:【数据结构】实现栈
下面是实现栈的代码
#include<stdio.h>
#include<assert.h>
#include<stdbool.h>
typedef int STDataType;
typedef struct Stack
{
STDataType* a;
int top;
int capacity;
}ST;
//初始化
void STInit(ST* pst)
{
assert(pst);
pst->a = NULL;
pst->capacity = 0;
pst->top = 0;//指向栈顶元素的下一个
}
//销毁
void STDestroy(ST* pst)
{
assert(pst);
if (pst->a != NULL)
{
free(pst->a);
pst->a = NULL;
pst->capacity = 0;
pst->top = 0;
}
}
//栈顶插入
void STPush(ST* pst, STDataType x)
{
assert(pst);
//判断是否需要增容
if (pst->top == pst->capacity)
{
int newcapacity = (pst->capacity == 0) ? 4 : 2 * pst->capacity;
ST* tmp = (ST*)realloc(pst->a, newcapacity * sizeof(ST));
if (tmp == NULL)
{
perror("realloc fail");
return;
}
pst->a = tmp;
pst->capacity = newcapacity;
}
//插入数据
pst->a[pst->top] = x;
pst->top++;
}
//栈顶删除
void STPop(ST* pst)
{
assert(pst);
assert(pst->top > 0);
pst->top--;
}
//显示栈顶元素
STDataType STTop(ST* pst)
{
assert(pst);
assert(pst->top > 0);
return pst->a[pst->top - 1];
}
//是否为空
bool STEmpty(ST* pst)
{
assert(pst);
return pst->top == 0;
}
//大小
int STSize(ST* pst)
{
assert(pst);
return pst->top;
}
接下来是本题的代码
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 myQueuePop(MyQueue* obj) {
int ret=myQueuePeek(obj);
STPop(&obj->popst);
return ret;
}
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);
}
bool myQueueEmpty(MyQueue* obj) {
return STEmpty(&obj->pushst)&&STEmpty(&obj->popst);
}
void myQueueFree(MyQueue* obj) {
STDestroy(&obj->pushst);
STDestroy(&obj->popst);
free(obj);
}
好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️