怎么利用代码做网站,写作网站六大神书,WordPress实现登陆提醒,wordpress主题演示站点1#xff1a;如何只使用stack实现queue呢#xff1f;我们知道stack是先进后出的#xff08;FIFO#xff09;#xff0c;而queue是先进先出的#xff08;FIFO#xff09;。也就是说#xff0c;stack进行了一次反向。如果进行两次反向#xff0c;就能实现queue的功能如何只使用stack实现queue呢我们知道stack是先进后出的FIFO而queue是先进先出的FIFO。也就是说stack进行了一次反向。如果进行两次反向就能实现queue的功能所以我们需要两个stack实现queue。 下面是具体思路。 假设有两个栈A和B且都为空。可以认为栈A为提供入队列的功能栈B提供出队列的功能。 1如果栈B不为空直接弹出栈B的数据。 2如果栈B为空则依次弹出栈A的数据放入到栈B中再弹出栈B的数据。 代码如下 #include stdafx.h
#includemalloc.h
#include iostream
#include assert.h
using namespace std;/*单链表的节点data表示节点的数据域next指向下一个节点*/
class MyData
{
public:MyData() :data(0), next(NULL) {};//默认构造函数这样表示后主体中不用再写这个函数了MyData(int value) :data(value), next(NULL) {};//带参数的构造函数int data;//数据域MyData *next;//下一个节点
};/*表示栈的定义其中public成员top表示栈顶由于不能直接操作栈底因此这里没有定义栈底的指针。
在默认构造函数中把栈顶指针top置空表示此时栈为空栈。*/
class MyStack
{
public:MyStack() :top(NULL) {};//默认构造函数void push(MyData data);//进栈void pop(MyData *pData);//出栈bool IsEmpty();//是否为空栈MyData *top;//栈顶
};class MyQueue
{
public:void enqueue(MyData data);//入队void dequeue(MyData data);//出队bool IsEmpty();//是否为空队
private:MyStack s1;//用于入队MyStack s2;//用于出队
};//进栈
void MyStack::push(MyData data)
{MyData *pData NULL;pData new MyData(data.data);//生成新节点pData-next top;top pData;
}//判断栈是否为空
bool MyStack::IsEmpty()
{return(top NULL);//如果top为空则返回1否则返回0
}//出栈
void MyStack::pop(MyData *data)//将删除的节点保存到data中
{if (IsEmpty())//如果栈为空直接返回{return;}data-data top-data;//给传出的参数赋值MyData *p top;//临时保存原栈顶节点top top-next;//移动栈顶指向下一个节点delete p;//释放原栈顶节点内存
}//入队
void MyQueue::enqueue(MyData data)
{s1.push(data);//只对s1进行操作
}//出队
void MyQueue::dequeue(MyData data)
{MyData temp(0);//局部变量用于临时存储if (s2.IsEmpty()){while (!s1.IsEmpty())//如果s2为空把s1的所有元素push到s2中{s1.pop(temp);//弹出s1的元素s2.push(temp);//压入s2中}}if (!s2.IsEmpty()){s2.pop(data);//此时s2不为空则弹出s2的栈顶元素}
}//队列判空
bool MyQueue::IsEmpty()
{//如果两个栈都为空则返回1否则返回0return(s1.IsEmpty() s2.IsEmpty());
}
int main()
{MyData data(0);//定义一个节点MyQueue q;q.enqueue(MyData(1));q.enqueue(MyData(2));q.enqueue(MyData(3));q.dequeue(data);cout dequeue data.data endl;q.dequeue(data);cout dequeue data.data endl;q.dequeue(data);cout dequeue data.data endl;cout IsEmpty: q.IsEmpty() endl;return 0;
} View Code 运行结果 转载于:https://www.cnblogs.com/lovemi93/p/7607203.html