c语言怎么创建一个队列

   2025-02-13 7770
核心提示:在C语言中,可以使用数组或链表实现队列。以下是两种常见的队列实现方法:使用数组:#include stdio.h#define MAX_SIZE 100// 定

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

使用数组:
#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;}
使用链表:
#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;}

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

 
 
更多>同类维修知识
推荐图文
推荐维修知识
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  网站留言