==栈接口见 算法开启小码农栈血脉==
用栈实现队列
题目
队结构体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);
}
|