问题描述:对于循环队列来讲,若是知道队头指针和队列中元素个数,则能够计算出队尾指针。也就是说,能够用队列中元素个数代替队尾指针。设计出这种循环队列的进队、出队、判队空和求队中元素个数的算法。ios
示例代码:算法
#include <iostream> using namespace std; const int MaxSize = 5; //队大小 template <typename T> class SqQueueClass2 //循环队列类模板 { T *data; int front; //队头 int count; //队中元素个数 public: SqQueueClass2(); //构造函数,用于队列初始化 ~SqQueueClass2(); //析构函数,用于释放空间 bool QueueEmpty(); //判断队列是否为空 bool enQueue(T e); //进队列算法 bool deQueue(T &e); //出队列算法 int GetCount(); //求队列中元素个数 }; template <typename T> SqQueueClass2<T>::SqQueueClass2() //构造函数,用于队列初始化 { data = new T[MaxSize]; front = 0; count = 0; } template <typename T> SqQueueClass2<T>::~SqQueueClass2() //析构函数,用于释放空间 { delete[] data; } template <typename T> bool SqQueueClass2<T>::QueueEmpty() //判断队列是否为空 { return (count == 0); } template <typename T> bool SqQueueClass2<T>::enQueue(T e) //进队列算法 { int rear1; rear1 = (front + count) % MaxSize; if (count == MaxSize) return false;//队满上溢出 rear1 = (rear1 + 1) % MaxSize; data[rear1] = e; count++; return true; } template <typename T> bool SqQueueClass2<T>::deQueue(T &e)//出队列算法 { if (count == 0) return false; //队空下溢出 front = (front + 1) % MaxSize; e = data[front]; count--; return true; } template <typename T> int SqQueueClass2<T>::GetCount() //求队列中元素个数 { return count; } void main() { SqQueueClass2<char> sq; //定义一个字符顺序队sq char e; cout << "创建一个空队sq\n"; cout << "队sq" << (sq.QueueEmpty()?"空":"不空") << endl; cout << "元素a进队\n"; sq.enQueue('a'); cout << "元素b进队\n"; sq.enQueue('b'); cout << "元素c进队\n"; sq.enQueue('c'); cout << "元素d进队\n"; sq.enQueue('d'); cout << "元素e进队\n"; sq.enQueue('e'); cout << "队sq" << (sq.QueueEmpty()?"空":"不空") << endl; cout << "全部元素出队次序:"; while (!sq.QueueEmpty()) //队不空循环 { sq.deQueue(e); //出队元素e cout << e << " "; //输出元素e } cout << endl; cout << "销毁队sq" << endl; }