创建两个队列
typedef struct {
Queue q1;
Queue q2;
} MyStack;
功能一:往栈里输入数据
若两个队列都为空则向任意一个队列输入数据即可;
若一个队列为空,另一个队列不为空则向非空队列输入数据;
void myStackPush(MyStack* obj, int x) {
Queue* empty=&obj->q2;
Queue* nonempty=&obj->q1;
if(QueueEmpty(&obj->q1))
{
empty=&obj->q1;
nonempty=&obj->q2;
}
QueuePush(nonempty,x);
}
功能二:往栈里取出数据
将非空队列n-1项放入空队列,再将第n项输出
int myStackPop(MyStack* obj) {
Queue* empty=&obj->q2;
Queue* nonempty=&obj->q1;
if(QueueEmpty(&obj->q1))
{
empty=&obj->q1;
nonempty=&obj->q2;
}
while(QueueSize(nonempty)>1)
{
QueuePush(empty,QueueTop(nonempty));
QueuePop(nonempty);
}
int top=QueueTop(nonempty);
QueuePop(nonempty);
return top;
}
功能三:判断栈是否为空
bool myStackEmpty(MyStack* obj) {
if(QueueEmpty(&obj->q1)&&QueueEmpty(&obj->q2))
return true;
else
return false;
}
功能四:销毁栈
void myStackFree(MyStack* obj) {
QueueDestory(&obj->q1);
QueueDestory(&obj->q2);
}