今天,我们一起实现一个顺序队列,通过它来熟练一下C++编程。
SeqQueue.h具体内容如下:
template<typename Type> class SeqQueue{
public:
SeqQueue(int sz) :m_nrear(0), m_nfront(0), m_ncount(0), m_nMaxSize(sz){
m_pelements = new Type[sz];
if (m_pelements == NULL){
cout << "Application Error!" << endl;
exit(1);
}
}
~SeqQueue(){
delete[] m_pelements;
}
void MakeEmpty(); //make the queue empty
bool IsEmpty();
bool IsFull();
bool Append(const Type item); //insert data
Type Delete(); //delete data
Type Get(); //get data
void Print(); //print the queue
private:
int m_nrear;
int m_nfront;
int m_ncount;
int m_nMaxSize;
Type *m_pelements;
};
template<typename Type> void SeqQueue<Type>::MakeEmpty(){
this->m_ncount = 0;
this->m_nfront = 0;
this->m_nrear = 0;
}
template<typename Type> bool SeqQueue<Type>::IsEmpty(){
return m_ncount == 0;
}
template<typename Type> bool SeqQueue<Type>::IsFull(){
return m_ncount == m_nMaxSize;
}
template<typename Type> bool SeqQueue<Type>::Append(const Type item){
if (IsFull()){
cout << "The queue is full!" << endl;
return 0;
}
m_pelements[m_nrear] = item;
m_nrear = (m_nrear + 1) % m_nMaxSize;
m_ncount++;
return 1;
}
template<typename Type> Type SeqQueue<Type>::Delete(){
if (IsEmpty()){
cout << "There is no element!" << endl;
exit(1);
}
Type temp = m_pelements[m_nfront];
m_nfront = (m_nfront + 1) % m_nMaxSize;
m_ncount--;
return temp;
}
template<typename Type> Type SeqQueue<Type>::Get(){
if (IsEmpty()){
cout << "There is no element!" << endl;
exit(1);
}
return m_pelements[m_nfront];
}
template<typename Type> void SeqQueue<Type>::Print(){
cout << "front";
for (int i = 0; i < m_ncount; i++){
cout << "--->" << m_pelements[(m_nfront + i + m_nMaxSize) % m_nMaxSize];
}
cout << "--->rear" << endl << endl << endl;
}
main.cpp具体内容如下:
#include <iostream>
using namespace std;
#include "SeqQueue.h"
int main(){
SeqQueue<int> queue(10);
int init[10] = { 1, 6, 9, 0, 2, 5, 8, 3, 7, 4 };
for (int i = 0; i < 5; i++){
queue.Append(init[i]);
}
queue.Print();
cout << queue.Delete() << endl;
queue.Print();
for (int i = 5; i < 10; i++){
queue.Append(init[i]);
}
queue.Print();
cout << queue.Get() << endl;
queue.MakeEmpty();
queue.Print();
queue.Append(1);
queue.Print();
cin.get();
return 0;
}
运行效果如图1所示:
图1 运行效果