C语言实现队列的示例详解

C语言实现队列的示例详解

简介

队列是一种常用的数据结构,类似于排队,先进先出。C语言中可以使用结构体、数组、指针等方式来实现队列。本文将介绍如何使用数组实现队列。

实现过程

使用数组实现队列需要定义两个指针:一个指向队列头,一个指向队列尾。

1. 定义队列结构体

结构体定义如下,其中front为队列头指针,rear为队列尾指针,maxSize为队列容量,arr为存储数据的数组。

typedef struct {
    int front;
    int rear;
    int maxSize;
    int *arr;
} Queue;

2. 初始化队列

初始化队列需要给frontrear赋初始值-1,表示队列为空。maxSize为队列容量,可以根据需要进行修改。使用动态分配内存来分配arr数组。

void initQueue(Queue *queue, int maxSize) {
    queue->front = -1;
    queue->rear = -1;
    queue->maxSize = maxSize;
    queue->arr = (int*)malloc(maxSize * sizeof(int));
}

3. 判断队列是否为空

frontrear的值相等时,表示队列为空。

int isEmpty(Queue *queue) {
    return queue->front == queue->rear;
}

4. 判断队列是否已满

rear的值等于maxSize - 1时,表示队列已满。

int isFull(Queue *queue) {
    return queue->rear == queue->maxSize - 1;
}

5. 入队

当队列未满时,将数据添加到队列尾部。

void enqueue(Queue *queue, int data) {
    if (isFull(queue)) {
        printf("Queue is full, cannot enqueue!\n");
        return;
    }

    queue->rear++;
    queue->arr[queue->rear] = data;
}

6. 出队

当队列非空时,从队列头部取出数据。

int dequeue(Queue *queue) {
    if (isEmpty(queue)) {
        printf("Queue is empty, cannot dequeue!\n");
        return -1;
    }

    queue->front++;
    return queue->arr[queue->front];
}

7. 查看队头元素

查看队头元素不会改变队列的状态,即不会删除元素。

int peek(Queue *queue) {
    if (isEmpty(queue)) {
        printf("Queue is empty, no element to peek!\n");
        return -1;
    }

    return queue->arr[queue->front + 1];
}

8. 销毁队列

使用完队列后,需将分配的内存释放。

void destroyQueue(Queue *queue) {
    free(queue->arr);
    queue->arr = NULL;
    queue->front = -1;
    queue->rear = -1;
    queue->maxSize = 0;
}

示例说明

示例1

int main() {
    Queue queue;
    initQueue(&queue, 5);
    enqueue(&queue, 1);
    enqueue(&queue, 2);
    enqueue(&queue, 3);
    enqueue(&queue, 4);
    enqueue(&queue, 5);
    enqueue(&queue, 6); // 队列已满,无法入队
    printf("队头元素:%d\n", peek(&queue)); // 输出队头元素
    printf("出队元素:%d\n", dequeue(&queue)); // 出队
    printf("队头元素:%d\n", peek(&queue));
    destroyQueue(&queue);
    return 0;
}

输出结果:

Queue is full, cannot enqueue!
队头元素:1
出队元素:1
队头元素:2

示例2

int main() {
    Queue queue;
    initQueue(&queue, 5);
    printf("队列是否为空:%d\n", isEmpty(&queue)); // 队列为空
    enqueue(&queue, 1);
    enqueue(&queue, 2);
    printf("队列是否为空:%d\n", isEmpty(&queue)); // 队列非空
    printf("队头元素:%d\n", peek(&queue));
    printf("出队元素:%d\n", dequeue(&queue));
    printf("队头元素:%d\n", peek(&queue));
    printf("出队元素:%d\n", dequeue(&queue));
    printf("队列是否为空:%d\n", isEmpty(&queue)); // 队列为空
    destroyQueue(&queue);
    return 0;
}

输出结果:

队列是否为空:1
队列是否为空:0
队头元素:1
出队元素:1
队头元素:2
出队元素:2
队列是否为空:1

总结

以上是使用数组实现队列的详细攻略。队列作为一种基本的数据结构,在算法和程序设计中使用广泛,掌握如何实现队列对于提高编程能力非常有帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现队列的示例详解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言实现企业员工管理系统开发

    C语言实现企业员工管理系统开发攻略 1. 确定功能需求和数据结构 在开始编写代码之前,需要先确定功能需求和相应的数据结构。对于企业员工管理系统,通常需要包括以下功能: 添加员工 删除员工 修改员工信息 查询员工信息 显示员工列表 其中,员工的信息通常包括姓名、年龄、性别、职位等。根据这些需求,可以定义如下数据结构: // 定义 Employee 结构体,表示…

    C 2023年5月23日
    00
  • C语言中单目操作符++、–的实例讲解

    C语言中单目操作符++、–的实例讲解 1. 单目操作符++的说明 在C语言中,单目操作符++可以用来对一个变量进行自增操作,其用法如下: variable++; 等价于: variable = variable + 1; 需要注意的是,单目操作符++可以放在变量的前面和后面,当放在变量前面时,会先执行自增操作,然后再将自增后的值赋给变量;当放在变量后面时,…

    C 2023年5月24日
    00
  • C++基础之this指针与另一种“多态”

    C++基础之this指针与另一种“多态” 1. this指针是什么? 在C++中,this指针有一个特殊的用途,它指向当前对象的指针。我们通常使用this指针来访问当前对象的成员变量和成员函数。 class Person { private: string name; public: Person(string name) { this->name =…

    C 2023年5月22日
    00
  • C++中rapidjson将嵌套map转为嵌套json的讲解

    下面是“C++中rapidjson将嵌套map转为嵌套json的讲解”的完整攻略。 1. 背景介绍 在C++中,我们常常需要将数据结构转换为JSON字符串进行网络传输、存储等操作。但是嵌套的数据结构转化为JSON字符串时,可能会比较麻烦。本篇攻略将会讲解如何使用rapidjson库将嵌套的map转化为嵌套的JSON对象。 2. rapidjson库介绍 ra…

    C 2023年5月23日
    00
  • c语言switch反汇编的实现

    题目中提到的“c语言switch反汇编的实现”,是指在C语言程序中使用switch结构时,该结构会被编译成对应的汇编指令。而反汇编则是指将机器码还原成汇编指令的过程。那么,要实现“c语言switch反汇编的实现”,需要经过以下几个步骤: 步骤1:编写C程序 首先,我们需要编写一个包含switch语句的C程序作为示例。以下是一个简单的示例程序: #includ…

    C 2023年5月23日
    00
  • C++中的数据内存分布原理

    C++中的数据内存分布原理 在理解C++程序的底层运行原理时,必须深入理解数据内存分布的基本原理。 1. 内存地址和指针 内存地址是指内存单元在内存中所对应的位置,通常用十六进制数字表示。内存单元是计算机分配给程序使用的最小单位,通常是8个比特(1字节)。 指针是一个用来存储内存地址的变量,C++中的指针可以用来进行动态内存分配,或者通过指针访问数组和其他数…

    C 2023年5月22日
    00
  • C程序 插入排序

    下面是关于”C程序 插入排序”的完整使用攻略。 插入排序是什么? 插入排序是一种简单直观的、比较常用的排序算法。其基本思想是将待排序的数组分成两部分,已排序和未排序,然后将未排序的元素一个一个插入到已排序部分的正确位置上,直到整个数组都被排序。 插入排序的实现 下面是一份C程序的插入排序实现,以进行升序排序为例。 #include <stdio.h&g…

    C 2023年5月9日
    00
  • C语言数组实现公交车管理系统

    下面是“C语言数组实现公交车管理系统”的完整攻略: 1. 设计思路 公交车管理系统需要对公交路线、车辆和乘客信息进行管理,我们可以设计三个数组来存储这些信息: bus_line[]数组:存储公交路线信息,每个元素表示一条公交路线,包括路线编号、起始站点、终点站点和票价等信息。 bus[]数组:存储车辆信息,每个元素表示一辆车,包括车牌号、所属路线、座位数和已…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部