用俩个栈实现一个队列,实现它的俩个函数appendTail和deleteHead。分别完成在队列尾部插入节点和在队列头部删除节点的功能
思路:栈是先进后出的,队列是先进先出的,所以要想让先压进栈的元素先出来,只通过一个栈是实现不了的,但我们可以通过将栈1的数据取出再压入栈2中,这样在栈1底部的(也就是先压栈的)数据就会到栈2的顶部,再将其取出,就可以实现队列先进先出了。
#include <stdio.h>
#include <iostream>
#include <stack>
using namespace std;
class CQueue
{
public:
CQueue() = default;
~CQueue() = default;
void appendTail(const char&node) //队尾插入
{
stack1.push(node);
}
char deleteHead() //队首删除
{
if (stack2.size() <= 0)
{
while (stack1.size() > 0)
{
char & data = stack1.top();
stack1.pop();
stack2.push(data);
}
}
if (stack2.size() == 0)
throw std::exception("queue is empty");
char head = stack2.top();
stack2.pop();
return head;
}
int getStackSize()
{
return stack2.size();
}
private:
stack<char> stack1;
stack<char> stack2;
};
int main(int argc,char *argv[])
{
CQueue q1;
for (char c = 'a'; c < 'z'+1; c++)
{
q1.appendTail(c);
}
do //只有执行一次deleteHead时数据才会从stack1转入stack2
{
cout << q1.deleteHead() << endl;
} while (q1.getStackSize());
return 0;
}