C++多服务器队列模拟(超市场景)代码输出异常问题咨询
问题原因及修复方案
问题1:queue_total统计结果与实际队列人数不匹配
原因出在Queue类的enqueue方法计数逻辑错误:
- 当向空队列插入第一个元素时,代码执行完空队列分支直接return,没有执行
++count计数操作 - 只有后续插入非首元素时才会执行
++count,最终导致size()返回的count值永远比队列实际元素数少1(非空队列场景) queue_total通过累加所有队列的size()返回值统计总人数,自然和实际展示的元素总数不一致。
问题2:新顾客不会入队到最短队列
这个问题同样是enqueue的计数错误导致的:
shortest_queue函数判断队列长度时调用的是size()方法,由于size()返回值不准,长度比较逻辑完全失效,自然无法找到真实的最短队列。
修复方案
仅需要修改Queue类的enqueue方法,将计数操作提前到插入逻辑之前即可:
void enqueue(int x) { // 创建新节点 Node* temp = new Node(x); // 只要新增元素就统一计数+1,解决首元素漏计数问题 ++count; // 如果队列为空,新节点同时作为队头和队尾 if (empty()) { front = rear = temp; return; } // 非空队列则将新节点追加到队尾 rear->next = temp; rear = temp; }
内容的提问来源于stack exchange,提问作者FayZ
相关产品推荐
相关产品推荐

