题目:用两个堆栈实现一个队列。实现队列的两个函数appendTail和deleteHead,分别完成在队列尾部插入结点和在队列头部删除节点的功能。
实现思路:内置两个stack变量stack1和stack2,然后插入元素时,将元素push到stack1中。若要删除头结点,则检验stack2是否为空,若不为空,则s2顶部的结点就是所谓队列的头结点,否则,将stack1中的所有结点push进stack2中,这个过程很关键,实现的方法是依次将stack1栈顶的元素插入到stack2中。然后再将stack2中的栈顶元素delete,返回它的值head。
代码实现为:
#include<iostream>
#include<stack>
using namespace std;
class CQueue
{
public:
CQueue(void){};
~CQueue(void){};
void appendTail(const int &data)
{
stack1.push(data);
}
int deleteHead()
{
int head=-1;
if(!stack2.empty())
{
head=stack2.top();
stack2.pop();
}
else
{
while(!stack1.empty())
{
stack2.push(stack1.top());
stack1.pop();
}
if(!stack2.empty())
{
head=stack2.top();
stack2.pop();
}
else
{
cout<<"queue is empty,head=";
}
}
return head;
}
private:
stack<int> stack1;
stack<int> stack2;
};
int main()
{
CQueue queue;
queue.appendTail(1);
queue.appendTail(2);
cout<<queue.deleteHead()<<endl;
queue.appendTail(3);
cout<<queue.deleteHead()<<endl;
cout<<queue.deleteHead()<<endl;
cout<<queue.deleteHead()<<endl;
return 0;
}