为了账号安全,请及时绑定邮箱和手机立即绑定

求大神解释下

出列的时候传入的参数没有什么用啊。。。而且出列函数的第一行代码感觉是多余的。。。。。而且清空队列也并不是真正的清空对列。。。在内存中的数据也还在,并没有回归到原始的状态。。。。只是访问的方式让我们误以为数据已经清空了而已。

正在回答

3 回答

不仅出列的第一行代码多余,出列函数的参数也多余,老师这么写是为了方便打印出出列对象,展示队列的特性是先进先出。你能看出第一行多余,说明你已经理解得很好。至于清空队列,我也纳闷。。。但是清空的意义是为了可以继续插入,从这个角度理解就说的通,我是这么理解的。求采纳

1 回复 有任何疑惑可以回复我~
#1

未道修 提问者

Thanks
2016-07-31 回复 有任何疑惑可以回复我~
#2

谁记得

感觉老师这样讲解不好,令人更加迷惑了
2016-12-15 回复 有任何疑惑可以回复我~

虽然清空之后内存中二进制数据仍旧存在但它已经没有意义了,当你下一次写入内存的时候它就会被覆盖。所以这个清空方式没有影响并且也很方便。

0 回复 有任何疑惑可以回复我~

#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;
}


0 回复 有任何疑惑可以回复我~
#1

未道修 提问者

。。。干嘛把代码给我发一遍啊。。。。。没有解决我的疑问撒
2016-07-30 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
数据结构探险—队列篇
  • 参与学习       110035    人
  • 解答问题       170    个

与现实最为贴近的数据结构-队列,带大家进入数据结构的美妙世界

进入课程

求大神解释下

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信