#pragma once //这里实现的是环形队列 class MyQueue { public: MyQueue(int queueCapacity); //创建队列 virtual ~MyQueue(); //销毁队列 void ClearQueue(); //清空队列 bool QueueEmpty()const; //判断队列 bool QueueFull()const; //队列判满 int QueueLength()const; //队列长度 bool EnQueue(int element); //新元素入队 bool DeQueue(int &element); //首元素出队 void QueueTraverse(); //遍历队列 private: int *m_pQueue; //队列数组指针 int m_iQueueLen; //队列元素个数 int m_iQueueCapacity; //队列数组容量 int m_iHead; //队头 int m_iTail; //队尾 };
#include"MyQueue.h" #include<iostream> using namespace std; MyQueue::MyQueue(int queueCapacity) { //用户传入队列大小queueCapacity,赋值给成员变量m_iQueueCapacity m_iQueueCapacity = queueCapacity; //初始化队头队尾 m_iHead = 0; m_iTail = 0; //初始化元素个数为0 m_iQueueLen = 0; //申请内存 m_pQueue = new int[m_iQueueCapacity]; } MyQueue::~MyQueue() { delete[]m_pQueue; m_pQueue = NULL; } void MyQueue::ClearQueue() //清空队列 { //队头队尾置零 m_iHead = 0; m_iTail = 0; //元素个数置零 m_iQueueLen = 0; cout << "清空成功!" << endl; } bool MyQueue::QueueEmpty()const //队列判空 { if (m_iQueueLen == 0) { cout << "队列为空!" << endl; return true; } else { return false; } } bool MyQueue::QueueFull()const //队列判满 { if (m_iQueueLen == m_iQueueCapacity) { cout << "队列已满!" << endl; return true; } else { return false; } } int MyQueue::QueueLength()const //队列长度 { return m_iQueueLen; } bool MyQueue::EnQueue(int element) //新元素入队 { if (QueueFull() == true) { return false; } else { //入队 m_pQueue[m_iTail]= element; //队尾移动 m_iTail++; m_iTail = m_iTail%m_iQueueCapacity; m_iQueueLen++; cout << element << "入队成功!" << endl; return true; } } bool MyQueue::DeQueue(int &element) //首元素出队 { if(QueueEmpty()==true) { return false; } else { //出队 element = m_pQueue[m_iHead]; m_iHead++; m_iHead = m_iHead%m_iQueueCapacity; m_iQueueLen--; cout << element << "出队成功!" << endl; return true; } } void MyQueue::QueueTraverse() //遍历队列 { cout << "遍历结果:" << endl; for (int i = m_iHead;i < m_iQueueLen+ m_iHead;i++) { cout << m_pQueue[i%m_iQueueCapacity] << endl; } cout << "遍历成功!" << endl; }
#include<iostream> using namespace std; #include"MyQueue.h" int main() { int a= 0; MyQueue *p = new MyQueue(4); p->EnQueue(10); p->EnQueue(12); p->EnQueue(13); p->EnQueue(14); p->DeQueue(a); cout << "出队" << a << endl; p->EnQueue(18); p->DeQueue(a); cout <<"出队"<< a << endl; p->EnQueue(17); p->QueueTraverse(); delete p; p = NULL; getchar(); return 0; }