求大神解释下
出列的时候传入的参数没有什么用啊。。。而且出列函数的第一行代码感觉是多余的。。。。。而且清空队列也并不是真正的清空对列。。。在内存中的数据也还在,并没有回归到原始的状态。。。。只是访问的方式让我们误以为数据已经清空了而已。
出列的时候传入的参数没有什么用啊。。。而且出列函数的第一行代码感觉是多余的。。。。。而且清空队列也并不是真正的清空对列。。。在内存中的数据也还在,并没有回归到原始的状态。。。。只是访问的方式让我们误以为数据已经清空了而已。
 
                            2016-07-28
#ifndef MYQUEUE_H
#define MYQUEUE_H
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;
};
#endif
MyQueue::MyQueue(int queueCapacity)
{
 m_iQueueCapacity = queueCapacity;
 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_iQueueLen = 0;
}
bool MyQueue::QueueFull() const
{
 if (m_iQueueLen == m_iQueueCapacity)
 {
  return true;
 }
 else
 {
  return false;
 }
}
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++;
  return true;
 }
}
bool MyQueue::DeQueue(int &element)
{
 if (QueueEmpty())
 {
  return false;
 }
 else
 {
  element = m_pQueue[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;
 }
}
int main()
{
 MyQueue *p = new MyQueue(20);
 p->EnQueue(10);
 p->EnQueue(12);
 p->EnQueue(14);
 p->EnQueue(16);
 p->EnQueue(18);
 p->QueueTraverse();
 cout << endl;
 int e = 0;
 p->DeQueue(e);
 cout << e <<endl;
 p->DeQueue(e);
 cout << e <<endl;
 cout << endl;
 p->QueueTraverse();
 p->ClearQueue();
 cout <<endl;
 p->EnQueue(20);
 p->EnQueue(30);
 p->QueueTraverse();
 delete p;
 p = NULL;
 system("pause");
    return 0;
}
举报