用两个队列实现一个栈

来源:互联网 发布:java面试宝典pdf 编辑:程序博客网 时间:2024/06/10 21:32
复制代码
//前提已知typedef struct queue{        int queuesize;        int head, tail;        int *q;}Queue;void InitQueue(Queue *q);void EnQueue(Queue *q, int key);int DeQueue(Queue *q);
int SizeOfQueue(Queue *q);
int IsQueueEmpty(Queue *q);int IsQueueFull(Queue *q);
复制代码

实现一

思路

    q1是专职进出栈的,q2只是个中转站

  • 入栈:直接入队列q1即可
  • 出栈:把q1的除最后一个元素外全部转移到队q2中,然后把刚才剩下q1中的那个元素出队列。之后把q2中的全部元素转移回q1中

图示

   

参考代码

复制代码
void Push(Queue *q1, Queue *q2, int k){        EnQueue(q1, k);}int  Pop(Queue *q1, Queue *q2){    int tmp;    if(IsQueueEmpty(q1) == 1)    {       printf("Stack Empty!\n");    }    else    {        while(SizeOfQueue(q1) != 1)        {            EnQueue(q2, DeQueue(q1));        }        tmp = DeQueue(q1);        while(IsQueueEmpty(q2) == 0)        {            EnQueue(q1, DeQueue(q2));        }        return tmp;    }} 
复制代码

实现二

思路

    q1是专职进出栈的,q2只是个中转站。元素集中存放在一个栈中,但不是指定(q1 或 q2)。

    定义两个指针:pushtmp:指向专门进栈的队列q1; tmp:指向临时作为中转站的另一个栈q2

  • 入栈:直接入pushtmp所指队列即可
  • 出栈:把pushtmp的除最后一个元素外全部转移到队列tmp中,然后把刚才剩下q1中的那个元素出队列

比较

    实现二,出栈后就不用转移回原来的栈了(图示最后一步),这样减少了转移的次数。

参考代码

复制代码
void Push(Queue *q1, Queue *q2, int k){        Queue *pushtmp;        if(!IsQueueEmpty(q1))        {            pushtmp = q1;        }        else        {            pushtmp = q2;        }        EnQueue(pushtmp, k);}int  Pop(Queue *q1, Queue *q2){    int tmpvalue;    Queue *pushtmp, *tmp;    if(!IsQueueEmpty(q1))    {        pushtmp = q1;        tmp = q2;    }    else    {        pushtmp = q2;        tmp = q1;    }    if(IsQueueEmpty(pushtmp))    {       printf("Stack Empty!\n");    }    else    {        while(SizeOfQueue(pushtmp) != 1)        {            EnQueue(tmp, DeQueue(pushtmp));        }        tmpvalue = DeQueue(pushtmp);        return tmpvalue;    }} 
复制代码
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 他不想理你了怎么办 陌陌看到信息不回怎么办 qq的文档看不了怎么办 怀孕了分手了怎么办啊 qq节日祝福关了怎么办 微信欠款不还怎么办 qq文件记录删除了怎么办 qq漫游记录删了怎么办 换了新手机微信怎么办 新手机了微信怎么办 微信收藏空间已满怎么办 微信收藏空间满了怎么办 qq步数上传不了怎么办 qq发送的文件失效了怎么办 苹果手机微信数据损坏怎么办 微信文件被清理怎么办 老婆与别人聊暧昧话题怎么办 微信不小心删了聊天记录怎么办 当聊天没话题了怎么办 老婆和别人频繁聊天老公怎么办 qq上把人屏蔽了怎么办 注册微信验证码发不出去怎么办 两个人在一起没有话题怎么办 两个人聊天没话题怎么办 qq邮箱限制信用卡账单怎么办 和朋友聊天没话题怎么办 跟朋友聊天没话题怎么办 和朋友聊天找不到话题怎么办 qq加好友忽略了怎么办 微信加好友收不到验证消息怎么办 陌陌距离乱了怎么办 qq不能点赞了怎么办 快递发货地址写错了怎么办 订的海鲜不发货怎么办 拉人进群频繁了怎么办 qq群邀请过于频繁怎么办 qq一直被拉进群怎么办 qq号被冻结解封不了怎么办 2018qq自动进群怎么办 手机视频传到电脑倒着怎么办 qq群图片过期了怎么办