问答详情
源自:4-3 环形队列检测

m_iHead和m_iTail明明初始化为0了,可是测试发现变成了-842150451

我没有办法执行,m_iHead和m_iTail明明初始化为0了,可是测试发现变成了-842150451,有人知道为什么吗?其他的代码基本都照着教程写了

//.h

#pragma once

class myQueue

{

public:

myQueue(int queueCapacity);//创建

virtual ~myQueue(void);    //销毁

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;               //队尾



};

//.cpp

#include "myQueue.h"

#include <iostream>

using namespace std;

//#include<stdio.h>


myQueue::myQueue(int queueCaoacity)

{

m_iqueueCapacity=queueCaoacity;

m_pQueue=new int[m_iqueueCapacity];

    int m_iHead=0;

int m_iTail=0;

int m_iqueueLen=0;

}



myQueue::~myQueue(void)

{

    delete[]m_pQueue;

//m_pQueue = NULL;

m_pQueue =nullptr;

}

void myQueue::clearQueue()     //清空

{

int m_iHead=0;

int m_iTail=0;

int m_iqueueLen=0;

}     

bool myQueue::queueEmpty()const//判空

{

return m_iqueueLen==0?true:false;

}  

bool myQueue::queueFull()const//判满

{

return m_iqueueLen==m_iqueueCapacity?true:false;

};    

int myQueue::queueLength()const//队列长度

{

return m_iqueueLen;

}  

bool myQueue::enQueue(int element)//首元素入列

{

if(queueFull())

{

return false;

}

else

{


        m_pQueue[m_iTail%m_iqueueCapacity]=element;

m_iTail++;

m_iTail=m_iTail%m_iqueueCapacity;

m_iqueueLen=m_iqueueLen+1;

cout<<"rulie"<<m_iqueueLen<<endl;

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

cout<<"chulie"<<endl;

   return true;

}

}

void myQueue::queueTraverse()      //遍历

{

cout<<m_iqueueLen;

for(int i=m_iHead;i<m_iHead+m_iqueueLen;i++)

{

cout<<m_pQueue[i%m_iqueueCapacity]<<endl;

cout<<m_pQueue[i%m_iqueueCapacity]<<endl;

}

}


提问者:LUHAN艺3248098 2016-10-18 00:14

个回答

  • 暗夜公爵yk
    2016-10-18 14:58:33
    已采纳

    #include "MyQueue.h"

    #include <iostream>

    using namespace std;


    MyQueue::MyQueue(int queueCapacity)

    {

    int m_iQueueCapacity=queueCapacity; //队列数组容量

    ClearQueue();

    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

    {

    return m_iQueueLen==0?true:false;

    }


    int MyQueue::QueueLength() const

    {

    return m_iQueueLen;

    }


    bool MyQueue::QueueFull()const

    {

    return m_iQueueLen==m_iQueueCapacity?true: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;

    }

    cout<<endl;

    }


  • 面具VS口罩
    2017-04-18 20:24:48

    为什么length要加const,他是可变的啊,

  • 卟放弃
    2017-03-17 10:25:02

    我也出现了这样的结果 但是我是因为判满,判空,还有队列长度这三个函数没有加const,我想问一下这里为什么要加const

  • 拥小山
    2016-10-20 15:07:58

    先初始0,再挂在数组

  • 暗夜公爵yk
    2016-10-18 11:13:30

    你的demo文件怎么写的