保定网站建设保定徐州模板建站哪家好

pingmian/2026/1/25 22:17:59/文章来源:
保定网站建设保定,徐州模板建站哪家好,温州企业建站系统,asp 英文企业网站 免费#x1f493;作者简介#x1f389;#xff1a;在校大二迷茫大学生 #x1f496;个人主页#x1f389;#xff1a;小李很执着 #x1f497;系列专栏#x1f389;#xff1a;数据结构 每日分享✨#xff1a;到头来#xff0c;有意义的并不是结果#xff0c;而是我们度… 作者简介在校大二迷茫大学生 个人主页小李很执着 系列专栏数据结构 每日分享✨到头来有意义的并不是结果而是我们度过的那些无可替代的时间❣️❣️❣️ 目录 1.栈 1.栈的概念及结构 2.栈的实现 3.代码实现 1.总体实现 2.详细解析 1.栈的初始化 2.释放了动态数组中的空间 3.入栈操作 4. 栈顶元素删除 5.获取栈顶元素 6.判断栈ST是否为空 7.获取栈大小 3.整体代码  1.Stack.h 2.Stach.c 3.test.c  2.队列 1.队列的概念及结构 2.队列的实现 3.代码实现  1.总体实现 2. 详细解析 1.初始化队列 2.销毁队列 3.往队列中插入一个元素 4.队列的出队 5.获取队列头部元素 6.获取队列最后一个元素 7.判断队列是否为空 8.获取队列当前元素数量 3.整体代码 1.Queue.h 2.Queue.c 3.Test.c 1.栈 1.栈的概念及结构 栈一种特殊的线性表其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶另一端称为栈底。栈中的数据元素遵守后进先出LIFOLast In First Out的原则。 压栈栈的插入操作叫做进栈/压栈/入栈入数据在栈顶。 出栈栈的删除操作叫做出栈。出数据也在栈顶。 2.栈的实现 栈的实现一般可以使用数组或者链表实现相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。  3.代码实现 1.总体实现   1.栈的初始化 void STInit(ST* pst);  2.释放了动态数组中的空间 void STDestroy(ST* pst); 3.入栈操作 void STPush(ST* pst, STDataType x); 4. 栈顶元素删除 void STPop(ST* pst);  5.获取栈顶元素 STDataType STTop(ST* pst);  6.判断栈ST是否为空 bool STEmpty(ST* pst);  7.获取栈大小 int STSize(ST* pst); 2.详细解析 1.栈的初始化 void STInit(ST* pst) {assert(pst);pst-a NULL;pst-capacity 0;// 表示top指向栈顶元素的下一个位置pst-top 0;// 表示top指向栈顶元素//pst-top -1; } 这是一个栈的初始化函数函数定义如下 void STInit(ST* pst);其中ST是一个结构体类型包含栈元素的数组指针a栈的容量capacity以及指向栈顶元素的下一个位置的指针top。 函数内部的实现如下 assert(pst); // 检查指针参数是否为NULLpst-a NULL; // 初始化栈元素数组指针为NULL pst-capacity 0; // 初始化栈的容量为0// 表示top指向栈顶元素的下一个位置 pst-top 0;// 表示top指向栈顶元素 //pst-top -1;函数内部的注释提供了两种实现方式表示top指针的指向方式 pst-top 0; 表示top指向栈顶元素的下一个位置。例如初始状态下栈被认为是空的因此top指向数组的第一个位置即下标为0的位置。 pst-top -1; 表示top指向栈顶元素。例如初始状态下栈被认为是空的因此top指向数组最后一个位置即下标为capacity-1的位置。在这种情况下当向栈中压入第一个元素时需要先将top指向0表示栈中有一个元素而不是-1。 2.释放了动态数组中的空间 void STDestroy(ST* pst) {assert(pst);free(pst-a);pst-a NULL;pst-top pst-capacity 0; } 该函数释放了动态数组中的空间并将栈中保存的指针置为 NULL防止出现悬挂指针的情况。 具体分析 assert(pst); 该语句使用 assert 宏函数判断传入的指针 pst 是否为空如果为空将会出现错误。 free(pst-a); 该语句使用 free 函数释放了动态数组 a 所占用的空间。 pst-a NULL; 将栈中保存的数组指针 a 置为 NULL防止出现悬挂指针的情况。 pst-top pst-capacity 0; 将栈中保存的元素数量 top 和数组容量 capacity 置为 0表示栈已经被清空了。 3.入栈操作 该函数用于将元素x压入栈中。 函数中的assert(pst)用于确保输入的栈指针pst不为空。 当栈已满时需要重新分配更大的内存空间以存储更多的元素。在这里使用动态内存分配函数realloc()来重新分配空间。如果分配失败则会输出错误信息并返回。 当空间分配成功后元素x将被添加到栈的顶部pst-top会自增表示该栈顶指针已向上移动一位。 最后该函数会在操作完成后返回。 void STPush(ST* pst, STDataType x) {assert(pst);if (pst-top pst-capacity){int newcapacity pst-capacity 0 ? 4 : pst-capacity * 2;STDataType* tmp (STDataType*)realloc(pst-a, sizeof(STDataType) * newcapacity);if (tmp NULL){perror(realloc fail);return;}pst-a tmp;pst-capacity newcapacity;}pst-a[pst-top] x;pst-top; } 4. 栈顶元素删除 首先使用assert宏函数对传入的指针pst进行断言确保其不为空。然后再次使用assert宏函数判断栈顶指针top是否大于0确保栈中有元素可以弹出。最后将top指针减1实现弹出栈顶元素的操作。 void STPop(ST* pst) {assert(pst);// 不为空assert(pst-top 0);pst-top--; }5.获取栈顶元素 首先使用断言assert判断指针是否为空如果为空则程序会崩溃。接着判断栈顶是否大于0如果不大于0则说明栈中无元素也会导致程序崩溃。最后返回栈顶元素由于是取栈顶元素所以要使用栈顶指针top减1来访问栈顶元素。 STDataType STTop(ST* pst) {assert(pst);// 不为空assert(pst-top 0);return pst-a[pst-top - 1]; } 6.判断栈ST是否为空 函数中的参数 pst 是一个指向栈的指针使用 assert 宏对其进行断言确保其不为空。 这个函数主要通过判断栈顶指针top是否为 0 来确定栈是否为空。如果 top 等于 0那么栈中没有任何元素函数返回 true表示栈为空否则返回 false表示栈中还有元素。 bool STEmpty(ST* pst) {assert(pst);return pst-top 0; }7.获取栈大小 栈的大小是指当前栈中元素的数量。 参数pst是一个指向栈的指针函数内部调用了assert(pst)来判断指针是否为空如果为空则直接终止程序的执行。 函数返回值为栈的大小即栈顶指针top的值。在使用该函数之前需要确保栈已经被初始化。 int STSize(ST* pst) {assert(pst);return pst-top; } 3.整体代码  1.Stack.h #pragma once #includestdio.h #includeassert.h #includestdlib.h #includestdbool.htypedef int STDataType;typedef struct Stack {STDataType* a;int top; // 标识栈顶位置的int capacity; }ST;void STInit(ST* pst); void STDestroy(ST* pst);// 栈顶插入删除 void STPush(ST* pst, STDataType x); void STPop(ST* pst); STDataType STTop(ST* pst);bool STEmpty(ST* pst); int STSize(ST* pst);2.Stach.c #includeStack.hvoid STInit(ST* pst) {assert(pst);pst-a NULL;pst-capacity 0;// 表示top指向栈顶元素的下一个位置pst-top 0;// 表示top指向栈顶元素//pst-top -1; }void STDestroy(ST* pst) {assert(pst);free(pst-a);pst-a NULL;pst-top pst-capacity 0; }// 栈顶插入删除 void STPush(ST* pst, STDataType x) {assert(pst);if (pst-top pst-capacity){int newcapacity pst-capacity 0 ? 4 : pst-capacity * 2;STDataType* tmp (STDataType*)realloc(pst-a, sizeof(STDataType) * newcapacity);if (tmp NULL){perror(realloc fail);return;}pst-a tmp;pst-capacity newcapacity;}pst-a[pst-top] x;pst-top; }void STPop(ST* pst) {assert(pst);// 不为空assert(pst-top 0);pst-top--; }STDataType STTop(ST* pst) {assert(pst);// 不为空assert(pst-top 0);return pst-a[pst-top - 1]; }bool STEmpty(ST* pst) {assert(pst);/*if (pst-top 0){return true;}else{return false;}*/return pst-top 0; }int STSize(ST* pst) {assert(pst);return pst-top; } 3.test.c  #includeStack.hint main() {ST s;STInit(s);STPush(s, 1);STPush(s, 2);STPush(s, 3);printf(%d , STTop(s));STPop(s);printf(%d , STTop(s));STPop(s);STPush(s, 4);STPush(s, 5);// 一 对 多// 入栈顺序 -- 出栈顺序while (!STEmpty(s)){printf(%d , STTop(s));STPop(s);}printf(\n);return 0; } 2.队列 1.队列的概念及结构 队列只允许在一端进行插入数据操作在另一端进行删除数据操作的特殊线性表队列具有先进先出 FIFO(First In First Out) 入队列进行插入操作的一端称为队尾 出队列进行删除操作的一端称为队头 2.队列的实现 队列也可以数组和链表的结构实现使用链表的结构实现更优一些因为如果使用数组的结构出队列在数组头上出数据效率会比较低。 3.代码实现  1.总体实现 void QueueInit(Queue* pq); void QueueDestroy(Queue* pq); void QueuePush(Queue* pq, QDataType x); void QueuePop(Queue* pq); QDataType QueueFront(Queue* pq); QDataType QueueBack(Queue* pq); bool QueueEmpty(Queue* pq); int QueueSize(Queue* pq); 2. 详细解析 1.初始化队列 参数是一个指向Queue结构体的指针。 首先利用assert()函数检查pq指针是否为空若为空则程序会终止运行避免出现不可预知的错误。 然后将队列的头指针phead和尾指针ptail都置为空即队列初始时是空的。队列的大小size也被初始化为0表示队列中没有元素。 整个函数的逻辑比较简单主要目的是将队列的各个成员变量初始化为合适的初始值以便后续实现队列的相关操作。 void QueueInit(Queue* pq) {assert(pq);pq-phead pq-ptail NULL;pq-size 0; } 2.销毁队列 参数是一个指向队列的指针。 首先使用 assert 函数检查指针 pq 是否为空如果为空则程序直接终止。 然后定义一个指针 cur 指向队列头部元素。使用 while 循环遍历整个队列将 cur 的下一个元素指向 next再将 cur 释放掉。cur 等于 next继续遍历。 最后将队列的头部指针 pq-phead 和尾部指针 pq-ptail 都指向 NULL队列大小 pq-size 置为 0。 这个函数的作用是遍历整个队列逐个释放节点所占用的空间防止内存泄漏。 void QueueDestroy(Queue* pq) {assert(pq);QNode* cur pq-phead;while (cur){QNode* next cur-next;free(cur);cur next;}pq-phead pq-ptail NULL;pq-size 0; } 3.往队列中插入一个元素 函数参数说明 - pq指向队列的指针需要保证指针非空。 - x插入队列的元素值。 函数实现 1. 判断指向队列的指针是否为空如果为空则直接返回。 2. 申请一个新节点并判断申请是否成功。如果申请失败则打印错误信息并返回。 3. 设置新节点的值为要插入的元素值x将新节点的next指针置为NULL。 4. 如果队列为空则将队列的头指针和尾指针都指向新节点。 5. 如果队列非空则将尾节点的next指针指向新节点然后将尾节点指针指向新节点。 6. 更新队列的元素数量。 7. 函数结束。 void QueuePush(Queue* pq, QDataType x) {assert(pq);QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc fail);return;}newnode-val x;newnode-next NULL;if (pq-ptail NULL){pq-ptail pq-phead newnode;}else{pq-ptail-next newnode;pq-ptail newnode;}pq-size; }4.队列的出队 第一行代码使用断言(assert)来确保队列指针pq的非空性若为空则会停止程序运行。 第二行代码使用断言(assert)来确保队列头指针(pq-phead)的非空性若为空则会停止程序运行。 第三行代码定义一个结构体指针del用来指向将要被删除的节点。 第四行代码将队列头指针(pq-phead)指向下一个节点即将队头出队并将该节点的内存释放。 第五至八行代码判断队列是否为空队列如果是则将队尾指针(pq-ptail)也置为空指针否则不需要做任何操作。 最后一行代码将队列的大小(size)减少1。 void QueuePop(Queue* pq) {assert(pq);// assert(pq-phead);QNode* del pq-phead;pq-phead pq-phead-next;free(del);del NULL;if (pq-phead NULL)pq-ptail NULL;pq-size--; }5.获取队列头部元素 输入参数为一个指向队列的指针pq返回值为队列头部元素的值。其中使用了assert宏来进行断言确保pq和pq-phead都不为NULL如果其中任意一个为NULL则会触发断言失败程序会崩溃。最后返回pq-phead的值。 QDataType QueueFront(Queue* pq) {assert(pq);// assert(pq-phead);return pq-phead-val; }6.获取队列最后一个元素 函数签名说明 QDataType是一个数据类型用于表示队列中元素的类型Queue是一个结构体类型表示队列Queue* pq表示指向队列的指针。 函数实现 首先使用assert()宏函数对传入的参数进行断言处理确保指针pq和队列的尾指针ptail都不为空。 然后返回队列尾部节点即最后一个元素的值即pq-ptail-val。由于队列的尾指针指向的就是队列的尾部节点所以可以直接通过ptail获取队列尾部节点的值。 整个函数逻辑简单实现了获取队列最后一个元素的功能。 QDataType QueueBack(Queue* pq) {assert(pq);// assert(pq-ptail);return pq-ptail-val; } 7.判断队列是否为空 参数pq是一个指向Queue类型的指针assert(pq)用于判断pq是否为空。函数返回队列的头节点是否为空如果为空则队列为空返回true否则返回false。 bool QueueEmpty(Queue* pq) {assert(pq);return pq-phead NULL; }8.获取队列当前元素数量 它接受一个指向队列结构体的指针作为参数。 第一行使用了assert宏它会检查参数pq是否为空指针如果是则程序会中止运行并输出错误信息。 第三行直接返回队列结构体中的size成员即队列当前的元素数量。 int QueueSize(Queue* pq) {assert(pq);return pq-size; } 3.整体代码 1.Queue.h #pragma once #includestdio.h #includeassert.h #includestdlib.h #includestdbool.htypedef int QDataType; typedef struct QueueNode {QDataType val;struct QueueNode* next; }QNode;typedef struct Queue {QNode* phead;QNode* ptail;int size; }Queue;void QueueInit(Queue* pq); void QueueDestroy(Queue* pq); void QueuePush(Queue* pq, QDataType x); void QueuePop(Queue* pq); QDataType QueueFront(Queue* pq); QDataType QueueBack(Queue* pq); bool QueueEmpty(Queue* pq); int QueueSize(Queue* pq);2.Queue.c #includeQueue.hvoid QueueInit(Queue* pq) {assert(pq);pq-phead pq-ptail NULL;pq-size 0; }void QueueDestroy(Queue* pq) {assert(pq);QNode* cur pq-phead;while (cur){QNode* next cur-next;free(cur);cur next;}pq-phead pq-ptail NULL;pq-size 0; }void QueuePush(Queue* pq, QDataType x) {assert(pq);QNode* newnode (QNode*)malloc(sizeof(QNode));if (newnode NULL){perror(malloc fail);return;}newnode-val x;newnode-next NULL;if (pq-ptail NULL){pq-ptail pq-phead newnode;}else{pq-ptail-next newnode;pq-ptail newnode;}pq-size; }// 17:10 void QueuePop(Queue* pq) {assert(pq);// assert(pq-phead);QNode* del pq-phead;pq-phead pq-phead-next;free(del);del NULL;if (pq-phead NULL)pq-ptail NULL;pq-size--; }QDataType QueueFront(Queue* pq) {assert(pq);// assert(pq-phead);return pq-phead-val; }QDataType QueueBack(Queue* pq) {assert(pq);// assert(pq-ptail);return pq-ptail-val; }bool QueueEmpty(Queue* pq) {assert(pq);return pq-phead NULL; }int QueueSize(Queue* pq) {assert(pq);return pq-size; } 3.Test.c #includeQueue.hint main() {Queue q;QueueInit(q);QueuePush(q, 1);QueuePush(q, 2);QueuePush(q, 3);printf(%d , QueueFront(q));QueuePop(q);printf(%d , QueueFront(q));QueuePop(q);QueuePush(q, 4);QueuePush(q, 5);while (!QueueEmpty(q)){printf(%d , QueueFront(q));QueuePop(q);}QueueDestroy(q);return 0; }

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

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

相关文章

企业门户网站需求模板软件设计公司排名

此为牛客Linux C课程和黑马Linux系统编程笔记。 1. 关于epoll epoll是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率,因为它会复用文件描述符集合来传递结果而不用迫使开发者每次…

萝岗微网站建设简单静态网页制作代码

1.Srvlet概述 Servlet是运行在java服务器端的程序,用于接收和响应来着客户端基于HTTP协议的请求 如果想实现Servlet的功能,可以通过实现javax。servlet。Servlet接口或者继承它的实现类 核心方法:service()&#xf…

做爰全过程免费的教网站东莞做网站公司哪家好

在学习代码期间,练习代码是必不可少的内容,同样的对知识点的回顾也是更加重要的,在练代码的同时回顾知识点效果会更好。(知识会有重复的,我遵循的是不论是什么时候的知识都会从头来一遍,对于新掌握的我会再…

视频网站开发步骤建设网站企业网上银行登录入口

零售行业最本质的需求就是降本增效、引流提销,实现利润最大化。如何利用大数据、人工智能、云计算、AIOT等前沿技术,助力企业数智化转型,全生态效率提升和可持续发展,是零售企业的核心诉求。 零售行业客流管理的现状 零售行业已进…

南平建设集团有限公司网站佛山自定义网站建设

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证方式一 curl方式二 bp抓捕 1.5、修复建议 说明内容漏洞编号CVE-2021-42013漏洞名称…

图片做旧网站贡井区建设局网站

科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时,大气开始被木星吸走,而随着不断接近地木“刚体洛希极限”,地球面临被彻底撕碎的危险。但实际上,这个计算是错误的。 洛希极限(Roche limit)是一…

做毕业设计免费网站建设网站建设88

问题复现(信心满满使用转义字符换行) 解决方法: 写多个-m字符串的结构可以实现自动换行 注意空格 git commit -m"第一行描述" -m"第二行描述" 效果演示:(强迫症福利)

彩票网站怎么做赚钱吗网站建设专利

文章目录安装包控件(Package Control)如何安装插件打开 Install Package 面板搜索和安装插件无法打开 Install Package 面板的问题故障排除安装包控件(Package Control) 要安装插件,必须先安装 Package Control&#…

招代理的网站建设公司推广方法英文

C语言的一大重头戏就是指针。 对于指针有一些认识: 1.指针是存放变量的地址,一般说的指针和指针变量是一个概念。 2.地址的单位是字节,大小在不同编译器环境下有所不同,32位机器是4个字节,64位机器是8个字节。 3.数组名…

四川省建设工程信息网站工业互联网平台建设

http://haoyeren.blog.sohu.com/86590116.html http://blog.chinaunix.net/uid-20564848-id-3947194.html http://blog.sina.com.cn/s/articlelist_2314879471_0_1.html

国外摄影网站骏驰网站建设

入门指南 欢迎来到安卓开发训练课,在这里你可以找到一系列课程来描述如何使用现有的代码示例来重新适用到你的APP上,你可以在左侧的导航栏顶部看到在若干个大项里有若干个有组织的子项课程。(导航栏请参见官方文档的导航栏) 在第一个大项里&#xff0c…

河南国安建设集团有限公司网站网站建设如何商谈

一、集合 1.1 简介 集合主要分为两组(单列集合、双列集合),Collection 接口有两个重要的子接口 List 和Set,它们的实现子类都是单列集合。Map 接口的实现子类是双列集合,存放的是 K-V 1.2 关系图 二、Collection 接口…

郴州网站设计公司广州注册个体户流程及费用

标签(空格分隔): Javajavascript习惯了eclipse的自动编译,Java命令行编译、执行文件只会最基础的部分,就是对单文件的编译和执行,并且不包含任何外部JAR包。但有时候你还非得用命令行,会碰到一些问题,博主这…

如何用front怕个做网站做狗狗网站的背景图

共享办公室,又称联合办公、众创空间、孵化器等,是一种将空闲的办公空间出租给不同的企业或个人,提供灵活的租期、价格和服务的新型办公模式。共享办公室的出现,满足了新兴企业和自由职业者对于低成本、高效率、多元化的办公需求&a…

设计师如何注册个人网站广州市网站建设公司在哪里

我正在使用k-means聚类算法,并且对于每个聚类质心,我试图为质心生成n维Voronoi区域 . 之后我需要从Voronoi区域生成随机点 .我已经尝试使用Matlab / Octave和scipy来获得n维Voronoi区域 . 但我有两个问题 .生成顶点和区域后,如何从区域生成随…

如何提高网站吸引力在百度上做网站怎么做

一、无人机模型简介: 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献: [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、高尔夫优化算法GOA简介 高尔夫优化算法…

辽宁网站备案要多久福建省建设执业注册与管理中心网站

首先,回顾并详细说明一下在快速入门中使用的Controller、RestController、RequestMapping注解。如果您对Spring MVC不熟悉并且还没有尝试过快速入门案例,建议先看一下快速入门的内容。 Controller:修饰class,用来创建处理http请…

浙江网站建设专家评价Pc端做社区网站用什么框架

在fread时,"rb"与"r"对某些字符作用,是不同的; 文本模式和二进制模式读取不一样的 文本:读: 遇到回车-换行(0D 0A),就会转换为换行符0A 写:遇到换行符0A,就会转换为回车-换…

仿一个网站山西省住房和城乡建设厅网站首页

本文仅为【2023传智杯】第六届传智杯程序设计挑战赛-题目解题分析详解的解题个人笔记,个人解题分析记录。 本文包含:第六届传智杯程序设计挑战赛题目、解题思路分析、解题代码、解题代码详解 文章目录 一.前言更新进度记录二.比赛题目(AB俩组)D题题目-abbE题题目 -kotori和…