- #include<stdio.h>
- bool STACK_EMPTY(int &top)
- {
- if(top==0)
- return true;
- else
- return false;
- }
- void PUSH(int *S,int x,int &top)
- {
- top=top+1;
- S[top]=x;
- }
- int POP(int *S,int &top)
- {
- if(STACK_EMPTY(top))
- return -1;
- else
- top=top-1;
- return S[top+1];
- }
- void Transfer(int *S1,int &top1,int *S2,int &top2)//从栈S1中将元素转移到栈S2中
- {
- int p;
- while(top1>=1)
- {
- p=POP(S1,top1);
- PUSH(S2,p,top2);
- }
- }
- void main()
- {
- int S1[10],S2[10];
- int top1=0,top2=0;
- //压栈S1,相当于进队列。
- PUSH(S1,1,top1);
- PUSH(S1,2,top1);
- PUSH(S1,3,top1);
- PUSH(S1,4,top1);
- PUSH(S1,5,top1);
- //如果要出队列,则需要将栈S1中的元素全部转移到栈S2中,然后让栈S2出栈的元素就是队列的元素。
- Transfer(S1,top1,S2,top2);
- int p=POP(S2,top2);
- printf("%d/n",p);
- /*
- 如果一直出栈则不需要再次转移,但是如果又有元素需要进队列,则需要再次进行Transfer()操作
- S1负责元素进队列,S2负责元素出队列。
- */
- }
本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2011/01/03/2297051.html,如需转载请自行联系原作者