免费作图网站都有哪些,广州十大活动策划公司,顺德网站建设教程,网站建设的平台分析题目描述
题目链接#xff1a;232. 用栈实现队列 - 力扣#xff08;LeetCode#xff09; 题目分析
我们先把之前写的数组栈的实现代码搬过来
用栈实现队列最主要的是实现队列先进先出的特点#xff0c;而栈的特点是后进先出#xff0c;那么我们可以用两个栈来实现…题目描述
题目链接232. 用栈实现队列 - 力扣LeetCode 题目分析
我们先把之前写的数组栈的实现代码搬过来
用栈实现队列最主要的是实现队列先进先出的特点而栈的特点是后进先出那么我们可以用两个栈来实现
一个pushst用来入队列一个popst用来出队列
具体的接口有下面几个
初始化
malloc一块空间来存两个栈同时初始化这两个栈 入队列
入数据都入到pushst 出队列
出数据前先需要导数据当popst为空且pushst不为空的时候pushst的top数据依次push到popst中然后返回pop的top数据然后pop掉top数据如果pop不为空则直接返回poptop并pop 返回队头数据 判空
两个栈同时为空则为空 销毁
销毁还是依次销毁 代码示例
#include stdio.h
#include stdlib.h
#include assert.h
#include stdbool.h
typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;//标识栈顶位置int capacity;
}ST;
//初始化
void STInit(ST* pst);
//销毁
void STDestroy(ST* pst);
//入栈
void STPush(ST* pst, STDataType x);
//出栈
void STPop(ST* pst);
//返回栈顶元素
STDataType STTop(ST* pst);
//判空
bool STEmpty(ST* pst);
//栈的元素个数
int STSize(ST* pst);//初始化
void STInit(ST* pst)
{assert(pst);pst-a NULL;pst-capacity 0;pst-top 0;
}
//销毁
void STDestroy(ST* pst)
{assert(pst);free(pst-a);pst-a NULL;pst-top pst-capacity 0;
}
//入栈
void STPush(ST* pst, STDataType x)
{assert(pst);if (pst-top pst-capacity){int newcapacity pst-capacity 0 ? 4 : pst-capacity * 2;STDataType* tmp (STDataType * )realloc(pst-a, sizeof(STDataType) * newcapacity);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);/*if (pst-top 0){return true;}else{return false;}*/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 frontmyQueuePeek(obj);STPop((obj-popst));return front;
}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);
}/*** Your MyQueue struct will be instantiated and called as such:* MyQueue* obj myQueueCreate();* myQueuePush(obj, x);* int param_2 myQueuePop(obj);* int param_3 myQueuePeek(obj);* bool param_4 myQueueEmpty(obj);* myQueueFree(obj);
*/