将两个栈变成1个队列
参考博客:http://www.cnblogs.com/kaituorensheng/archive/2013/03/02/2939690.html
1 //前提已知: 2 struct Stack 3 { 4 int top; //栈顶指针 5 int stacksize;//栈的大小 6 int *s; //栈底指针 7 }; 8 void InitStack(Stack *s); 9 void Push(Stack *s, int k); 10 int Pop(*s); 11 int IsStackEmpty(*s); 12 int IsStackFull(*s);
思路
s1是入栈的,s2是出栈的。
- 入队列:直接压入s1即可
- 出队列:如果s2不为空,把s2中的栈顶元素直接弹出;否则,把s1的所有元素全部弹出压入s2中,再弹出s2的栈顶元素
1 void EnQueue(stack *s1,stack *s2,k){ 2 Push(s1,k) //直接将元素压入s1 3 } 4 5 6 int DeQuene(stack *s1,stack *s2){ 7 if(IsStackEmpty(s2)==1){ //s2若为空,先将s1的元素压入s2,再将s2的元素压入s1, 8 while(IsStackEmpty(s1)==0){ 9 Push(s1,Pop(s2)) 10 } 11 } 12 if(IsStackEmpty(s2)!=1)) //s2若不为空,直接将S2的栈顶元素弹出 13 return Pop(s2) 14 }
厚积薄发,行胜于言@飞鸟各投林