集美大学数据结构吧 关注:74贴子:269
  • 3回复贴,共1

环形队列的实现

只看楼主收藏回复

//环形队列的实现
#include<iostream>
#include<stdlib.h>
using namespace std;
class MyQueue
{
public:
MyQueue(int queuecapacity);
virtual~MyQueue();
void clearQueue();
bool QueueEmpty()const;
int QueueLength()const;
bool EnQueue(int element);
bool DeQueue(int &element);
void QueueTraverse();
bool QueueFull()const;
private:
int *m_PQueue;
int m_iQueueLen;
int m_iQueueCapacity;
int m_iHead;
int m_iTail;
};
MyQueue::MyQueue(int queuecapacity)
{
m_iQueueCapacity =queuecapacity;
m_iHead = 0;
m_iTail = 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;
}
bool MyQueue::QueueEmpty()const
{
if (m_iQueueLen == 0)
return true;
else
return false;
}
int MyQueue::QueueLength()const
{
return m_iQueueLen;
}
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++;
m_iQueueLen = m_iQueueLen%m_iQueueCapacity;
return true;
}
}
bool MyQueue::QueueFull()const
{
if (m_iQueueLen+1 == m_iQueueCapacity)
return true;
else
return false;
}
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_iQueueLen] << endl;
}
}
int main(void)
{
MyQueue*p = new MyQueue(5);
p->EnQueue(1);
p->EnQueue(3);
p->EnQueue(5);
p->EnQueue(7);
int i = 4;
p->DeQueue(i);
p->QueueTraverse();
delete p;
p = NULL;
}
当我把main函数中MyQueue*p = new MyQueue(5);改为MyQueue*p = new MyQueue(4);
后变成了‘’请按任意键继续‘’。我不知道这到底是哪个函数还是环节出错了。


1楼2015-11-13 20:59回复
    感觉程序逻辑有一点错,你想达到什么效果


    IP属地:福建来自Android客户端2楼2015-11-14 01:29
    收起回复