利用两个栈实现一个队列思路是这样的. 首先这个队列包含两个栈, 然后一个栈用来入队列, 一个栈用来出队列
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;
}