#include "stdafx.h"
#include <queue>
#include <iostream>
using namespace std;
template <typename T> class CStack
{
public:
CStack(void);
~CStack(void);
void appendTail(const T& node);
T deleteHead();
private:
queue<T> queue1;
queue<T> queue2;
};
template <typename T> CStack<T>::CStack(void)
{
}
template <typename T> CStack<T>::~CStack(void)
{
}
template <typename T>void CStack<T>::appendTail(const T& element)
{
queue1.push(element);
}
template <typename T>T CStack<T>::deleteHead()
{
if(queue1.size()==1)
{
T& data=queue1.front();
queue1.pop();
return data;
}
if(queue2.size()==1)
{
T& data=queue2.front();
queue2.pop();
return data;
}
if(queue1.size()>1 && queue2.size()==0)
{
while(queue1.size()>1)
{
T& data=queue1.front();
queue1.pop();
queue2.push(data);
}
T last=queue1.front();
queue1.pop();
return last;
}
if(queue2.size()>1 && queue1.size()==0)
{
while(queue2.size()>1)
{
T& data=queue2.front();
queue2.pop();
queue1.push(data);
}
T last=queue2.front();
queue2.pop();
return last;
}
if(queue1.size()==0 && queue2.size()==0)
throw new exception("stack is empty");
}
void Test(char actual, char expected)
{
if(actual == expected)
printf("Test passed.\n");
else
printf("Test failed.\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
CStack<char> cstack;
cstack.appendTail('a');
cstack.appendTail('b');
cstack.appendTail('c');
char head = cstack.deleteHead();
Test(head, 'c');
head = cstack.deleteHead();
Test(head, 'b');
cstack.appendTail('d');
head = cstack.deleteHead();
Test(head, 'd');
cstack.appendTail('e');
head = cstack.deleteHead();
Test(head, 'e');
head = cstack.deleteHead();
Test(head, 'a');
return 0;
}
用两个队列实现一个栈
最新推荐文章于 2024-04-29 17:26:49 发布