c++中如何使用两个栈实现一个队列

c++中如何使用两个栈实现一个队列,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

成都创新互联是一家专注于成都网站建设、成都做网站与策划设计,荣成网站建设哪家好?成都创新互联做网站,专注于网站建设十多年,网设计领域的专业建站公司;建站业务涵盖:荣成等地区。荣成做网站价格咨询:028-86922220

一、栈

栈:只允许在固定的一端进行插入和删除元素操作。进入和删除操作的一端称为栈顶,另一端为栈底。

栈特性:后进先出

栈功能:将数据从一个序列改变到另一种序列

二、队列

1.只允许在一端进行插入数据,在另一端删除数据

2.进行插入操作的一端称为队尾(入队列)

3.进行删除操作的一端称为队头(出队列)

4.队列具有先进先出的特性

使用两个栈实现一个队列

想法:定义一个结构体里面有两个栈,一个专门用于入数据、一个专门用于出数据,将数据先入栈到栈1中,在将数据搬移到栈2,此过程是:当满足条件栈1不为空,栈2为空时,将栈1的栈顶数据先拿出来放进栈2,这样以此类推,最后再将栈2的数据pop就可以实现一个队列

具体代码如下:

#pragma once#include "stack1.h"#include typedef struct SQueue{  Stack stack1;//入数据  Stack stack2;//出数据}SQueue; //初始化void Init(SQueue *pSQ){  Stack *p1, *p2;  p1 = &(pSQ->stack1);  p2 = &(pSQ->stack2);  StackInit(p1);  StackInit(p2);}//入栈void Push(SQueue *pSQ, SDataType data){  Stack *p1, *p2;  p1 = &(pSQ->stack1);  p2 = &(pSQ->stack2);  StackPush(p1, data);} //出栈void Pop(SQueue *pSQ){  Stack *p1, *p2;  p1 = &(pSQ->stack1);  p2 = &(pSQ->stack2);  SDataType data;   if(StackIsEmpty(p2))  {    while(!StackIsEmpty(p1))    {      data=StackTop(p1);      StackPop(p1);      StackPush(p1, data);    }  }     StackPop(p2);} SDataType Front(SQueue *pSQ){  Stack *p1, *p2;  p1 = &(pSQ->stack1);  p2 = &(pSQ->stack2);  SDataType data;   if (StackIsEmpty(p2))  {    while (!StackIsEmpty(p1))    {      data = StackTop(p1);      StackPop(p1);      StackPush(p1, data);    }  }  return StackTop(p2);}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


文章标题:c++中如何使用两个栈实现一个队列
本文URL:http://hbruida.cn/article/igsogd.html