1 #include2 3 typedef int Status; 4 #define DEFAULT_SIZE 0 5 #define SUCCESS 1 6 #define OVER_FLOW 0 7 8 //队列的类模板 9 template<class ElemType> 10 class SeqQueue { 11 protected: 12 int front, rear; //队头队尾指针(数组下标) 13 int maxSize; //队列的容量 14 ElemType* elems; //元素的存储空间(ElemType类型的数组,elems数组名) 15 public: 16 SeqQueue(int size = DEFAULT_SIZE); //构造函数 17 virtual ~SeqQueue(); //析构函数 18 int GetLength() const; //求队列长度(函数名后跟const是为了使用此函数时不改变成员变量) 19 bool IsEmpty() const; //判断是否为空 20 void Clear(); //清空 21 void Traverse(void(*Visit)(const ElemType&)) const; //遍历队列 22 Status DelQueue(ElemType& e) const; //出队 23 Status GetHead(ElemType& e) const; //取队头操作 24 Status EnQueue(const ElemType e); //入队操作 25 }; 26 27 template <class ElemType> //构造函数实现 28 SeqQueue ::SeqQueue(int size) 29 { 30 elems = new ElemType[size]; 31 maxSize = size; 32 front = rear = 0; 33 } 34 35 template <class ElemType> //析构函数实现 36 SeqQueue ::~SeqQueue() 37 { 38 delete[] elems; 39 } 40 41 template <class ElemType> //求队列长度函数实现 42 int SeqQueue ::GetLength() const 43 { 44 return (rear - front + maxSize) % maxSize; //此处建议画图自己领悟,设计很巧妙 45 } 46 47 template <class ElemType> //判断队列是否为空函数实现 48 bool SeqQueue ::IsEmpty() const 49 { 50 if(front == rear){return true;}
else {return false;}
51 } 52 53 template <class ElemType> //将队列清空函数实现 54 void SeqQueue::Clear() 55 { 56 rear = front = 0; 57 } 58 59 template <class ElemType> //遍历队列函数实现 60 void SeqQueue ::Traverse(void (*Visit)(const ElemType&)) const 61 { 62 for (int i = front; i != rear; i = (i + 1) % maxSize) 63 { 64 (*Visit)(elems[i]); 65 } 66 } 67 68 template <class ElemType> //出队函数实现 69 Status SeqQueue ::DelQueue(ElemType& e) const 70 { 71 if (IsEmpty()) 72 return true; 73 else 74 { 75 e = elems[front]; 76 front = (front + 1) % maxSize; 77 } 78 } 79 80 template <class ElemType> //取队头操作函数实现 81 Status SeqQueue ::GetHead(ElemType& e) const 82 { 83 if (IsEmpty()) 84 return false; 85 else 86 { 87 e = elems[front]; 88 return true; 89 } 90 } 91 92 template <class ElemType> //入队函数实现 93 Status SeqQueue ::EnQueue(const ElemType e) 94 { 95 if ((rear + 1) % maxSize == front) //队列已满,返回错误 96 return OVER_FLOW; 97 else { 98 elems[rear] = e; 99 rear = (rear + 1) % maxSize; 100 return SUCCESS; 101 } 102 }
return false;
Original: https://www.cnblogs.com/JIAcheerful/p/16152925.html
Author: 云霄雨霁
Title: 循环队列
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622685/
转载文章受原作者版权保护。转载请注明原作者出处!