[数据结构]:06-队列(链表)(C语言实现)

news2024/9/24 7:18:23

目录

前言

已完成内容

队列实现

01-开发环境

02-文件布局

  03-代码

01-主函数

02-头文件

03-QueueCommon.cpp

04-QueueFunction.cpp

结语


前言

        此专栏包含408考研数据结构全部内容,除其中使用到C++引用外,全为C语言代码。使用C++引用主要是为了简化指针的使用,避免二重指针的出现。

已完成内容

[数据结构]:01-顺序表(C语言实现)_Chandni.的博客-CSDN博客

[数据结构]:02-单链表(C语言实现)_Chandni.的博客-CSDN博客

[数据结构]:03-栈(C语言实现)_Chandni.的博客-CSDN博客

[数据结构]:04-循环队列(数组)(C语言实现)_Chandni.的博客-CSDN博客

[数据结构]:05-循环队列(链表)(C语言实现)_Chandni.的博客-CSDN博客

队列实现

01-开发环境

        语言:C/C++14

        编译器:MinGW64

        集成开发环境:CLion2022.1.3

02-文件布局

        请在CLion集成开发环境中创建C++可执行程序,否则无法运行,原因上面已解释。

                        

  03-代码

01-主函数

        用于测试和初始化队列。

#include "./Head/QueueData.h"
#include "./Source/QueueCommon.cpp"
#include "./Source/QueueFunction.cpp"

int main() {
    LinkedQueue LQ;
    // 初始化
    InitializationQueue(LQ);
    if (JudgeQueueEmpty(LQ)) {
        printf("Empty\n");
    } else {
        printf("False\n");
    }
    printf("-----------------------\n");

    // 入队
    QueuePush(LQ, 1);
    QueuePush(LQ, 2);
    QueuePush(LQ, 3);
    QueuePrint(LQ);
    printf("-----------------------\n");

    // 出队
    ElemType value;
    QueuePop(LQ, value);
    printf("Queue Pop Value = %d\n", value);
    QueuePop(LQ, value);
    printf("Queue Pop Value = %d\n", value);
    QueuePop(LQ, value);
    printf("Queue Pop Value = %d\n", value);
    QueuePop(LQ, value); // 队列中无元素,输出Queue Empty.
    printf("-----------------------\n");

    // 入队
    QueuePush(LQ, 2);
    QueuePush(LQ, 3);
    QueuePush(LQ, 4);
    QueuePush(LQ, 5);
    QueuePush(LQ, 2);
    QueuePush(LQ, 3);
    QueuePrint(LQ);
    printf("-----------------------\n");
    return 0;
}

02-头文件

        用于存储结构体和常量等。

//
// Created by 24955 on 2023-02-26.
//

#ifndef INC_01_ARRAYQUEUE_QUEUEDATA_H
#define INC_01_ARRAYQUEUE_QUEUEDATA_H
// 头文件
#include <stdio.h>
#include <stdlib.h>

// 常量
typedef int ElemType;

// 结构体
typedef struct LinkedQueueNode {
    ElemType data;
    struct LinkedQueueNode *next;
} LinkedQueueNode;
typedef struct {
    struct LinkedQueueNode *front, *rear;
} LinkedQueue;
#endif //INC_01_ARRAYQUEUE_QUEUEDATA_H

03-QueueCommon.cpp

        用于存储公共函数以及队列的输出。

//
// Created by 24955 on 2023-02-26.
//
// 初始化队列
void InitializationQueue(LinkedQueue &LQ) {
    LQ.front = LQ.rear = (LinkedQueueNode *) malloc(sizeof(LinkedQueueNode));
    LQ.front->next = NULL;
}

// 判断队列是否为空
bool JudgeQueueEmpty(LinkedQueue LQ) {
    /*
     * 1. 头指针和尾指针相等则队列为空
     * 2. 这里的指针加引号,只是一种标识,这样说方便理解*/
    if (LQ.front == LQ.rear) {
        return true;
    } else {
        return false;
    }
}

// 输出队列元素
void QueuePrint(LinkedQueue LQ) {
    /*
     * 1. 判断队列是否为空
     * 2. 若不为空则从头输出*/
    if (!JudgeQueueEmpty(LQ)) {
        LQ.front = LQ.front->next;
        while (LQ.front) {
            printf("%3d", LQ.front->data);
            LQ.front = LQ.front->next;
        }
        printf("\n");
    } else {
        printf("Queue Empty.\n");
    }
}

04-QueueFunction.cpp

        用于存储入队、出队等函数。

//
// Created by 24955 on 2023-02-26.
//
// 入队
void QueuePush(LinkedQueue &LQ, ElemType value) {
    LinkedQueueNode *NewNode = (LinkedQueueNode *) malloc(sizeof(LinkedQueueNode));
    NewNode->data = value;
    NewNode->next = NULL;
    LQ.rear->next = NewNode;
    LQ.rear = NewNode;
}

// 出队
void QueuePop(LinkedQueue &LQ, ElemType &value) {
    /*
     * 1. 判断队列是否已空
     * 2. 若非空则出队*/
    if (!JudgeQueueEmpty(LQ)) {
        LinkedQueueNode *Node = LQ.front->next;
        value = Node->data;
        LQ.front->next = Node->next;
        // 删除最后一个元素
        if (Node == LQ.rear) {
            LQ.rear = LQ.front;
        }
        free(Node);
    } else {
        printf("Queue Empty.\n");
    }
}

结语

        本章队列实现形式为链表实现形式,队列还可使用数组实现形式,但相对较为简单,且408考试涉及概率不大(多为队列的链表实现形式),因此队列的数组实现形式本专栏不再记录。

        此博客主要用于408考研数据结构C语言实现记录,内有不足,可留言,可讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Cache的使用--快速上手篇

系列文章目录 分页查询–Java项目实战篇 全局异常处理–Java实战项目篇 完善登录功能–过滤器的使用 更多该系列文章请查看我的主页哦 文章目录系列文章目录前言一、Spring Cache介绍二、Spring Cache的使用1. 导入依赖2. 配置信息3. 在启动类上添加注解4. 添加注解4.1 CacheP…

duboo+zookeeper分布式架构入门

分布式 dubbo Zookeeper 分布式系统就是若干独立计算机的集合&#xff08;并且这些计算机之间相互有关联&#xff0c;就像是一台计算机中的C盘F盘等&#xff09;&#xff0c;这些计算对于用户来说就是一个独立的系统。 zookeeper安装 下载地址&#xff1a;Index of /dist/z…

MyBatis——增删改查操作的实现

开启mybatis sql日志打印 可以在日志中看到sql中执行的语句 在配置文件中加上下面这几条语句 mybatis.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImpl logging.level.com.example.demodebug查询操作 根据用户id查询用户 UserMapper&#xff1a; User…

RTD2169芯片停产|完美替代RTD2169芯片|CS5260低BOM成本替代RTD2169方案设计

RTD2169芯片停产|完美替代RTD2169芯片|CS5260低BOM成本替代RTD2169方案设计 瑞昱的RTD2169芯片目前已经停产了&#xff0c; 那么之前用RTD2169来设计TYPEC转VGA方案的产品&#xff0c;该如何生产这类产品&#xff1f;且RTD2169芯片价格较贵&#xff0c;芯片封装尺寸是QFN40&…

JS函数的4种调用方式

函数可以声明定义&#xff0c;也可以是一个表达式&#xff0c;函数使用关键字function定义函数被定义时&#xff0c;函数内部的代码不会执行函数被调用时&#xff0c;函数内部的代码才会执行函数有四种调用方式&#xff0c;每种方式的不同在于this的初始化。&#xff08;this是…

HTML#1快速入门

一. 简介HTML是一门语言, 所有的网页都是用HTML编写的HTML(Hyper Text Markup Language): 超文本(超越了文本限制,除了文字信息还可以定义图片,音频,视频等)标记语言(有标签构成的语言)W3C标准: 网页主要由三部分组成(1) 结构: HTML(2) 表现: CSS(3) 行为: JavaScript二. 快速入…

optional说明

1.说明 public final class Optional<T> extends Object 可能包含或不包含非空值的容器对象。 如果一个值存在&#xff0c; isPresent()将返回true和get()将返回值。 提供依赖于存在或不存在包含值的其他方法&#xff0c;例如orElse() &#xff08;如果值不存在则返回…

印度这事真的干的挺棒的! |

来源&#xff1a;statista最近逛外网看到一张图&#xff0c;是关于印度家庭自来水供应的对比图。Crore是印度的单位千万(卢比)&#xff0c;所以他们从2019年供应3.23千万家庭&#xff0c;增长到了2022年的9.57万家庭&#xff0c;印度这事真的干的挺棒的&#xff01;一直以来印度…

【USB】windows热插拔通知接口分析

文章目录接口介绍概述过滤器介绍举例接收通知创建窗口参考文档接口介绍 概述 window提供了RegisterDeviceNotificationW方法&#xff0c;可以用来监听设备的热插拔事件。 HDEVNOTIFY RegisterDeviceNotificationW([in] HANDLE hRecipient,[in] LPVOID NotificationFilter,[in]…

Android 多种支付方式的优雅实现

场景App 的支付流程&#xff0c;添加多种支付方式&#xff0c;不同的支付方式&#xff0c;对应的操作不一样&#xff0c;有的会跳转到一个新的webview&#xff0c;有的会调用系统浏览器&#xff0c;有的会进去一个新的表单页面&#xff0c;等等。并且可以添加的支付方式也是不确…

计算机网络-网络核心(day02)

网络核心 最主要的功能&#xff1a; 数据交换的功能 转发&#xff0c;路由 主要分为线路交换&#xff0c;分组交换 线路交换 可以认为所有的电话通信都是线路交换 线路交换&#xff0c;比如打电话&#xff0c;需要先建立连接&#xff08;主机要经过哪些链路哪些交换机&#…

软件测试之因果图法

因果图法 1. 概述 因果图法是一种**利用图解法分析输入条件、输出结果的各种组合情况,**从而设计测试用例的方法. 因果图法适用于有多个输入和多个输出&#xff0c;而且输入和输入之间有相互的组合关系&#xff0c;输入和输出之间有相互的制约和依赖关系. 使用场景和判定表…

第一个 Spring MVC 注解式开发案例(初学必看)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

HashMap存入一个键值对的中间发生了什么(浅读源码)

存入键值对就是调用HashMap.put()过程&#xff08;面试高频问题&#xff09;首先放出粗狂的总结假如是Integer类型就会先查看IntegerCache中是否存在这个数字&#xff0c;有就从缓存中调用&#xff0c;没有则创建新的Integer对象&#xff08;String类型没有这个过程&#xff0c…

【JavaSE】复习(进阶)

文章目录1.final关键字2.常量3.抽象类3.1概括3.2 抽象方法4. 接口4.1 接口在开发中的作用4.2类型和类型之间的关系4.3抽象类和接口的区别5.包机制和import5.1 包机制5.2 import6.访问控制权限7.Object7.1 toString()7.2 equals()7.3 String类重写了toString和equals8.内部类8.1…

【谷粒学院】vue、axios、element-ui、node.js(44~58)

44.前端技术-vue入门 &#x1f9e8;Vue.js 是什么 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架。 Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的工具…

RK3568编译Android11和目录讲解

文章目录 前言一、下载android11源码二、环境搭建1.增加交换内存三、编译瑞芯微原厂源码四、目录讲解总结前言 本文记录在Ubuntu18.04中编译Android11,只有编译了源码,后面才能进行驱动的开发,有兴趣的小伙伴可以和我一起学习吧! 提示:以下是本篇文章正文内容,下面案例可…

@Value注解的使用(可用于配置文件)

基本概念Value&#xff1a;注入配置文件中的内容。只要是spring的注解类&#xff08;service,compotent, dao等&#xff09;中都可以。Component&#xff1a;泛指组件&#xff0c;当组件不好归类的时候&#xff0c;可以使用这个注解进行标注。AutoWired&#xff1a;自动导入依赖…

【JAVA程序设计】(C00104)基于Springboot的家庭理财管理系统——有文档

基于Springboot的家庭理财管理系统项目简介项目获取开发环境项目技术运行截图运行视频项目简介 基于Springboot开发的家庭理财管理系统设计与实现共分为三个角色&#xff1a;系统管理员、家庭管理员、家庭用户 管理员角色包含以下功能&#xff1a; 用户管理、修改密码、角色管…

【C++】map和set用法详解

文章目录1.关联式容器2.键值对3.树形结构的关联式容器3.1 set3.1.1 set的介绍3.1.2 set的模板参数列表3.1.3 set的使用3.2 mapmap的介绍map的模板参数列表map的使用关于map的元素访问总结3.3multimap1.关联式容器 我们接触过STL中的部分容器&#xff0c;比如&#xff1a;vecto…