首页 > 代码库 > 将两个栈变成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个队列