追梦之旅【数据结构篇】——详解C语言实现顺序队列
详解C语言实现顺序队列~😎
- 前言🙌
- 预备小知识🙌
- 队列的概念及结构😊
- 1.顺序队列头文件编写🙌
- 2.Queue.c文件的编写🙌
- 1)队列的初始化函数实现😊
- 2)队列的销毁函数实现😊
- 3)队尾入函数实现😊
- 4)队头出函数实现😊
- 5)取队首元素函数实现😊
- 6)取队尾元素函数实现😊
- 7)队列元素个数函数实现😊
- 2)判空函数实现😊
- 3.Test.c文件的编写:🙌
- 总结撒花💞

😎博客昵称:博客小梦
😊最喜欢的座右铭:全神贯注的上吧!!!
😊作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!
😘博主小留言:哈喽!😄各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!😘
前言🙌
哈喽各位友友们😊,我今天又学到了很多有趣的知识,现在迫不及待的想和大家分享一下!😘我仅已此文,手把手带领大家详解C语言实现顺序队列~ 结合链表的相关算法,根据队列先进先出的结构特点,实现我们顺序队列。都是精华内容,可不要错过哟!!!😍😍😍
预备小知识🙌
队列的概念及结构😊
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出
FIFO(First In First Out)
- 入队列:进行插入操作的一端称为队尾
- 出队列:进行删除操作的一端称为队头
队列的结构示意图:
1.顺序队列头文件编写🙌
头文件的编写的整体思路分析:
这里是有关头文件的编写和各种功能函数的声明,首先用typedef关键字给存储数据类型取别名,这样做的好处是以后想要改变队列的数据类型只需修改typedef int DataType;里的int即可。定义一个结构体,DataType a,DataType Top队首元素下标,DataType Last。DataType Capacity以及队列容量。然后是各个功能函数声明*
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>typedef int DataType;
typedef struct SqQueue
{DataType* a;DataType Top;DataType Last;DataType Capacity;}SQ;
//队列的初始化
void SqQueueInit(SQ* ps);
//队列的销毁
void SqQueueDestory(SQ* ps);
//队尾入
void SqQueuePush(SQ* ps, DataType x);
//队头出
void SqQueuePop(SQ* ps);
//取队首元素
DataType SqQueueFront(SQ* ps);
//取队尾元素
DataType SqQueueBack(SQ* ps);
//队列元素个数
DataType SqQueueSize(SQ* ps);
//判空
bool SqQueueEmpty(SQ* ps);
2.Queue.c文件的编写🙌
1)队列的初始化函数实现😊
编写的整体思路分析:
先用assert确保ps指针的有效性,然后让指针a为NULL,让队列容量,头尾下标都为0.
//队列的初始化
void SqQueueInit(SQ* ps)
{assert(ps);ps->a = NULL;ps->Capacity = 0;ps->Top = ps->Last = 0;}
2)队列的销毁函数实现😊
编写的整体思路分析:
先用assert确保ps指针的有效性,然后将a指向的空间返还给操作系统。然后将a置为NULL,防止野指针的问题。然后让 ps->Last = ps->Top = ps->Capacity = 0;
/队列的销毁
void SqQueueDestory(SQ* ps)
{assert(ps); free(ps->a);ps->a = NULL;ps->Last = ps->Top = ps->Capacity = 0;}
3)队尾入函数实现😊
编写的整体思路分析:
先用assert确保ps指针的有效性,如果ps->Last == ps->Capacity,则让节点个数增加,为0的时候先生成四个节点数,如果满了则是增2倍算法思想。然后用realloc动态申请空间,用if判断是否增容成功。然后将指针a指向新开辟的空间所在的地址,把容量数值改为newnode。如果一开始为空的情况,则让ps->a[ps->Top] = ps->a[ps->Last] = x
//队尾入
void SqQueuePush(SQ* ps, DataType x)
{assert(ps);if (ps->Last == ps->Capacity){DataType newnode = ps->Capacity == 0 ? 4 : ps->Capacity * 2;DataType* temp = (DataType*)realloc(ps->a,sizeof(DataType)*newnode);if (temp == NULL){printf("realloc fail\n");exit(-1);}ps->a = temp;ps->Capacity = newnode;}if (ps->Last == ps->Top){ps->a[ps->Top] = ps->a[ps->Last] = x;ps->Last++;}else{ps->a[ps->Last] = x;ps->Last++;}}
4)队头出函数实现😊
编写的整体思路分析:
先用assert确保ps指针的有效性,调用判空函数,如果队列为空则不用执行此操作,执行则报错。直接让Top加1即可。
//队头出
void SqQueuePop(SQ *ps)
{assert(ps);assert(!SqQueueEmpty(ps));ps->Top++;
}
5)取队首元素函数实现😊
编写的整体思路分析:
先用assert确保ps指针的有效性,直接返回下标为Top的元素的数值。
//取队首元素
DataType SqQueueFront(SQ* ps)
{assert(ps);return ps->a[ps->Top];
}
6)取队尾元素函数实现😊
编写的整体思路分析:
先用assert确保ps指针的有效性,直接返回下标为Last-1的元素的数值。
//取队尾元素
DataType SqQueueBack(SQ* ps)
{return ps->a[ps->Last-1];
}
7)队列元素个数函数实现😊
编写的整体思路分析:
先用assert确保ps指针的有效性,直接返回下标为Last的数值。
//队列元素个数
DataType SqQueueSize(SQ* ps)
{assert(ps);return ps->Last;}
2)判空函数实现😊
编写的整体思路分析:
先用assert确保ps指针的有效性,如果 ps->Top ==ps->Last为真,则返回1,队列为空。条件为假,则返回0。
//判空
bool SqQueueEmpty(SQ* ps)
{assert(ps);return(ps->Top ==ps->Last);
}
3.Test.c文件的编写:🙌
#include"Queue.h"void Test1()
{printf("队列输出:\n");SQ s;SqQueueInit(&s);SqQueuePush(&s, 1);SqQueuePush(&s, 2);SqQueuePush(&s, 3);SqQueuePush(&s, 4);SqQueuePush(&s, 5);SqQueuePush(&s, 6);SqQueuePush(&s, 7);while (!SqQueueEmpty(&s)){printf("%d", SqQueueFront(&s));SqQueuePop(&s);}printf("\n");SqQueueDestory(&s);}
void Test2()
{SQ s;SqQueueInit(&s);SqQueuePush(&s, 1);SqQueuePush(&s, 2);SqQueuePush(&s, 3);SqQueuePush(&s, 4);SqQueuePush(&s, 5);SqQueuePush(&s, 6);SqQueuePush(&s, 7);printf("队列首元素:%d\n", SqQueueFront(&s));printf("队列尾元素:%d\n", SqQueueBack(&s));printf("队列元素个数:%d\n", SqQueueSize(&s));SqQueueDestory(&s);}int main()
{Test1();Test2();return 0;
}
功能测试结果展示图:
总结撒花💞
本篇文章旨在分享详解C语言实现顺序队列。希望大家通过阅读此文有所收获!😘如果我写的有什么不好之处,请在文章下方给出你宝贵的意见😊。如果觉得我写的好的话请点个赞赞和关注哦~😘😘😘
相关文章:

追梦之旅【数据结构篇】——详解C语言实现顺序队列
详解C语言实现顺序队列~😎前言🙌预备小知识🙌队列的概念及结构😊1.顺序队列头文件编写🙌2.Queue.c文件的编写🙌1)队列的初始化函数实现😊2)队列的销毁函数实现Ƕ…...
使用自己的数据集Fine-tune PaddleHub预训练模型
使用自己的数据Fine-tune PaddleHub预训练模型 果农需要根据水果的不同大小和质量进行产品的定价,所以每年收获的季节有大量的人工对水果分类的需求。基于人工智能模型的方案,收获的大堆水果会被机械放到传送带上,模型会根据摄像头拍到的图片…...

带组态物联网平台源码 代码开源可二次开发 web MQTT Modbus
物联网IOT平台开发辅助文档 技术栈:JAVA [ springmvc / spring / mybatis ] 、Mysql 、Html 、 Jquery 、css 使用协议和优势: TCP/IP、HTTP、MQTT 通讯协议 1.1系统简介 IOT通用物联网系统平台带组态,是一套面向通用型业务数据处理的系统…...
计算机网络的发展历程
计算机网络的历史可以追溯到20世纪60年代。那个时候,计算机还非常昂贵,只有少数大型机可以被用于处理重要任务。这些大型机通常被安装在大型企业、政府机构和大学中。由于这些机器非常昂贵,许多企业、机构和大学只能通过终端连接来访问它们。…...

【华为OD机试模拟题】用 C++ 实现 - 不含 101 的数(2023.Q1)
最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…...
面试题-下单后位置信息上报的方案
面试题:外卖下单后每10min上报位置事件的具体实现方案。需要考虑哪些点。存储方案:考虑到数据量很大,需要快速响应查询请求,建议使用分布式存储方案,如 HBase、MongoDB 等。这些分布式存储系统可以水平扩展,…...

视觉人培训团队把它称之为,工业领域人类最伟大的软件创造,它的名字叫Halcon
目前为止,世界上综合能力强大的机器视觉软件,,它的名字叫Halcon。 视觉人培训团队把它称之为,工业领域人类最伟大的软件创造,它的名字叫Halcon。 持续不断更新最新的图像技术,软件综合能力持续提升。 综…...

干了2年的手工点点点,感觉每天浑浑噩噩,我的自动化测试之路...
作为一个测试人员,从业年期从事手工测试的工作是没有太多坏处的,当然,如果一直点来点去那么确实自身得不到提高,这时候选择学习自动化测试是一件很有必要的事情,一来将自己从繁重的重复工作中解放出来,从事…...

嵌入式系统硬件设计与实践(学习方法)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 刚读书的时候,对什么是嵌入式,其实并不太清楚。等到自己知道的时候,已经毕业很多年了。另外对于计算机毕业的学…...

如何拥有自己的Gitee代码仓库
本教程适用码云代码托管平台 https://gitee.com/ 首先在电脑上安装Git(哔站有安装Git教程)和注册gitee账号后再来阅读此教程 1、在设置页面中点击 SSH公钥 2、点击 怎样生成公钥 3、点击公钥管理 4、点击 生成\添加SSH公钥 5、打开终端 输入如图红框中的…...

通用信息抽取技术UIE产业案例解析,Prompt 范式落地经验分享!
想了解用户的评价究竟是“真心夸赞”还是“阴阳怪气”?想快速从多角色多事件的繁杂信息中剥茧抽丝提取核心内容?想通过聚合相似事件准确地归纳出特征标签?……想了解UIE技术在产业中的实战落地经验?通用信息抽取技术 UIE 产业案例…...

integrationobjects/OPC AE Client ActiveX Crack
使用 OPC AE 客户端 ActiveX 进行快速 OPC 警报和事件客户端编程! OPC AE Client ActiveX包括多个 OPC ActiveX 控件,可以轻松嵌入到最流行的 OLE 容器中。这允许用户与任何 OPC AE 服务器连接并实时检索警报和事件。 这种易于使用的 OPC AE ActiveX 简化…...

JavaScript HTML DOM 简介
文章目录JavaScript HTML DOM 简介HTML DOM (文档对象模型)HTML DOM 树查找 HTML 元素通过 id 查找 HTML 元素通过标签名查找 HTML 元素通过类名找到 HTML 元素下面我们将学到如下内容JavaScript HTML DOM 简介 通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素…...

interrupt多线程设计模式
1. 两阶段终止-interrupt Two Phase Termination 在一个线程T1中如何“优雅”终止线程T2?这里的【优雅】指的是给T2一个料理后事的机会。 错误思路 ● 使用线程对象的stop()方法停止线程(强制杀死) —— stop()方法…...

Spring IoC 和 Spring AOP
Spring IoC Ioc(Inversion of control:即控制反转)是一种设计思想,而不是一种具体的技术实现。IoC的思想就是将原本在程序中手动创建对象的控制权交给Spring框架来管理。 不过, IoC 并非 Spring 特有,在其…...

taobao.top.oaid.merge( OAID订单合并 )
¥开放平台免费API必须用户授权 基于OAID(收件人ID, Open Addressee ID)做订单合并,确保相同收件人信息的订单合并到相同组。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请…...

Python自动获取海量ip,再也不用愁被封啦~
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 本次网站: 本文所有模块\环境\源码\教程皆可点击文章下方名片获取此处跳转 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 模块使用: import parsel >>> pip install parsel…...
XLua学习笔记 { }
Lua调用C# 通过生成的适配代码进行调用 把在白名单上和打上[LuaCallCSharp]标签的C#类转换成Lua的table,然后注册C#类的方法和属性到table中。性能好,但占用安装包的内存大 通过反射机制进行调用 性能差,在运行的时候才去查找C#的方法&#…...
推荐程序员收藏的几个技术社区以及工具网站
常用技术社区 1、GitHub 网站地址:https://github.com/ 全球最大的开源社区,这点我想大家都清楚。但是今年被微软收购,之前很多的人在那说可能以后GitHub就会变样,但是事实并非如此,目前还没有收到什么信息,…...

StopWatch计时器
前言 开发中,为了评估性能,我们通常会使用System.currentTimeMillis() 去计算程序运行耗时 long startTimeSystem.currentTimeMillis();//业务代码... long endTimeSystem.currentTimeMillis(); System.out.println("耗时:" (endTime-startT…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...