码迷,mamicode.com
首页 > 其他好文 > 详细

将两个栈变成1个队列

时间:2016-09-22 23:39:30      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:

参考博客: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个队列

标签:

原文地址:http://www.cnblogs.com/hellochennan/p/5898267.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!