关于以递归方式将数据排队到循环队列中的混淆

Confusion about enqueue-ing datas into circular-queue recursively

提问人:bFur4list 提问时间:5/25/2023 最后编辑:bFur4list 更新时间:5/25/2023 访问量:57

问:

事实上,这不是一个主要问题,我在练习使用循环队列进行 BST 遍历时遇到了这个问题。

我试图以递归方式定义无序遍历,因此排队数据也以递归方式定义。

这是我尝试的一些示例,如下所示:

typedef int element;
typedef struct { 
    element  data[MAX_QUEUE_SIZE];
    int  front, rear;
} QueueType;

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

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 != 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);
}

我想将数据“5 4 3 2 1”排队到循环队列,但是如果我打印循环队列的元素,则没有正确的输入,也没有输出,因为没有输入。

我错过了什么以递归方式定义排队?

C 指针 队列

评论

1赞 Karthick 5/25/2023
你能粘贴输入和输出吗?此外,请向我们展示您是如何打印队列的。
0赞 Gerhardh 5/25/2023
“没有正确的输入” 这是什么意思?您没有要求任何输入。怎么会不正确呢?
0赞 bFur4list 5/25/2023
尽管我执行了“enqueue(q, data)”,但队列中没有任何内容。@Gerhardh
0赞 Gerhardh 5/25/2023
你如何检查内容?做什么?queue_print
0赞 bFur4list 5/25/2023
让我尽快上传,@Karthick

答: 暂无答案