顺序队列
今天,我们一起实现一个顺序队列,通过它来熟练一下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 运行效果