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

再进行数据结构队列篇的时候,遇到意外的 #endif???请问怎么解决?

/*   MyQueue.cpp 代码 */

#include"MyQueue.h"

#include<iostream>

using namespace std;

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::QueueEmpty() const //判断队列是否为空

{

if(m_iQueueLen == 0)

{

return true;

}

else

{

return false;

}

//return m_iQueueLength ==0?true:false;

}

int MyQueue::QueueLength() const  //队列长度

{

return m_iQueueLen;

}

bool 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_Queue[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;i++)  //从头开始遍历

{

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

}


}


/*  MyQueue.h 的代码*/

/* 

/* 环形队列C++实现2015.9 by James */

#ifndef MYQUEUE_H

#define MYQUEUE_H

#endif // _DEBUG

class MyQueue

{

public:

MyQueue(int queueCapacity); //InitQueue(&Q) 创建队列

virtual ~MyQueue();        //DestroyQueue(&Q); 销毁队列

void ClearQueue();         //ClearQueue(&Q);   清空队列

bool QueueEmpty() const;   //QueueEmoty(Q);  判空队列(判满)

bool QueueFull() const;

int QueueLength() const;   //QueueLength()   队列长度

bool EnQueue(int element); //EnQueue(&Q,element) 新元素入队

bool DeQueue(int &element); //DeQueue(&Q,&element) 首元素出队

void QueueTraverse();      // QueueTraverse visit() 遍历队列

private:

int *m_pQueue;    //队列数组指针

int m_iQueueLen;   //队列元素个数

int m_iQueueCapacity; //队列数组容量

int m_iHead;

int m_iTail;

};

#endif


/*  demo.cpp的代码 */

#include<iostream>

#include "stdlib.h"

#include "MyQueue.h"

/*             实现环形队列     */

int main(void)

{

MyQueue *P = new MyQueue(4);

delete p;

p = NULL;

system("pause");

return 0;

}


提问者:qq_菜鸟_12 2016-11-24 21:12

个回答

  • Object_is_null
    2016-11-26 17:08:30
    已采纳

    析构函数中应该是delete [] m_pQueue;

    QueueTraverse() 中循环结束条件应该是i<m_iHead+m_iQueueLen

    MyQueue.h头文件中多出了一个#endif // _DEBUG

    #ifndef 和 #endif 是一一对应的,条件编译。

  • Object_is_null
    2016-11-26 17:10:05

    还有大小写敏感,P改成p