利用两个栈实现一个队列思路是这样的. 首先这个队列包含两个栈, 然后一个栈用来入队列, 一个栈用来出队列
typedef struct QueBy2Stack
{
SeqStack input;
SeqStack output;
}QueBy2Stack;
1. 初始化
void QueBy2StackInit(QueBy2Stack* stack)
{
if(stack == NULL)
{
return;//非法输入
}
SeqStackInit(&(stack -> input));
SeqStackInit(&(stack -> output));
}
2. 入队列
void QueBy2StackPush(QueBy2Stack* stack, SeqStackType value)
{
if(stack == NULL)
{
return;//非法输入
}
SeqStackType top_value;
while(stack -> output.size > 0)
{
SeqStackGetFront(&(stack -> output), &top_value);
SeqStackPush(&(stack -> input), top_value);
SeqStackPop(&(stack -> output));
}
SeqStackPush(&(stack -> input), value);
}
3. 出队列
void QueBy2StackPop(QueBy2Stack* stack)
{
if(stack == NULL)
{
return;//非法输入
}
//把 input 里面的元素全部倒腾到 output 中
SeqStackType top_value;
while(stack -> input.size > 0)
{
SeqStackGetFront(&(stack -> input), &top_value);
SeqStackPush(&(stack -> output), top_value);
SeqStackPop(&(stack -> input));
}
//把 output 中的元素出栈
SeqStackPop(&(stack -> output));
}
4. 取栈顶元素
int QueBy2StackTop(QueBy2Stack*stack, SeqStackType* value)
{
if(stack == NULL)
{
return -1;//非法输入
}
if(stack -> input.size == 0 && stack -> output.size ==0)
{
return 0;//空栈
}
SeqStackType top_value;
while(stack -> input.size > 0)
{
SeqStackGetFront(&(stack -> input), &top_value);
SeqStackPush(&(stack -> output), top_value);
SeqStackPop(&(stack -> input));
}
SeqStackGetFront(&(stack -> output), value);
return 1;
}