您的位置:首页 > 其它

两个栈实现一个队列

2011-01-03 20:33 267 查看
#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负责元素出队列。
*/
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: