用栈实现队列
1.题目链接
2.思路
两个栈实现队列
1:往不为空的栈里面入数据 入完数据
2:入完数据后 把入完的数据 从栈里拿出来放到另一个栈
3:另一个栈再拿出来就实现了先入先出
3.实现
typedef struct
{
int stackInTop, stackOutTop;
int stackIn[100], stackOut[100];
} MyQueue;
MyQueue* myQueueCreate()
{
MyQueue* queue = (MyQueue*)malloc(sizeof(MyQueue));
queue->stackInTop = 0;
queue->stackOutTop = 0;
return queue;
}
//将元素存入第一个栈中,存入后栈顶指针+1
void myQueuePush(MyQueue* obj, int x)
{
obj->stackIn[(obj->stackInTop)++] = x;
}
int myQueuePop(MyQueue* obj)
{
int stackInTop = obj->stackInTop;
int stackOutTop = obj->stackOutTop;
//若输出栈为空
if(stackOutTop == 0)
{
//将第一个栈中元素复制到第二个栈中
while(stackInTop > 0)
{
obj->stackOut[stackOutTop++] = obj->stackIn[--stackInTop];
}
}
//出栈
int top = obj->stackOut[--stackOutTop];
//将输出栈中元素放回输入栈中
while(stackOutTop > 0)
{
obj->stackIn[stackInTop++] = obj->stackOut[--stackOutTop];
}
obj->stackInTop = stackInTop;
obj->stackOutTop = stackOutTop;
return top;
}
int myQueuePeek(MyQueue* obj)
{
return obj->stackIn[0];
}
bool myQueueEmpty(MyQueue* obj)
{
return obj->stackInTop == 0 && obj->stackOutTop == 0;
}
void myQueueFree(MyQueue* obj)
{
obj->stackInTop = 0;
obj->stackOutTop = 0;
}
4.运行结果
#19用栈实现队列#完