c语言用数组实现双栈,C语言 双栈模拟出队

用两个栈来模拟出队顺序

栈的出队顺序为FILO

队的出队顺序为FIFO

那么用两个栈来实现队的FIFO顺序如何实现呢?

看代码以及伪代码讲解

#include

#include

#include

#define MAXSIZE 5

typedef struct stack

{

int data[MAXSIZE];

int top;

}S;

bool isEmpty(S *s)

{

if(s->top==-1)

return true;

else

return false;

}

void Push(S *s,int e){

s->data[++s->top]=e;

}

int Pop(S *s){

int e=s->data[s->top--];

return e;

}

/*

//当有元素进入要压栈进入s1时

当s1是满栈的时候

如果s2不是空栈

不可以对s1压栈,否则出队错误

当s2是空栈的时候

把s1的元素全部弹栈压入s2

再把要压入的元素压入s1

s1不是满栈的时候

s2为空

直接将元素压入s1

*/

/*

//当元素要从s2模拟出队的时候

if s2不为空的时候

s2直接弹栈

else

s1为空

总体为空栈

return false

s1有元素的时候

s1全部元素按出栈顺序压入s2

s2再一一弹栈

*/

bool EnQueue(S *s1,S *s2,int x){

if(s1->top==MAXSIZE-1)

{

if(!isEmpty(s2))

return false;

else

{

while(!isEmpty(s1))

{

int element=Pop(s1);

Push(s2,element);

}

Push(s1,x);

return true;

}

}

else

{

Push(s1,x);

return true;

}

}

bool DeQueue(S *s1,S *s2,int number){

if(!isEmpty(s2)){

number=s2->data[s2->top--];

printf("%d\t",number);

return true;

}

else{

if(isEmpty(s1)){

printf("对空,无法输出\n");

return false;

}

else{

while(!isEmpty(s1)){

int element=Pop(s1);

Push(s2,element);

}

number=Pop(s2);

return number;

}

}

}

int main(){

S *s1=(S *)malloc(sizeof(S));

S *s2=(S *)malloc(sizeof(S));

s1->top=-1;

s2->top=-1;

int m=0;

while(m<5){

EnQueue(s1,s2,m++);

}

for(int i=0;i

printf("%d\t",s1->data[i]);

}

int number;

while((s2->top)>=-1)

DeQueue(s1,s2,number);

}

来源:https://www.cnblogs.com/oldfish123/p/12940669.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值