題目:倆個桟實現一個隊列,請實現它的倆個函數appendTail/deleteHead
算法思路:
入隊:將元素壓入桟s1中;//appendTail
出隊:先判斷s2中是否爲空,如果不爲空,直接彈出棧頂元素;否則,將s1中的元素逐個彈出並壓入桟s2中,把最後一個元素彈出並出隊;//deleteHead
判斷隊列是否爲空(empty()):判斷s1/s2中都沒有元素時,返回true,否則返回false;//Empty
取隊頭元素(top()):先判斷s2中是否爲空,如果不爲空,直接取s2棧頂元素;否則,將s1中的元素逐個彈出並壓入桟s2中,然後取s2的棧頂元素;//Top
倆個桟都爲空,即隊列爲空時的情況;//特殊情況
最後不做入隊、出隊的操作時,只要隊列不爲NULL,就將隊列從隊頭到隊尾打印出來,驗證結果是否如自己所想;//Print
測試用例:1、數據未全部刪除;//Test----->頭到尾1->2->3->4->10->99->65
2、數據全部刪除;//Test1----->頭到尾1->2->3->4->10->99->65
說明:本人使用模板寫的,這樣可以實例化各種類型;
代碼如下:
<span style="font-family:SimSun;font-size:18px;">#include<iostream>
#include<stack>
using namespace std;
template <class T>
class queue
{
public:
queue();
T Top();
bool Empty();
~queue();
void appendTail(const T& _data);
void deleteHead();
void Print();
private:
stack<T> s1;//插入結點的桟
stack<T> s2;//刪除結點的桟/取棧頂元素的桟/打印隊列元素的桟
};
template <class T>
queue<T>::queue()
{}
template <class T>
queue<T>::~queue()
{
while (!Empty())
{
deleteHead();
}
}
template <class T>
T queue<T>::Top()
{
if (Empty())
{
cout << "Top:queue is NULL!" << endl;
return (T)-1;
}
if (s2.empty())
{
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
return s2.top();
}
template <class T>
bool queue<T>::Empty()
{
return (s1.empty() && s2.empty());
}
template <class T>
void queue<T>::appendTail(const T& _data)
{
s1.push(_data);
}
template <class T>
void queue<T>::deleteHead()
{
if (Empty())
{
cout << "deleteHead:queue is NULL!" << endl;
return;
}
if(!s2.empty())
{
s2.pop();
}
else
{
while (!s1.empty())
{
T tmp = s1.top();
s1.pop();
if (!s1.empty())
{
s2.push(tmp);
}
}
}
}
template <class T>
void queue<T>::Print()
{
if (Empty())
{
cout << "Print:queue is NULL!" << endl;
return;
}
while (!Empty())
{
while (!s2.empty())
{
cout << s2.top() << "->";
s2.pop();
}
while (!s1.empty())
{
s2.push(s1.top());
s1.pop();
}
}
cout << endl;
}
void Test()
{
queue<int> q1;
q1.appendTail(1);
q1.appendTail(2);
q1.appendTail(3);
q1.appendTail(4);
q1.deleteHead();
q1.appendTail(10);
q1.appendTail(99);
q1.appendTail(65);
q1.deleteHead();
q1.Print();
}
void Test1()
{
queue<int> q1;
q1.appendTail(1);
q1.appendTail(2);
q1.appendTail(3);
q1.appendTail(4);
q1.deleteHead();
q1.appendTail(10);
q1.appendTail(99);
q1.appendTail(65);
q1.deleteHead();
q1.deleteHead();
q1.deleteHead();
q1.deleteHead();
q1.deleteHead();
q1.Print();
q1.deleteHead();
q1.Print();
q1.deleteHead();
q1.Top();
}
int main()
{
cout << "Test:" << endl;
Test();
cout << "Test1:" << endl;
Test1();
return 0;
}</span>
結果如下: