1.队列是先入的先出,FIFO
2.栈是先入的后出,后入的先出,FILO,LIFO
3.因为FILO,取出栈里面的数据是要从顶取得,即栈所提供的top();这个接口,删除这个数据用pop();接口.
4:
刚开始是两个空的栈,往stack1存入数据,利用stack1.push();接口
然后把stack1里面的数据挨个stack1.pop();出来,用stack2.push();
接口再次存入stack2里面,这时数据在stack2便如图中第二个框一样,在T deleteHead();函数中调用stack2.top();将数据取出再利用stack2.pop();将数据删除就形象的实现了队列的先入先出,如果有新数据要插入队列,stack2不空就放在stack1里面,stack2空就直接放在stack2中删除即可。
5.看具体代码:
#pragma once
#include<iostream>
#include<stdlib.h>
#include<stack>
using namespace std;
template <typename T>
class Myqueque //fifo
{
public:
Myqueque(void);
~Myqueque(void);
private:
stack<T> stack1;
stack<T> stack2;
void appendTail(const T& node)
{
stack1.push(node);
}
T deleteHead();
};
template <typename T>
void Myqueque<T>::appendTail(const T& node);
template <typename T>
T Myqueque<T>::deleteHead()
{
if (stack2.size() <= 0)
{
while (stack1.size() > 0)
{
T& data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
else
{
T head = stack2.top();
stack2.pop();
return head;
}
}