两个栈实现一个队列,并实现头删和尾删
首先分析下
当只需要尾插入时,只需要将数插入stack1,当需要头删时,需要将stack1中的数全部push到stack2中,然后在对stack2进行pop即可
代码
Myqueue.h
#include<iostream>
#include<stack>
using namespace std;
template<typename T>
class MyQueue
{
public:
MyQueue()
{}
~MyQueue()
{}
void appendTail(const T& value)
{
stack1.push(value);
}
T deleteHead()
{
if (stack2.size()<=0)
{
while (stack1.size()>0)
{
T& data=stack1.top();
stack1.pop();
stack2.push(data);
}
}
if(stack2.size()==0)
cout<<"队列为空"<<endl;
return NULL;
T head=stack2.top();
stack2.pop();
return head;
}
void print()
{
while (stack1.size())
{
stack2.push(stack1.top());
stack1.pop();
}
while (stack2.size())
{
cout<<stack2.top()<<" ";
stack2.pop();
}
cout<<endl;
}
private:
stack<T> stack1;
stack<T> stack2;
};
void test()
{
MyQueue<int> q;
q.appendTail(1);
q.appendTail(2);
q.appendTail(3);
q.appendTail(4);
q.appendTail(5);
q.print();
}
void test2()
{
MyQueue<int> q;
q.deleteHead();
q.deleteHead();
q.print();
}
test.c
#include "MyQueue.h"
int main()
{
test();
test2();
system("pause");
return 0;
}