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

问题描述

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

正常出队列返回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];       // 队列容器

};

解决方案

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

解决方案二:

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

解决方案三:

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

解决方案四:

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

解决方案五:

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

解决方案六:

貌似没有问题啊啊啊啊啊

时间: 2024-10-14 23:04:31

c++-请问我写的C++基于循环数组的队列 代码错在哪里,老是答案错的相关文章

c语言-C语言用递归函数输出1000以内的水仙花数,不得使用循环,请问怎么写。

问题描述 C语言用递归函数输出1000以内的水仙花数,不得使用循环,请问怎么写. C语言用递归函数输出1000以内的水仙花数,不得使用循环,请问怎么写. 解决方案 #include <stdio.h> void fun(int n) { if(n<100 || n>1000) return; int a,b,c; c=n%10; b=n/10%10; a=n/100%10; if(a*a*a+b*b*b+c*c*c == n) printf("%dn",n);

C# winform 中 怎么生成99个CheckBox,每排8个,请问怎么写

问题描述 C# winform 中 怎么生成99个CheckBox,每排8个,请问怎么写 C# winform 中 怎么生成99个CheckBox,每排8个,请问怎么写 X轴和Y轴,如何设定 解决方案 定义两个变量表示控件之间的横向距离nHDistance和纵向距离nVDistance, 然后用For循环,横向的控件从左向右X轴的位置每次增加 (一个控件的长度+nHDistance),Y方向一样:纵向的控件X轴位置一样,Y轴每次增加(一个控件的高度+nVDistance) 解决方案二: 请问LZ

插入排序用java写,排序量为两万,请问怎么写

问题描述 插入排序用java写,排序量为两万,请问怎么写 插入排序用java写,排序量为两万,请问怎么写???并且计算出所需要的时间是多少 解决方案 int[] arr= new int[20000]; 解决方案二: 大数据量排序的话,不能用内部排序,应该用外部排序吧.数据量太大加载到内存会出现内存溢出的. 解决方案三: import java.util.*; class sorts { public static void main(String[] args) { int[] arr= 你的

io-[java初学]求教为什么这样写不能退出while循环

问题描述 [java初学]求教为什么这样写不能退出while循环 package io;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;public class SystemIndemo { public static void main(String[] args) throws Exception{ InputStream in = System.in; Inp

c语言-用C语言的递归输出一个99乘法表,请问怎么实现。不能用循环实现

问题描述 用C语言的递归输出一个99乘法表,请问怎么实现.不能用循环实现 用C语言的递归输出一个99乘法表,请问怎么实现.不能用循环实现,请问怎么做 解决方案 #include <stdio.h> void foo(int acc1, int acc2) { if (acc1 > 9) return; printf("%d * %d = %dt", acc1, acc2, acc1 * acc2); if (acc2 >= acc1) { acc2 = 1; a

c#-C# 编写一个获得单词翻译的程序,思路是用在线词典,请问怎么写比较好?

问题描述 C# 编写一个获得单词翻译的程序,思路是用在线词典,请问怎么写比较好? C# 编写一个获得单词翻译的程序,思路是用在线词典,请问怎么写比较好? 解决方案 http://blog.csdn.net/apollokk/article/details/9341463 解决方案二: 要具体代码?那请你先采纳我的回答. 解决方案三: http://tech.ddvip.com/2011-11/1321509098169886.html 解决方案四: http://blog.csdn.net/ap

c++-请问怎样写文件名?谢谢。。。

问题描述 请问怎样写文件名?谢谢... 我要打开图中的txt文件,怎样写绝对路径?如果写相对路径,从哪个文件层算起? 解决方案 同样在vs,使用c#的控制台程序,和使用c++的控制台程序,当前的当前目录是不一样的.使用c#的时候,调试时当前目录是debug目录.使用c++的时候吗,调试时当前目录是源代码目录. 解决方案二: 注意有两个相对路径,一个是可执行文件所在的路径,一个是程序的工作路径.你双击程序打开的时候工作路径默认就是exe的路径,这没有问题,但是如果你从控制台启动程序,或者从另一个程

Java编写一个图书管理系统,要使用JDVC技术访问,带有SQL数据库,请问怎么写

问题描述 Java编写一个图书管理系统,要使用JDVC技术访问,带有SQL数据库,请问怎么写 Java编写一个图书管理系统,要使用JDVC技术访问,带有SQL数据库,请问怎么写 解决方案 http://download.csdn.net/detail/u014029255/8284261 解决方案二: 1.写界面 2.写数据库连接 3.写数据库的增删改查 4.处理细节

c#-小白,写了个无限循环,一旦调用便会很快崩溃

问题描述 小白,写了个无限循环,一旦调用便会很快崩溃 想把一个单次识别函数改为连续识别,核心代码不会修改,所以直接用了无限循环 bool flag=false; --//事件触发 flag = !flag; for (int circle = 0; circle < 1; circle--) { if (flag) { --//识别程序 } circle = 0: } 有什么好的改进方式吗? 明明每次识别后都会释放,为什么运行时间一长还是会崩溃? 解决方案 bool flag=false; --