感谢老师,讲的很认真非常好
1 - 环形队列类模板
#ifndef MYQUEUE_H #define MYQUEUE_H #include "Customer.h" templateclass MyQueue { public: MyQueue(int queueCapacity); //创建队列 virtual ~MyQueue(); //销毁队列 void ClearQueue(); //清空队列 bool QueueEmpty()const;//判空队列 bool QueueFull()const; //判满队列 int QueueLength()const;//队列长度 bool EnQueue(T element); //新元素入队 bool DeQueue(T &element); //首元素出队 void QueueTraverse(); //遍历队列 private: T *m_pQueue; //队列数组指针 int m_iQueueLen;//队列元素个数 int m_iQueueCapacity; //队列数组容量 int m_iHead; //队列头 int m_iTail; //队列尾 }; template MyQueue ::MyQueue(int queueCapacity) { m_iQueueCapacity = queueCapacity; ClearQueue(); m_pQueue = new T[m_iQueueCapacity]; } template MyQueue ::~MyQueue() { delete[]m_pQueue; m_pQueue = NULL; } template void MyQueue ::ClearQueue() { m_iQueueLen = 0; m_iHead = 0; m_iTail = 0; } template bool MyQueue ::QueueEmpty() const { if (m_iQueueLen == 0) return true; else return false; } template bool MyQueue ::QueueFull() const { if (m_iQueueLen == m_iQueueCapacity) return true; else return false; } template int MyQueue ::QueueLength()const { return m_iQueueLen; } template bool MyQueue ::EnQueue(T element) { if (QueueFull()) return false; else { m_pQueue[m_iTail] = element; m_iTail++; m_iTail = m_iTail % m_iQueueCapacity; m_iQueueLen++; return true; } } template bool MyQueue ::DeQueue(T &element) { if (QueueEmpty()) { return false; } else { element = m_pQueue[m_iHead]; m_iHead++; m_iHead = m_iHead % m_iQueueCapacity; m_iQueueLen--; return true; } } template void MyQueue ::QueueTraverse() { cout << "" << endl; for (int i = m_iHead; i < (m_iQueueLen + m_iHead); i++) { //cout << m_pQueue[i % m_iQueueCapacity] << endl; cout << i << endl; m_pQueue[i % m_iQueueCapacity].printInfo(); } cout << "" << endl; } #endif
2 - 测试类
#ifndef CUSTOMER_H #define CUSTOMER_H #include#include using namespace std; class Customer { public: Customer(string name="",int age=0); void printInfo() const; private: string m_strName; int m_iAge; }; Customer::Customer(string name, int age) { m_strName = name; m_iAge = age; } void Customer::printInfo() const { cout << "" << endl; cout << "姓名: " << m_strName << endl; cout << "年龄: " << m_iAge << endl; cout << "" << endl; } #endif
3- 测试
#includeusing namespace std; #include #include "MyQueue.h" int main() { MyQueue *p = new MyQueue (4); Customer c1("张三", 20); Customer c2("李四", 25); Customer c3("小华", 36); Customer c4("王二", 28); Customer c5("小明", 18); p->EnQueue(c1); p->EnQueue(c2); p->EnQueue(c3); p->EnQueue(c4); p->EnQueue(c5); //cout << p->QueueLength() << endl; p->QueueTraverse(); Customer c("", 0); p->DeQueue(c); c.printInfo(); //cout << p->QueueLength() << endl; p->QueueTraverse(); delete p; p = NULL; system("pause"); return 0; }
5- 运行结果



