首页主机资讯c语言怎么创建一个队列

c语言怎么创建一个队列

时间2023-12-14 14:37:05发布访客分类主机资讯浏览1309
导读:在C语言中,可以使用数组或链表实现队列。以下是两种常见的队列实现方法: 使用数组: #include <stdio.h> #define MAX_SIZE 100 // 定义队列结构体 typedef struct {...

在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;

}
    

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

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: c语言怎么创建一个队列
本文地址: https://pptw.com/jishu/577458.html
SOCKET中SELECT的用法是什么 centos下如何安装telnet命令

游客 回复需填写必要信息