用两个栈实现一个队列,栈采取之前实现的顺序栈,具体实现的规则如下:
首先定义两个栈s1,s2。
入队规则: 入队只向s1入队
出队规则:看s2有没有值,有的话,直接出即可。
如果s2没有值,将s1里面的值全部颠倒放入s2中,然后再从s2出队
两个栈实现一个队列的结构体定义:
//用两个栈模拟实现的结构体
typedef struct Two_stack_queue
{
Stack s1;
Stack s2;
}Two_stack_queue ,*PTwo_stack_queue;
入队:
//入队 只往s1入栈
bool My_Push(PTwo_stack_queue tsq, ELEM_TYPE val)
{
return Push(&tsq->s1, val);
}
出队
//出队 还需要一个输出参数,帮助将出队的值带出来
bool My_Pop(PTwo_stack_queue tsq, ELEM_TYPE* reval)
{
assert(ts