Q:通過 數組 實現 隊列(FIFO)功能
A:
MyQueue.h
#ifndef MYQUEUE_H#define MYQUEUE_H/*************************************//*環形隊列實現 2017.03.01 by hyc *//************************************/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; //隊尾};#endifMyQueue.cpp#include "MyQueue.h"#include <iostream>using namespace std;/*************************************//*環形隊列實現 2017.03.01 by hyc *//************************************/MyQueue::MyQueue(int queueCapacity){ m_iQueueCapacity = queueCapacity; m_pQueue = new int[m_iQueueCapacity]; m_iHead = 0; m_iTail = 0; m_iQueueLen = 0;}MyQueue::~MyQueue(){ delete[] m_pQueue; m_pQueue = NULL;}void MyQueue::ClearQueue(){ m_iHead = 0; m_iTail = 0; m_iQueueLen = 0;}bool MyQueue::QueueEmpty() const{ return m_iQueueLen == 0 ? true : false;}bool MyQueue::QueueFull() const{ return m_iQueueLen == m_iQueueCapacity ? true : false;}int MyQueue::QueueLength() const{ return m_iQueueLen;}bool MyQueue::EnQueue(int element){ if (QueueFull()){ return false; } m_pQueue[m_iTail] = element; m_iTail++; m_iTail = m_iTail % m_iQueueCapacity; m_iQueueLen++; return true;}bool MyQueue::DeQueue(int &element){ if (QueueEmpty()){ return false; } element = m_pQueue[m_iHead]; m_iHead++; m_iHead = m_iHead % m_iQueueCapacity; m_iQueueLen--; return true;}void MyQueue::QueueTraverse(){ cout << endl; for (int i = m_iHead; i < m_iHead + m_iQueueLen; i++){ cout << m_pQueue[i % m_iQueueCapacity] << endl;//我寫錯了 } cout << endl;}demo.cpp:用于測試隊列功能是否實現#include "MyQueue.h"#include <iostream>using namespace std;/*************************************//*環形隊列實現 2017.03.01 by hyc *//************************************/int main(void){ MyQueue *p = new MyQueue(4); p->EnQueue(1); p->EnQueue(2); p->EnQueue(3); p->EnQueue(4); p->EnQueue(5); p->QueueTraverse(); int e = 0; p->DeQueue(e); p->QueueTraverse(); cout << e << endl; p->DeQueue(e); p->QueueTraverse(); cout << e << endl; p->ClearQueue(); p->QueueTraverse(); p->EnQueue(10); p->EnQueue(20); p->QueueTraverse(); int j = 0; j=p->QueueLength(); cout << j << endl; delete p; p = NULL; system("pause"); return 0;}輸出結果:
注意:本次練習只實現了簡單的int類型的隊列功能,可以使用模板類進一步實現其多類型支持。并且本程序有很多不完善的地方,如分配空間等的異常檢測。
新聞熱點
疑難解答
圖片精選