温馨提示×

c语言中怎么获得队列长度

小亿
146
2023-12-14 10:43:00
栏目: 编程语言

在C语言中,可以通过以下方法获得队列的长度:

  1. 使用链表表示队列:创建一个计数器变量,每次入队和出队操作时,相应地增加或减少计数器的值。队列的长度即为计数器的值。

示例代码:

typedef struct Node {
    int data;
    struct Node* next;
} Node;

typedef struct Queue {
    Node* front;
    Node* rear;
    int size;
} Queue;

// 初始化队列
void initQueue(Queue* queue) {
    queue->front = NULL;
    queue->rear = NULL;
    queue->size = 0;
}

// 获取队列长度
int getQueueLength(Queue* queue) {
    return queue->size;
}

// 入队操作
void enqueue(Queue* queue, int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = NULL;

    if (queue->front == NULL) {
        queue->front = newNode;
        queue->rear = newNode;
    } else {
        queue->rear->next = newNode;
        queue->rear = newNode;
    }
    
    queue->size++;
}

// 出队操作
int dequeue(Queue* queue) {
    if (queue->front == NULL) {
        printf("Queue is empty.\n");
        return -1;
    }

    Node* temp = queue->front;
    int data = temp->data;

    queue->front = queue->front->next;
    free(temp);

    queue->size--;

    return data;
}
  1. 使用数组表示队列:创建一个计数器变量,每次入队和出队操作时,相应地增加或减少计数器的值。队列的长度即为计数器的值。

示例代码:

#define MAX_SIZE 10

typedef struct Queue {
    int data[MAX_SIZE];
    int front;
    int rear;
    int size;
} Queue;

// 初始化队列
void initQueue(Queue* queue) {
    queue->front = 0;
    queue->rear = 0;
    queue->size = 0;
}

// 获取队列长度
int getQueueLength(Queue* queue) {
    return queue->size;
}

// 入队操作
void enqueue(Queue* queue, int data) {
    if (queue->size == MAX_SIZE) {
        printf("Queue is full.\n");
        return;
    }

    queue->data[queue->rear] = data;
    queue->rear = (queue->rear + 1) % MAX_SIZE;
    queue->size++;
}

// 出队操作
int dequeue(Queue* queue) {
    if (queue->size == 0) {
        printf("Queue is empty.\n");
        return -1;
    }

    int data = queue->data[queue->front];
    queue->front = (queue->front + 1) % MAX_SIZE;
    queue->size--;

    return data;
}

以上是两种常见的实现队列的方法,在这两种方法中,通过维护一个计数器变量,可以方便地获得队列的长度。

0