首页 > 代码库 > 将两个栈变成1个队列
将两个栈变成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 }
将两个栈变成1个队列
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。