顺序队列

  今天,我们一起实现一个顺序队列,通过它来熟练一下C++编程。

SeqQueue.h具体内容如下:

[cpp]  view plain copy
  1. template<typename Type> class SeqQueue{  
  2. public:  
  3.     SeqQueue(int sz) :m_nrear(0), m_nfront(0), m_ncount(0), m_nMaxSize(sz){  
  4.         m_pelements = new Type[sz];  
  5.         if (m_pelements == NULL){  
  6.             cout << "Application Error!" << endl;  
  7.             exit(1);  
  8.         }  
  9.     }  
  10.     ~SeqQueue(){  
  11.         delete[] m_pelements;  
  12.     }  
  13.     void MakeEmpty();               //make the queue empty  
  14.     bool IsEmpty();  
  15.     bool IsFull();  
  16.     bool Append(const Type item);   //insert data  
  17.     Type Delete();                  //delete data  
  18.     Type Get();                     //get data  
  19.     void Print();                   //print the queue  
  20.   
  21. private:  
  22.     int m_nrear;  
  23.     int m_nfront;  
  24.     int m_ncount;  
  25.     int m_nMaxSize;  
  26.     Type *m_pelements;  
  27.   
  28. };  
  29.   
  30. template<typename Type> void SeqQueue<Type>::MakeEmpty(){  
  31.     this->m_ncount = 0;  
  32.     this->m_nfront = 0;  
  33.     this->m_nrear = 0;  
  34. }  
  35.   
  36. template<typename Type> bool SeqQueue<Type>::IsEmpty(){  
  37.     return m_ncount == 0;  
  38. }  
  39.   
  40. template<typename Type> bool SeqQueue<Type>::IsFull(){  
  41.     return m_ncount == m_nMaxSize;  
  42. }  
  43.   
  44. template<typename Type> bool SeqQueue<Type>::Append(const Type item){  
  45.     if (IsFull()){  
  46.         cout << "The queue is full!" << endl;  
  47.         return 0;  
  48.     }  
  49.     m_pelements[m_nrear] = item;  
  50.     m_nrear = (m_nrear + 1) % m_nMaxSize;  
  51.     m_ncount++;  
  52.     return 1;  
  53. }  
  54.   
  55. template<typename Type> Type SeqQueue<Type>::Delete(){  
  56.     if (IsEmpty()){  
  57.         cout << "There is no element!" << endl;  
  58.         exit(1);  
  59.     }  
  60.     Type temp = m_pelements[m_nfront];  
  61.     m_nfront = (m_nfront + 1) % m_nMaxSize;  
  62.     m_ncount--;  
  63.     return temp;  
  64. }  
  65.   
  66. template<typename Type> Type SeqQueue<Type>::Get(){  
  67.     if (IsEmpty()){  
  68.         cout << "There is no element!" << endl;  
  69.         exit(1);  
  70.     }  
  71.     return m_pelements[m_nfront];  
  72. }  
  73.   
  74. template<typename Type> void SeqQueue<Type>::Print(){  
  75.     cout << "front";  
  76.     for (int i = 0; i < m_ncount; i++){  
  77.         cout << "--->" << m_pelements[(m_nfront + i + m_nMaxSize) % m_nMaxSize];  
  78.     }  
  79.     cout << "--->rear" << endl << endl << endl;  
  80. }  
main.cpp具体内容如下:

[cpp]  view plain copy
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. #include "SeqQueue.h"  
  5.   
  6. int main(){  
  7.     SeqQueue<int> queue(10);  
  8.     int init[10] = { 1, 6, 9, 0, 2, 5, 8, 3, 7, 4 };  
  9.     for (int i = 0; i < 5; i++){  
  10.         queue.Append(init[i]);  
  11.     }  
  12.     queue.Print();  
  13.   
  14.     cout << queue.Delete() << endl;  
  15.     queue.Print();  
  16.   
  17.     for (int i = 5; i < 10; i++){  
  18.         queue.Append(init[i]);  
  19.     }  
  20.     queue.Print();  
  21.   
  22.     cout << queue.Get() << endl;  
  23.   
  24.     queue.MakeEmpty();  
  25.     queue.Print();  
  26.   
  27.     queue.Append(1);  
  28.     queue.Print();  
  29.     cin.get();  
  30.   
  31.     return 0;  
  32. }  
运行效果如图1所示:

图1 运行效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值