#ifndef?MYQUEUE_H
#define?MYQUEUE_H
class?MyQueue
{
public:
MyQueue(int?queueCapacity);??????//InitQueu(&Q) ???創建隊列
virtual?~MyQueue(); //DestroyQueue(&Q)???銷毀隊列
void?ClearQueue(); //ClearQueue(&Q)???????清空隊列
bool?QueueEmpty()?const; //QueueEmmpty(Q)?????判空隊列
bool?QueueFull()?const; //判滿隊列
int?QueueLength()?const; //QueueLength(Q) 對列長度
bool?EnQueue(int?element); //EnQueue(&Q,?element)????新元素入隊
bool?DeQueue(int?&element); //DeQueue(&Q,?&element)????首元素出列
void?QueueTraverse(); //QueueTraverse(Q,?visit())?????遍歷隊列
private:
int?*m_pQueue; //隊列數組指針
int?m_iQueueLen; //隊列元素個數
int?m_iQueueCapacity; //隊列數組容量
int?m_iHead;
int?m_iTail;
};
#endif;
#include?"MyQueue.h"
#include?<iostream>
using?namespace?std;
MyQueue::MyQueue(int?queueCapacity)
{
m_iQueueCapacity?=?queueCapacity;
//m_iHead?=?0;
//m_iTail?=?0;
//m_iQueueCapacity?=?0;
m_pQueue?=?new?int[m_iQueueCapacity];
ClearQueue();
}
MyQueue::~MyQueue()
{
delete?[]m_pQueue;
m_pQueue?=?NULL;
}
void?MyQueue::ClearQueue()
{
m_iHead?=?0;
m_iTail?=?0;
m_iQueueCapacity?=?0;
}
bool?MyQueue::QueueEmpty()?const
{
if?(m_iQueueLen?==?0)
{
return?true;
}
else
{
return?false;
}
//return?m_iQueueLen?==?0???trur?:false;
}
int?MyQueue::QueueLength()?const
{
return?m_iQueueLen;
}
bool?MyQueue::QueueFull()?const
{
if?(m_iQueueLen?==?m_iQueueCapacity)
{
return?true;
}
else?return?false;
}
bool?MyQueue::EnQueue(int?element)
{
if?(QueueFull())
{
return?false;
}
else
{
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;
}
else
{
element?=?m_pQueue[m_iHead];
m_iHead++;
m_iHead?=?m_iHead?%?m_iQueueCapacity;
m_iQueueLen--;
return?true;
}
}
void?MyQueue::QueueTraverse()
{
for?(int?i?=?m_iHead;?i?<?m_iQueueLen?+?m_iHead;?i++)
{
cout?<<?m_pQueue[i%m_iQueueCapacity]?<<?endl;
}
}#include <stdlib.h>#include "MyQueue.h"#include <iostream>using namespace std;int main(void){ MyQueue *p = new MyQueue(10); p->EnQueue(10); p->EnQueue(12); p->EnQueue(16); p->EnQueue(18); //p->EnQueue(20); p->QueueTraverse(); int e = 0; p->DeQueue(e); cout << e << endl; p->DeQueue(e); cout << e << endl; p->QueueTraverse(); p->ClearQueue(); p->QueueTraverse(); p->EnQueue(20); p->EnQueue(30); p->QueueTraverse(); delete p; p = NULL; system("pause"); return 0;}
1 回答

MinRam
TA貢獻87條經驗 獲得超24個贊
額,不知道你是否找到了錯誤結果
?類中的? ??void?ClearQueue(); 函數有問題
void?MyQueue::ClearQueue() { ????m_iHead?=?0; ????m_iTail?=?0; ????m_iQueueCapacity?=?0;???/*????m_iQueuecapacity?按照定義為該隊列的容量。(一旦定義不可改,除非銷毀) ??????????????????????????????????而你定義的ClearQueue()應該是清空隊列的元素。 ??????????????????????????????????故此處應該是?把隊列的元素長度初始化為0。 ??????????????????????????????????更正:??m_iQueueLen?=?0; ?????????????????????????????*/ }
錯誤體現:
在類的構造函數中:
MyQueue::MyQueue(int?queueCapacity) { ????m_iQueueCapacity?=?queueCapacity; ????//m_iHead?=?0; ????//m_iTail?=?0; ????//m_iQueueCapacity?=?0; ????m_pQueue?=?new?int[m_iQueueCapacity]; ????ClearQueue();??????//此處進入錯誤的?ClearQueue()隊列清空函數,將m_iQueueCapacity隊列容量?設置為0。 }
在主函數的
p->EnQueue(10);? //---------->?進入下面?EnQueue(int?element) bool?MyQueue::EnQueue(int?element) { ????if?(QueueFull()) ????{ ????????return?false; ????} ????else ????{ ????????m_pQueue[m_iTail]?=?element; ????????m_iTail++; ????????m_iTail?=?m_iTail?%?m_iQueueCapacity;???//此處報錯,?m_iTail?=?1?%?0,?構造時候m_iQueueCapacity已經設為0。?????%?0?的錯誤。 ????????m_iQueueLen++; ????????return?true; ????} ? }
- 1 回答
- 0 關注
- 1556 瀏覽
添加回答
舉報
0/150
提交
取消