#yyds干货盘点#算法开启栈转队列武魂
==栈接口见 算法开启小码农栈血脉==用栈实现队列
题目
队结构体
typedef struct {
ST PushST;//入队栈
ST PopST;//出队栈
} MyQueue;队初始化
MyQueue* myQueueCreate() {
MyQueue* q = (MyQueue*)malloc(sizeof(MyQueue));
StackInit(&q->PushST);//初始化入队栈
StackInit(&q->PopST);//初始化出队栈
return q;
}入“队”
void myQueuePush(MyQueue* obj, int x) {
StackPush(&obj->PushST,x);
}出“队”并取出队元素
int myQueuePop(MyQueue* obj) {
//如果出队栈为空就从入队栈里面全导过来
if(StackEmpty(&obj->PopST))
{
//导数据
while(!StackEmpty(&obj->PushST))
{
//入队栈栈顶元素拿出来给出队栈
StackPush(&obj->PopST,StackTop(&obj->PushST));
//栈把入队栈的栈顶元素pop掉
StackPop(&obj->PushST);
}
}
//这时就说明都倒完了,所以开始pop掉出队栈元素
int tmp = StackTop(&obj->PopST);
StackPop(&obj->PopST);
return tmp;
}返回队头
int myQueuePeek(MyQueue* obj) {
//如果出队栈为空就从入队栈里面全导过来
if(StackEmpty(&obj->PopST))
{
//导数据
while(!StackEmpty(&obj->PushST))
{
//入队栈栈顶元素拿出来给出队栈
StackPush(&obj->PopST,StackTop(&obj->PushST));
//栈把入队栈的栈顶元素pop掉
StackPop(&obj->PushST);
}
}
//就是出队函数那样只取队头而已
return StackTop(&obj->PopST);
}判断队空
bool myQueueEmpty(MyQueue* obj) {
return StackEmpty(&obj->PushST) && StackEmpty(&obj->PopST);
}队列销毁
void myQueueFree(MyQueue* obj) {
StackDestroy(&obj->PushST);
StackDestroy(&obj->PopST);
free(obj);
}
队列代码(接口代码去我之前文章取) 算法开启小码农栈血脉
typedef struct {
ST PushST;//入队栈
ST PopST;//出队栈
} MyQueue;
MyQueue* myQueueCreate() {
MyQueue* q = (MyQueue*)malloc(sizeof(MyQueue));
StackInit(&q->PushST);//初始化入队栈
StackInit(&q->PopST);//初始化出队栈
return q;
}
void myQueuePush(MyQueue* obj, int x) {
StackPush(&obj->PushST,x);
}
int myQueuePop(MyQueue* obj) {
//如果出队栈为空就从入队栈里面全导过来
if(StackEmpty(&obj->PopST))
{
//导数据
while(!StackEmpty(&obj->PushST))
{
//入队栈栈顶元素拿出来给出队栈
StackPush(&obj->PopST,StackTop(&obj->PushST));
//栈把入队栈的栈顶元素pop掉
StackPop(&obj->PushST);
}
}
//这时就说明都倒完了,所以开始pop掉出队栈元素
int tmp = StackTop(&obj->PopST);
StackPop(&obj->PopST);
return tmp;
}
int myQueuePeek(MyQueue* obj) {
//如果出队栈为空就从入队栈里面全导过来
if(StackEmpty(&obj->PopST))
{
//导数据
while(!StackEmpty(&obj->PushST))
{
//入队栈栈顶元素拿出来给出队栈
StackPush(&obj->PopST,StackTop(&obj->PushST));
//栈把入队栈的栈顶元素pop掉
StackPop(&obj->PushST);
}
}
//就是出队函数那样只取队头而已
return StackTop(&obj->PopST);
}
bool myQueueEmpty(MyQueue* obj) {
return StackEmpty(&obj->PushST) && StackEmpty(&obj->PopST);
}
void myQueueFree(MyQueue* obj) {
StackDestroy(&obj->PushST);
StackDestroy(&obj->PopST);
free(obj);
}
https://blog.51cto.com/u_15443484/4853834
页:
[1]