请问我写的C++基于循环数组的队列 代码错在哪里,老是答案错 1C

正常出队列返回success,空队列返回underflow, 满队列返回overflow

 enum ErrorCode

{

         success,

         underflow,

         overflow

};



const int maxQueue = 100;



template <class QueueEntry>

class MyQueue

{

public:

         MyQueue(){
         front = rear = 0;
         }



         // 判断队列是否为空

         bool empty() const{
         return rear == front;
         }

         // 入队操作

         ErrorCode append(const QueueEntry &item){
         if(!full()){
         entry[rear] = item;
         rear = (rear+1)%100;
         return success;
         }
         else
         return overflow;
         }

         // 出队操作

         ErrorCode serve(){
         if(!empty()) {
         front = (front+1)%100;
         return success;
         }
         else return underflow;        
         }
         // 获取队头元素

         ErrorCode retrieve(QueueEntry &item) const{
         return success;
         }

         // 判断队列是否已满

         bool full() const{
         return ((rear + 1) % 100 == front);
         }

         // 获取队列已有元素个数

         int size() const{
         return (rear - front + 100)%100;
         }

         // 清除队列所有元素

         void clear(){
         rear = front = 0;
         }

         // 获取队头元素并出队

         ErrorCode retrieve_and_serve(QueueEntry &item){
         if(!empty()) {
         item = entry[front];
         front = (front+1)%100;
         return success;
         }
         else return underflow;
         }



private:

         int front;                             // 队头下标

         int rear;                              // 队尾下标

         QueueEntry entry[100];       // 队列容器

};

6个回答

你这只是实现的代码,调用的代码呢?
只有看到调用的代码,才有可能知道你想实现什么功能
当然最好你是你说明一下调用代码想实现的目标,但实际执行后又是什么效果,这样才好分析。

njll8949
sysu_转基因 正常出队列返回success,空队列返回underflow, 满队列返回overflow
4 年多之前 回复

你这只是实现的代码,调用的代码呢?
只有看到调用的代码,才有可能知道你想实现什么功能
当然最好你是你说明一下调用代码想实现的目标,但实际执行后又是什么效果,这样才好分析。

我只想说说自己的理解
1.循环数组队列,边界下标控制做的不错,但是为什么逻辑判断时候没有考虑进去?
a 初始0 0 那如果我加入了99个QueueEntry 之后呢?是不是又是0 0了?,这个时候你大部分函数都非正常工作了
b 设计逻辑问题,保存的类对象的拷贝,所以所谓的“清除队列所有元素”没有任何用,只是对那些任然存在的数据‘撒手不管’了而已
c 考虑下这个情况:我先入队列3个,再出队列2个,你猜现在是不是空的?如果我如队列99个,在出98个呢?这个时候是不是满的?
.................
此处略去....

ankangyanghushi
安康羊居士 判空和判满并没有错,你是想牺牲掉一个内存单元来区别full和null吧?把调用的代码拿出来看看
4 年多之前 回复

队列这个东西 要自己实现的话 应该牺牲掉一个存储单位,用于方便判断是满还是空,队尾+1=队首 ->满 队尾 = 队首-> 空

哪里有问题,我试了一下输出没问题呀

貌似没有问题啊啊啊啊啊

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问