You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归实现循环队列入队无输出问题排查(BST遍历练习)

问题分析与修正

你的代码存在三个关键问题,导致无法正确输出队列内容:

  • 缺少is_empty函数实现:queue_print中调用了is_empty判断队列是否为空,但代码未定义该函数。编译器会将其视为未声明函数,可能返回错误值,进而跳过打印逻辑。
  • queue_print循环条件错误:原代码中while (i == q->rear)逻辑完全颠倒,正确的循环终止条件是当i等于rear时停止,因此循环条件应为while (i != q->rear)。
  • 递归入队包含多余元素:当前q_factorial_enqueue会将0也入队,若仅需5到1的序列,需调整递归触发条件。

修正后的完整代码

#include <stdio.h>
#include <stdlib.h>

#define MAX_QUEUE_SIZE 10 // 补充定义队列最大容量
typedef int element;
typedef struct { 
    element  data[MAX_QUEUE_SIZE];
    int  front, rear;
} QueueType;

// 补充错误处理函数
void error(const char* msg) {
    fprintf(stderr, "%s\n", msg);
    exit(1);
}

void init_queue(QueueType* q)
{
    q->front = q->rear = 0;
}

// 补充队列空判断函数
int is_empty(QueueType* q)
{
    return q->front == q->rear;
}

int is_full(QueueType* q)
{
    return ((q->rear + 1) % MAX_QUEUE_SIZE == q->front);
}

void enqueue(QueueType* q, element item)
{
    if (is_full(q))
        error("Queue is full");
    q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
    q->data[q->rear] = item;
}

void q_factorial_enqueue(QueueType* q, int data)
{
    enqueue(q, data);
    if (data > 1) { // 调整递归条件,避免入队0
        q_factorial_enqueue(q, data - 1);
    }
}

void queue_print(QueueType* q)
{
    printf("QUEUE(front=%d rear=%d) = ", q->front, q->rear);
    if (!is_empty(q)) {
        int i = q->front;
        do {
            i = (i + 1) % MAX_QUEUE_SIZE;
            printf("%d | ", q->data[i]);
        } while (i != q->rear); // 修正循环条件
    }
    printf("\n");
}

int main(void)
{
    QueueType queue;
    int element;

    init_queue(&queue); //Initialization

    q_factorial_enqueue(&queue, 5);
    queue_print(&queue);
}

说明

  1. 补充is_empty函数,实现队列空的判断逻辑:当front等于rear时队列为空。
  2. 修正queue_print的循环条件,确保遍历所有队列元素。
  3. 调整递归入队的条件,仅在data > 1时继续递归,避免将0加入队列。
  4. 补充error函数实现与MAX_QUEUE_SIZE定义,完善代码完整性。

内容的提问来源于stack exchange,提问作者bFur4list

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 20:52:45