两个栈实现一个队列

本文介绍了一种使用两个栈来模拟队列行为的方法。通过定义栈空的判断条件及入栈、出栈操作,实现了栈S1作为入队列,栈S2作为出队列的功能。当需要出队时,将S1的所有元素转移到S2,再从S2出栈即可得到队列的元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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负责元素出队列。 */ } 

转载于:https://www.cnblogs.com/xwdreamer/archive/2011/01/03/2297051.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值