c语言怎么创建一个队列

avatar
作者
猴君
阅读量:2

在C语言中,可以使用数组或链表实现队列。以下是两种常见的队列实现方法:

  1. 使用数组:
#include <stdio.h> #define MAX_SIZE 100  // 定义队列结构体 typedef struct {     int data[MAX_SIZE];     int front; // 队头指针     int rear;  // 队尾指针 } Queue;  // 初始化队列 void initQueue(Queue *q) {     q->front = q->rear = 0; }  // 判断队列是否为空 int isEmpty(Queue *q) {     return q->front == q->rear; }  // 判断队列是否已满 int isFull(Queue *q) {     return q->rear == MAX_SIZE - 1; }  // 入队 void enqueue(Queue *q, int value) {     if(isFull(q)) {         printf("Queue is full.\n");         return;     }     q->data[q->rear++] = value; }  // 出队 int dequeue(Queue *q) {     if(isEmpty(q)) {         printf("Queue is empty.\n");         return -1;     }     return q->data[q->front++]; }  // 获取队头元素 int getFront(Queue *q) {     if(isEmpty(q)) {         printf("Queue is empty.\n");         return -1;     }     return q->data[q->front]; }  // 获取队列长度 int getSize(Queue *q) {     return q->rear - q->front; }  int main() {     Queue q;     initQueue(&q);     enqueue(&q, 1);     enqueue(&q, 2);     enqueue(&q, 3);     printf("Front element: %d\n", getFront(&q));     printf("Size: %d\n", getSize(&q));     printf("Dequeue: %d\n", dequeue(&q));     printf("Size: %d\n", getSize(&q));     return 0; } 
  1. 使用链表:
#include <stdio.h> #include <stdlib.h>  // 定义链表节点结构体 typedef struct Node {     int data;     struct Node *next; } Node;  // 定义队列结构体 typedef struct {     Node *front; // 队头指针     Node *rear;  // 队尾指针 } Queue;  // 初始化队列 void initQueue(Queue *q) {     q->front = q->rear = NULL; }  // 判断队列是否为空 int isEmpty(Queue *q) {     return q->front == NULL; }  // 入队 void enqueue(Queue *q, int value) {     Node *newNode = (Node*)malloc(sizeof(Node));     newNode->data = value;     newNode->next = NULL;     if(isEmpty(q)) {         q->front = q->rear = newNode;     } else {         q->rear->next = newNode;         q->rear = newNode;     } }  // 出队 int dequeue(Queue *q) {     if(isEmpty(q)) {         printf("Queue is empty.\n");         return -1;     }     Node *temp = q->front;     int value = temp->data;     q->front = q->front->next;     free(temp);     if(q->front == NULL) {         q->rear = NULL;     }     return value; }  // 获取队头元素 int getFront(Queue *q) {     if(isEmpty(q)) {         printf("Queue is empty.\n");         return -1;     }     return q->front->data; }  int main() {     Queue q;     initQueue(&q);     enqueue(&q, 1);     enqueue(&q, 2);     enqueue(&q, 3);     printf("Front element: %d\n", getFront(&q));     printf("Dequeue: %d\n", dequeue(&q));     printf("Dequeue: %d\n", dequeue(&q));     return 0; } 

这两种方法分别使用了数组和链表来实现队列的基本功能,你可以根据实际需求选择其中一种方法来创建队列。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!