0

我正在学习循环队列,我遇到了一些错误。

在显示队列时,它只显示第一个和最后一个元素,删除一个元素后它变得更糟,现在我不知道如果它是在插入元素或显示时我到底哪里出错了。

这是我的代码:

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

struct Queue{
    int rear, front;
    unsigned capacity;
    int *arr;
};

struct Queue* createQueue(unsigned capacity)
{
    struct Queue* queue = (struct Queue*)malloc(sizeof(struct Queue));
    queue->front = queue->rear = -1;
    queue->capacity = capacity;
    queue->arr = (int*)malloc(sizeof(int)*capacity);
    return queue;
}

struct Queue* enQueue(struct Queue* queue, int data)
{
    if(queue->front == 0 && queue->rear == queue->capacity -1)
    {
        printf("Queue is full.");
    }

    else if(queue->front == -1)
    {
        queue->front = queue->rear = 0;
        queue->arr[queue->rear] = data;
    }
    else if(queue->rear = queue->capacity -1 && queue->front != 0)
    {
        queue->rear = 0;
        queue->arr[queue->rear] = data;
    }
    else
    {
        queue->rear++;
        queue->arr[queue->rear] = data;
    }
    return queue;
   }

struct Queue* deQueue(struct Queue* queue)
{
    if(queue->front == -1)
    {
        printf("Error: Queue underflow.");
    }
    else if(queue->front == queue->rear)
    {
        queue->front = queue->rear = -1;
    }
    else
    {
        if(queue->front == queue->capacity -1)
        {
            queue->front = 0;
        }
        else
        {
            queue->front++;
        }
    }
    return queue;
 }

void printQueue(struct Queue* queue)
{
    if(queue->front == -1)
    {
        printf("Queue is empty.");
    }

    if(queue->rear >= queue->front )
    {
        for(int i = queue->front; i <= queue->rear; i++)
        {
            printf("%d ", queue->arr[i]);
        }
    }
    else
    {
        for(int i = queue->front; i< queue->capacity; i++)
        {
            printf("%d ", queue->arr[i]);
        }

        for (int i = 0; i < queue->rear; i++)
        {
            printf("%d ", queue->arr[i]);
        }    
    }
}

int main(){
    int num, data;
    printf("Enter the size of your queue:");
    scanf("%d", &num);
    struct Queue* queue = createQueue(num);

    printf("Start filling the queue:\n");
    for (int i = 0; i < num; i++)
    {
        printf("\nEnter the element:");
        scanf("%d", &data);
        enQueue(queue, data);
    }

    printQueue(queue);

    deQueue(queue);
    printf("\nAfter deleting one element:\n");
    printQueue(queue);

    printf("\nEnter one element:");
    scanf("%d", &data);
    enQueue(queue, data);

    printf("The final queue is:\n");
    printQueue(queue);

    return 0;
}

这是输出:

Enter the size of your queue:5
Start filling the queue:

Enter the element:1     

Enter the element:2

Enter the element:3

Enter the element:4

Enter the element:5
1 5                                 <- this is the queue I am getting 

After deleting one element:
5  <- just a 5?
Enter one element:4                 <- I entered 4.
The final queue is:
5 -1007484592 565 1734960750        <- why?
4

0 回答 0