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

求大神看看哪里出错了

求大神看看哪里出错了

初心Listen 2016-10-27 19:20:45
#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;
    }
 
}


查看完整回答
反对 回复 2016-11-13
  • 1 回答
  • 0 关注
  • 1485 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信