sususususu 发表于 2023-12-5 18:22:29

队列问题

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

#define MAX_SIZE 10

typedef struct{
        int items;
        int front;
        int rear;
}Queue;

void initialize(Queue* queue)
{
        queue->front=-1;
        queue->rear=-1;
}

void enqueue(Queue* queue,int item)
{
        if(queue->rear==MAX_SIZE-1)
        {
                printf("队列已满,无法入队。\n");
        }
        else
        {
                if(queue->front==-1)
                {
                        queue->front=0;
                }
                queue->items[++(queue->rear)]=item;
        }
}

int dequeue(Queue* queue)
{
        if(queue->front==-1)
        {
                printf("队列为空,无法出队。\n");
                return -1;
        }
        else
        {
                int item=queue->items;
                if(queue->front=queue->rear)
                {
                        queue->front=queue->rear=-1;
                }
                else
                {
                        (queue->front)++;
                }
                return item;
        }
}
int main()
{
        Queue queue;
        initialize(&queue);
       
        enqueue(&queue,1);
        enqueue(&queue,2);
        enqueue(&queue,3);
       
        printf("出队:%d\n",dequeue(&queue));
        printf("出队:%d\n",dequeue(&queue));
       
        return 0;
}

为什么输出为
出队:1
队列为空,无法出队。
出队:-1
跟计划的输出不一样呀

FishC_GPT 发表于 2023-12-5 18:23:01

问题出在enqueue函数中的代码逻辑上。在enqueue函数中,将item赋值给queue->items,这是错误的。应该是将item存储在队列数组中的rear对应的位置。

修改enqueue函数如下:

void enqueue(Queue* queue, int item)
{
    if (queue->rear == MAX_SIZE - 1)
    {
      printf("队列已满,无法入队。\n");
    }
    else
    {
      if (queue->front == -1)
      {
            queue->front = 0;
      }
      (queue->rear)++;
      queue->items = item;
    }
}

另外,在dequeue函数中,判断队列是否为空的条件有问题。应该是`if (queue->front == -1 || queue->front > queue->rear)`,而不是`if (queue->front == -1)`。

修改dequeue函数如下:

int dequeue(Queue* queue)
{
    if (queue->front == -1 || queue->front > queue->rear)
    {
      printf("队列为空,无法出队。\n");
      return -1;
    }
    else
    {
      int item = queue->items;
      (queue->front)++;
      return item;
    }
}

修改完成后,输出结果将与您预期一致。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 队列问题