LeetCode 232.用栈实现队列 C写法
LeetCode 232.用栈实现队列 C写法
思路🧐:
栈代码在本篇中。与队列实现栈类似,不过这里我们建立两个栈,一个栈专门存放入队数据,一个专门存放出队数据,不需要再来回导数据。原理在于一个栈的数据到另一个栈中,顺序就颠倒了,而颠倒的数据就是队列要出队的顺序。具体思路可以看代码注释。
代码🔎:
typedef struct { ST popst; //用于放出队数据 ST pushst; //用于放入队数据 } MyQueue; MyQueue* myQueueCreate() { MyQueue* obj = (MyQueue*)malloc(sizeof(MyQueue)); if(obj == NULL) { perror("malloc fail"); return NULL; } STInit(&obj->popst); //注意要传地址 STInit(&obj->pushst); return obj; } void myQueuePush(MyQueue* obj, int x) { STPush(&obj->pushst, x); //直接push到存数据的栈中 } int myQueuePop(MyQueue* obj) { int front = myQueuePeek(obj); //复用peek函数,取到要出队的数据 STPop(&obj->popst); //删除该数据 return front; } int myQueuePeek(MyQueue* obj) { if(STEmpty(&obj->popst)) //当popst为空时,代表全部出完,可以继续放数据进去 { while(!STEmpty(&obj->pushst)) { STPush(&obj->popst,STTop(&obj->pushst)); //将pushst的数据全部放入 STPop(&obj->pushst); //删除pushst栈顶数据 } } return STTop(&obj->popst); //返回的栈头数据就是第一个要出队列的数据 } bool myQueueEmpty(MyQueue* obj) { return STEmpty(&obj->pushst) && STEmpty(&obj->popst); //两个都为空才是空 } void myQueueFree(MyQueue* obj) { STDestory(&obj->pushst); //所创建的空间要清理干净,避免内存泄漏 STDestory(&obj->popst); free(obj); }
STDestory(&obj->popst); free(obj);
}
![image-20240719221440234](https://img-blog.csdnimg.cn/img_convert/4466b02ec35f27d064c4478dbc1ba874.png)
原文地址:https://blog.csdn.net/m0_63816268/article/details/140561071
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!