Q:通過 數(shù)組 實(shí)現(xiàn) 隊(duì)列(FIFO)功能
A:
MyQueue.h
#ifndef MYQUEUE_H#define MYQUEUE_H/*************************************//*環(huán)形隊(duì)列實(shí)現(xiàn) 2017.03.01 by hyc *//************************************/class MyQueue{public: MyQueue(int queueCapacity); //創(chuàng)建隊(duì)列 virtual ~MyQueue(); //銷毀隊(duì)列 void ClearQueue(); //清空隊(duì)列 bool QueueEmpty() const; //判空隊(duì)列 bool QueueFull() const; //判滿隊(duì)列 int QueueLength() const; //隊(duì)列長(zhǎng)度 bool EnQueue(int element); //新元素入列 bool DeQueue(int &element); //首元素出列 void QueueTraverse(); //遍歷隊(duì)列PRivate: int *m_pQueue; //隊(duì)列數(shù)組指針 int m_iQueueLen; //隊(duì)列元素個(gè)數(shù) int m_iQueueCapacity; //隊(duì)列數(shù)組容量 int m_iHead; //隊(duì)首 int m_iTail; //隊(duì)尾};#endifMyQueue.cpp#include "MyQueue.h"#include <iostream>using namespace std;/*************************************//*環(huán)形隊(duì)列實(shí)現(xiàn) 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;//我寫錯(cuò)了 } cout << endl;}demo.cpp:用于測(cè)試隊(duì)列功能是否實(shí)現(xiàn)#include "MyQueue.h"#include <iostream>using namespace std;/*************************************//*環(huán)形隊(duì)列實(shí)現(xiàn) 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;}輸出結(jié)果:
注意:本次練習(xí)只實(shí)現(xiàn)了簡(jiǎn)單的int類型的隊(duì)列功能,可以使用模板類進(jìn)一步實(shí)現(xiàn)其多類型支持。并且本程序有很多不完善的地方,如分配空間等的異常檢測(cè)。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注