顺序队列

来源:互联网 发布:男装破洞牛仔裤淘宝网 编辑:程序博客网 时间:2024/04/28 23:28

    今天,我们一起实现一个顺序队列,通过它来熟练一下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 emptybool IsEmpty();bool IsFull();bool Append(const Type item);   //insert dataType Delete();                  //delete dataType Get();                     //get datavoid Print();                   //print the queueprivate: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 运行效果

0 0