C语言实现顺序循环队列实例

yizhihongxing

C语言实现顺序循环队列实例

什么是顺序循环队列?

在计算机科学中,队列(Queue)是一个数据结构,用于存储按顺序排列的元素,具有FIFO(First In First Out)的特点。顺序循环队列是一种基于数组实现的队列,在队列尾部加入元素,在队列头部删除元素。

顺序循环队列的实现

数据结构定义

顺序循环队列的核心是数据结构的定义,它包含以下信息:

  • 队列最大长度max_length
  • 队头位置head
  • 队尾位置tail
  • 数据存储data
#define MAX_LENGTH 10

typedef struct {
    int max_length;
    int head;
    int tail;
    int data[MAX_LENGTH];
}CircleQueue;

初始化

当创建一个空队列时,必须先将队列的头部和尾部位置都指向0,代表当前队列没有数据。

void init(CircleQueue *queue)
{
    queue->max_length = MAX_LENGTH;
    queue->head = 0;
    queue->tail = 0;
}

入队

当向队列里添加一个元素时,先判断队列是否已满,即队尾位置是否与队列最大长度相等。如果是,说明队列已满,无法添加新元素。否则,将新元素添加到队尾,同时更新队尾位置。

int enqueue(CircleQueue *queue, int value)
{
    if (queue->tail == queue->max_length) {
        printf("队列已满,无法添加元素\n");
        return -1;
    }
    queue->data[queue->tail] = value;
    queue->tail++;
    return 0;
}

出队

当从队列中删除一个元素时,先判断队列是否为空,即队头位置是否等于队尾位置。如果是,说明队列为空,没有元素可以被删除。否则,将队头元素删除,同时更新队头位置。

int dequeue(CircleQueue *queue, int *pvalue)
{
    if (queue->head == queue->tail) {
        printf("队列为空,没有元素可以被删除\n");
        return -1;
    }
    *pvalue = queue->data[queue->head];
    queue->head++;
    return 0;
}

示例说明

以下是一个使用顺序循环队列实现的队列的示例代码。通过该代码,可以更好地理解上述数据结构定义及入队、出队操作的逻辑。

#include <stdio.h>

#define MAX_LENGTH 10

typedef struct {
    int max_length;
    int head;
    int tail;
    int data[MAX_LENGTH];
}CircleQueue;

void init(CircleQueue *queue)
{
    queue->max_length = MAX_LENGTH;
    queue->head = 0;
    queue->tail = 0;
}

int enqueue(CircleQueue *queue, int value)
{
    if (queue->tail == queue->max_length) {
        printf("队列已满,无法添加元素\n");
        return -1;
    }
    queue->data[queue->tail] = value;
    queue->tail++;
    return 0;
}

int dequeue(CircleQueue *queue, int *pvalue)
{
    if (queue->head == queue->tail) {
        printf("队列为空,没有元素可以被删除\n");
        return -1;
    }
    *pvalue = queue->data[queue->head];
    queue->head++;
    return 0;
}

int main()
{
    CircleQueue queue;
    init(&queue);

    int value, i;
    for (i = 0; i < 11; i++) {
        if (enqueue(&queue, i) == -1) {
            break;
        }
    }

    for (i = 0; i < 11; i++) {
        if (dequeue(&queue, &value) == -1) {
            break;
        }
        printf("%d,", value);
    }
    return 0;
}

程序输出结果如下:

队列已满,无法添加元素
0,1,2,3,4,5,6,7,8,9,

该示例代码中,创建了一个队列,通过for循环往队列中添加了11个元素。当队列已满时,无法继续添加新元素。接着循环从队列中取出元素,并将取出的元素打印到屏幕上。在没有取出所有元素之前,如果队列为空,将停止取出元素。最终,程序输出了10个元素的值。

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

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

相关文章

  • C 程序 查找最大的三个数字

    作为网站的作者,我很高兴向你展示使用C语言实现在一个数组中查找最大的三个数字的完整攻略。下面是具体的步骤: 步骤一:定义数组 首先,我们需要定义一个包含数字的数组,这个数组可以是任何大小,这里我们定义一个包含10个元素的数组,数组中的元素分别为:10, 20, 30, 40, 50, 60, 70, 80, 90, 100。 int arr[10] = {1…

    C 2023年5月9日
    00
  • C++如何实现简易扫雷游戏

    以下是“C++如何实现简易扫雷游戏”的完整攻略: 1. 游戏规则 扫雷游戏的规则如下:给定一个网格,每个格子可能是地雷或者数字,玩家需要翻转每个格子,如果它是地雷,则游戏结束,如果是数字,则表示周围八个格中地雷的数量,玩家需要根据数字推测哪些格子是地雷,最后揭示出所有非地雷格子以完成游戏。 2. 实现步骤 在 C++ 中,我们可以采用面向对象的思想,定义格子…

    C 2023年5月23日
    00
  • 详解dll动态库的开发与调用及文件的读写小程序

    详解dll动态库的开发与调用及文件的读写小程序 动态链接库(DLL)是一种非常重要的可执行文件类型,它允许各种应用程序在加载时动态地调用它所包含的函数或者资源。本文将详细说明如何开发和调用DLL动态链接库,并提供文件读写小程序的示例。 DLL动态库开发 1. DLL的定义 首先,我们要定义我们的DLL动态链接库,用到的头文件如下: #ifndef _MY_D…

    C 2023年5月23日
    00
  • C语言实现高精度加减法

    C语言实现高精度加减法 简介 高精度计算是指多位数的加、减、乘、除等算法。在计算机程序设计中,常常需要进行高精度计算。C语言是一种强大的编程语言,可以通过C语言实现高精度的加、减法运算。 实现思路 1. 字符串存储 高精度计算需要用到大量的数字,超过了C语言中能够表示的整型、浮点型数据类型范围,因此可以采用字符串存储数字。 2. 进位处理 在高精度计算中,进…

    C 2023年5月23日
    00
  • c++类成员函数如何做函数参数

    关于c++类成员函数如何做函数参数,具体可以按照以下步骤来进行操作: 1. 类成员函数定义 首先需要定义一个使用类成员函数作为参数的函数,该函数需要按照以下格式进行定义: void function_name(class_name& obj, return_type (class_name::*function_name)(function_para…

    C 2023年5月23日
    00
  • 解析C++中指向对象的指针使用

    当我们需要使用C++中的指针来对一个对象进行操作时,需要使用指向对象的指针。 以下是可以用来解析C++中指向对象的指针使用的攻略: 1. 创建指向对象的指针 指向对象的指针是一个存储对象地址的变量,指针变量具有自己的地址和类型,它可以为一个类的实例分配并且可以通过调用类成员函数来操作对象。 指向对象的指针有时候被称为“该对象的指针”。通常,创建指向对象的指针…

    C 2023年5月22日
    00
  • PHP5.4中json_encode中文转码的变化小结

    下面给您简单介绍一下“PHP5.4中json_encode中文转码的变化小结”这个主题的攻略。 什么是json_encode()? json_encode() 是PHP语言提供的一个函数,它用于将PHP数据转换为json格式。 PHP5.4中json_encode中文转码的变化 在 PHP 5.4 版本之前,json_encode() 函数对于非 ASCII…

    C 2023年5月23日
    00
  • C程序 比较两个字符串的词性

    下面详细讲解如何使用C程序比较两个字符串的词性。 1. 简介 本C程序用于比较两个字符串的词性是否相同,主要基于基于哈工大的LTP自然语言处理工具实现。 2. 使用攻略 2.1 安装 首先需要安装LTP,可以参考LTP官方文档进行安装。安装完成后,需要将LTP的相关库文件添加到系统环境变量中。 另外,需要安装CMake进行编译。可以在官网上下载对应系统的安装…

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