复古风格网站git做网站根目录

news/2025/9/23 11:49:35/文章来源:
复古风格网站,git做网站根目录,惠州网站建设领头,合肥网站建设技术托管#x1f388;个人主页#xff1a;豌豆射手^ #x1f389;欢迎 #x1f44d;点赞✍评论⭐收藏 #x1f917;收录专栏#xff1a;数据结构 #x1f91d;希望本文对您有所裨益#xff0c;如有不足之处#xff0c;欢迎在评论区提出指正#xff0c;让我们共同学习、交流进… 个人主页豌豆射手^ 欢迎 点赞✍评论⭐收藏 收录专栏数据结构 希望本文对您有所裨益如有不足之处欢迎在评论区提出指正让我们共同学习、交流进步 【数据结构】顺序表的动态分配的实现步骤 引言一 初始化顺序表结构体1.1 代码1.2 代码分析 二 分配内存空间2.1 代码2.2 代码分析 三 设置属性3.1 代码 四 检查内存分配五 空间不足时重新分配5.1 代码5.2 代码分析 六 元素操作6.1 代码6.2 代码分析 七 销毁顺序表总结 引言 在计算机科学中数据结构是组织和存储数据的方式它决定了数据如何被存储、检索和操作。 顺序表作为一种线性数据结构其内部元素在物理存储上按照顺序连续存放。然而静态的顺序表在创建时就需要确定其大小这在实际应用中往往不够灵活。 因此实现顺序表的动态分配变得尤为重要。动态分配允许我们在运行时根据需要调整顺序表的大小从而更加高效地管理和使用内存。 本文将详细阐述顺序表动态分配的实现步骤包括初始化结构体、分配内存空间、设置属性、检查内存分配、空间不足时重新分配、元素操作以及销毁顺序表等关键步骤。 顺序表中的动态分配涉及一系列步骤以确保在程序执行时能够根据需要分配内存空间从而管理线性表的数据元素。以下是顺序表动态分配的具体步骤 一 初始化顺序表结构体 首先需要创建一个顺序表的结构体其中通常包含指向动态分配数组的指针、顺序表的最大容量以及当前的长度等属性。 1.1 代码 typedef struct { int *data; // 指向数据数组的指针 int length; // 顺序表当前长度 int capacity; // 顺序表最大容量 } SeqList;1.2 代码分析 这段代码定义了一个名为SeqList的结构体用于表示一个顺序表线性表的顺序存储结构。以下是每个步骤的详细介绍 定义结构体类型 typedef struct {使用typedef关键字结合struct关键字定义了一个新的结构体类型SeqList。这样后续代码中可以直接使用SeqList来声明该类型的变量而不必每次都写出struct关键字。 数据数组指针 int *data; // 指向数据数组的指针在结构体中定义了一个指向int类型的指针data。这个指针用于指向顺序表存储数据的数组。当顺序表被初始化时data将指向一个动态分配的内存块用于存储顺序表中的元素。 顺序表当前长度 int length; // 顺序表当前长度length变量用于记录顺序表中当前存储的元素个数。它反映了顺序表的实际大小与顺序表的容量capacity不同容量是顺序表能够容纳的最大元素数量。 顺序表最大容量 int capacity; // 顺序表最大容量capacity变量表示顺序表的最大容量即它能够存储的元素的最大数量。这个值在顺序表初始化时确定并且可以通过动态内存分配进行扩展。 结束结构体定义 } SeqList;这个分号标志着结构体定义的结束。此时SeqList已经成为了一个有效的类型可以在后续代码中用于声明变量。 通过使用SeqList这个结构体可以方便地管理顺序表的存储和状态。通过修改data指针、length和capacity的值可以实现顺序表的动态内存分配、元素的插入和删除等操作。同时由于data是一个指针顺序表可以灵活地调整其大小以适应不同数量的元素存储需求。 二 分配内存空间 使用malloc或类似的函数在内存中为顺序表的结构体和数据数组分配一块连续的空间。 这个空间的大小可以根据需要动态确定通常初始时分配一个默认的大小。 2.1 代码 SeqList* list (SeqList*)malloc(sizeof(SeqList)); if (list NULL) { perror(Failed to allocate memory for SeqList); exit(EXIT_FAILURE); } list-data (int*)malloc(INIT_CAPACITY * sizeof(int)); if (list-data NULL) { perror(Failed to allocate memory for data array); free(list); exit(EXIT_FAILURE); }2.2 代码分析 这段代码实现了顺序表结构体的动态内存分配以及顺序表内部数据数组的初始分配。以下是每个步骤的详细介绍 分配顺序表结构体的内存 SeqList* list (SeqList*)malloc(sizeof(SeqList));使用malloc函数为SeqList类型的结构体分配内存空间。 sizeof(SeqList)计算了SeqList结构体所占用的字节数。malloc函数根据这个大小在堆上分配内存并返回指向这块内存的指针。该指针被强制类型转换为SeqList*类型并赋值给list变量。 在C语言中malloc 函数用于在堆上动态分配指定字节数的内存并返回指向这块内存的指针。 这个返回的指针类型是 void*即指向任意类型的指针。在C语言中void* 类型的指针可以赋给任何其他类型的指针但是为了避免类型不匹配导致的潜在问题并且为了使代码更加清晰通常我们会将 void* 类型的指针显式转换为目标类型的指针。 检查内存分配是否成功 if (list NULL) { perror(Failed to allocate memory for SeqList); exit(EXIT_FAILURE); }检查malloc函数是否成功分配了内存。 如果malloc返回NULL表示内存分配失败。这时perror函数用于打印出系统错误信息说明内存分配失败的原因。然后程序调用exit(EXIT_FAILURE)终止执行并返回非零的退出状态码表示程序异常结束。 分配数据数组的内存 list-data (int*)malloc(INIT_CAPACITY * sizeof(int));为顺序表的数据数组分配内存空间。INIT_CAPACITY是一个预先定义的常量表示顺序表初始时的容量大小。 malloc函数根据INIT_CAPACITY * sizeof(int)计算出需要分配的总字节数并在堆上分配相应的内存空间。 返回的指针被强制类型转换为int*类型并赋值给list-data即顺序表结构体的data成员。 list-data 这条语句在C语言中表示通过结构体指针 list 来访问其指向的结构体中的 data 成员。这里list 是一个指向 SeqList 类型结构体的指针而 data 是 SeqList 结构体中的一个成员其类型为 int*指向整数的指针。 具体来说 list 是一个指针它存储了某个 SeqList 结构体在内存中的地址。- 是一个结构体指针的成员访问运算符。它用于通过结构体指针来访问其指向的结构体中的成员。data 是 SeqList 结构体中的一个成员它是一个指向整数数组的指针。 因此list-data 的意思就是取 list 指针指向的 SeqList 结构体中的 data 成员的值即这个结构体所关联的数据数组的指针。通过这个指针你可以访问或修改顺序表中的数据。 例如如果你想访问顺序表中的第一个元素你可以这样做 int firstElement *(list-data);这里list-data 获取数据数组的指针* 运算符用于解引用这个指针从而得到数组中的第一个元素。 如果你想设置顺序表中的第一个元素为某个值比如10你可以这样做 *(list-data) 10;这样你就通过 list-data 成功地修改了顺序表中的数据。 再次检查内存分配是否成功 if (list-data NULL) { perror(Failed to allocate memory for data array); free(list); // 释放之前为顺序表结构体分配的内存exit(EXIT_FAILURE); }再次检查malloc函数是否成功分配了内存。 如果malloc返回NULL说明数据数组的内存分配失败。 此时程序首先调用free(list)释放之前为顺序表结构体分配的内存避免内存泄漏。 然后使用perror打印出错误信息并通过exit(EXIT_FAILURE)终止程序执行。 通过上述步骤代码成功地为顺序表结构体和数据数组分配了内存并进行了必要的错误检查。如果所有内存分配都成功那么list指针现在指向一个有效的顺序表结构体其data成员指向一个能够存储INIT_CAPACITY个整数的数组。之后就可以使用这个顺序表进行元素的插入、删除、查找等操作了。 三 设置属性 将分配的内存地址赋值给顺序表结构体的相应指针并设置顺序表的最大容量和当前长度为初始值。 3.1 代码 list-length 0; list-capacity INIT_CAPACITY;四 检查内存分配 在每次内存分配后都需要检查是否分配成功。如果malloc返回NULL则表示内存分配失败此时需要进行错误处理如打印错误信息并退出程序。上面的代码已经包含了这一步。 五 空间不足时重新分配 随着顺序表中元素的增加当空间不足时需要动态地重新分配更大的内存空间。 我们需要执行以下步骤 1 分配新的内存块大小为所需的新容量。 2 将旧内存块中的数据复制到新内存块中。 3 释放旧内存块。 4 更新指针和容量。 5.1 代码 if (list-length list-capacity) { int new_capacity list-capacity * 2; // 扩大为原来的两倍 int *new_data (int*)malloc(new_capacity * sizeof(int)); if (new_data NULL) { perror(Failed to allocate memory for new data array); free(list-data); free(list); exit(EXIT_FAILURE); } // 将旧数据复制到新分配的内存中 for (int i 0; i list-length; i) { new_data[i] list-data[i]; } // 释放旧内存 free(list-data); // 更新指针和容量 list-data new_data; list-capacity new_capacity; }5.2 代码分析 这段代码的主要目的是在动态数组或称为顺序表list的当前容量不足以存储更多元素时对其容量进行扩展。以下是代码各步骤的详细解释 检查容量是否足够 if (list-length list-capacity) {这行代码检查list的当前长度list-length是否已经达到或超过了其当前容量list-capacity。如果是则需要进行内存扩展。 计算新容量 int new_capacity list-capacity * 2; // 扩大为原来的两倍这里将新容量设置为当前容量的两倍。这是一种常见的扩展策略因为它简单且通常足够应对增长需求。然而具体的扩展策略可能会根据应用需求的不同而有所变化。 分配新内存 int *new_data (int*)malloc(new_capacity * sizeof(int));使用malloc函数为新的数据数组分配内存。new_capacity * sizeof(int)计算了新数组所需的字节数。如果malloc成功它将返回一个指向新分配内存的指针否则返回NULL。 检查内存分配是否成功 if (new_data NULL) {perror(Failed to allocate memory for new data array);free(list-data);free(list);exit(EXIT_FAILURE); }如果malloc返回NULL说明内存分配失败。此时代码打印一个错误消息释放任何已经分配给list和list-data的内存然后退出程序。 复制旧数据到新内存 for (int i 0; i list-length; i) {new_data[i] list-data[i]; }通过一个循环将旧数据数组list-data中的元素逐个复制到新分配的内存new_data中。 释放旧内存 free(list-data);释放指向旧数据数组的指针所引用的内存。这是非常重要的步骤因为如果不释放旧内存就会导致内存泄漏。 更新指针和容量 list-data new_data; list-capacity new_capacity;将list结构中的data指针更新为指向新分配的内存并将capacity更新为新容量。这样list现在就指向一个容量更大的数据数组并且可以继续添加更多元素。 通过以上步骤代码成功地在不改变原list结构指针的情况下扩大了其内部数据数组的容量并确保所有现有数据都被保留下来。这种技术在动态数据结构的实现中非常常见特别是在处理可能快速增长的数据集时。 六 元素操作 在动态分配的空间上执行顺序表的插入、删除、查找等操作。这些操作需要根据顺序表的当前状态如长度和容量来正确执行并确保数据的完整性和一致性。 6.1 代码 元素操作的代码会根据具体的操作而有所不同例如插入、删除和查找等。这里提供一个插入操作的示例 int InsertList(SeqList *list, int index, int elem) { if (index 0 || index list-length) { return -1; // 插入位置无效 } // 动态分配如果必要已在前面的步骤中完成 // 移动元素为新元素腾出空间 for (int i list-length; i index; i--) { list-data[i] list-data[i - 1]; } list-data[index] elem; // 插入新元素 list-length; // 更新顺序表长度 return 0; }6.2 代码分析 这段代码定义了一个函数InsertList用于在顺序表或称为动态数组list的指定位置index插入一个元素elem。顺序表通过结构体SeqList来定义其中至少包含指向数据数组的指针data、数组当前长度length和数组容量capacity。下面是对代码中每个步骤的详细解释 检查插入位置的有效性 if (index 0 || index list-length) { return -1; // 插入位置无效 }这里首先检查传入的index是否在有效的插入范围内。如果index小于0或者大于list的当前长度list-length则意味着插入位置无效函数返回-1表示错误。 注释动态分配如果必要已在前面的步骤中完成 // 动态分配如果必要已在前面的步骤中完成这是一个注释说明在调用InsertList函数之前已经确保了list有足够的容量来存储新元素。这通常意味着在某个地方可能是在插入操作之前或者当添加元素导致list容量不足时已经进行了内存分配或重新分配。由于这段代码没有直接包含这部分逻辑所以这是一个前提假设。 移动元素为新元素腾出空间 for (int i list-length; i index; i--) { list-data[i] list-data[i - 1]; }这个循环的目的是将index位置及其之后的所有元素向后移动一个位置从而为新元素腾出空间。循环从list-length开始即数组的最后一个元素的下一个位置逐步向前移动到index 1。在每次迭代中都将当前位置的元素值赋给其后面的位置这样就实现了元素的向后移动。 插入新元素 list-data[index] elem;在已经腾出的index位置上将新元素elem的值赋给list-data[index]从而完成了新元素的插入。 更新顺序表长度 list-length;由于已经成功插入了一个新元素因此需要更新list的长度。将list-length加1以反映新元素的添加。 返回成功标志 return 0;如果所有步骤都成功执行函数返回0表示插入操作成功。 整个InsertList函数遵循了顺序表插入操作的标准步骤检查插入位置的有效性、为新元素腾出空间、插入新元素、更新长度并返回操作结果。这样的设计保证了顺序表在插入操作后的正确性和一致性。 七 销毁顺序表 当不再需要顺序表时需要释放其占用的内存空间。这通常涉及使用free函数来释放之前通过malloc或realloc分配的内存块。 void DestroyList(SeqList *list) { free(list-data); // 释放数据数组的内存 free(list); // 释放顺序表结构体的内存 }通过上述步骤顺序表能够实现动态的内存分配和管理从而根据程序的需求高效地存储和访问线性表的数据元素。需要注意的是动态内存分配涉及到内存管理的复杂性因此在编写代码时需要仔细处理各种边界条件和错误情况以确保程序的正确性和稳定性。 总结 通过本文的详细阐述我们了解了顺序表动态分配的实现步骤。从初始化顺序表结构体开始到分配内存空间、设置属性、检查内存分配再到空间不足时的重新分配、元素操作以及最终的销毁顺序表每一步都至关重要。 动态分配的实现使得顺序表在实际应用中更加灵活和高效能够根据实际需求动态调整大小避免了静态顺序表在大小确定上的局限性。 同时我们也需要注意在内存分配和释放过程中的安全性和正确性以避免内存泄漏和野指针等问题。 通过掌握这些实现步骤和注意事项我们可以更好地利用顺序表这一数据结构为实际应用提供有力的支持。 这篇文章到这里就结束了 谢谢大家的阅读 如果觉得这篇博客对你有用的话别忘记三连哦。 我是豌豆射手^让我们我们下次再见

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

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

相关文章

app 微信 网站三合一企业宣传册模版

花了几天的时间,整出个 “hello spring boot”,并且把它从 2 搞到了 3。 纸上得来终觉浅!自己实践出真知!现在再回头来囫囵一遍,加深下印象。回想下从前自觉某一编程语言大都如此,先找到简单示例照着画一遍…

使用 feign 调用时对微服务实例进行选择

使用 feign 调用时对微服务实例进行选择1.概述 在 微服务 调用的时候,我们会需要将微服务实例进行分组的情况,我们有订单和库存服务,订单服务 和库存服务 分别 为 A,B两组服务实例。 A 服务分组服务A用户,B服务分组…

EI目录今年第3次更新!55本中国期刊被收录,附完整版下载

8月,EI Compendex数据库发布了最新版收录期刊目录。 目录实际更新时间为2025年7月24日 2025年截止8月份EI数据库已更新3次,更新时间分别为2025年1月、2025年4月和2025年7月。 本次目录共收录期刊5702本,其中包含Jou…

友点企业网站管理系统3d全屋定制设计软件

1.没镜像就拉取镜像 dockerhub中查看版本 官网 docker pull zookeeper:3.4.14 不加版本号也行,默认拉取最新版 创建并启动容器 docker run -p 2181:2181 --privilegedtrue --name zookeeper01 -d zookeeper –privilegedtrue 容器内用户开启root权限 docker ps…

程序员的未来:从技术岗位到全栈思维的进化之路 - 实践

程序员的未来:从技术岗位到全栈思维的进化之路 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

envoy和nginx的区别

Envoy 和 Nginx 都是高性能的网络代理和反向代理服务器,广泛应用于现代分布式系统中。尽管它们在某些场景下功能重叠(如负载均衡、反向代理),但在设计目标、架构、功能特性和适用场景上存在显著差异。 以下是 Envo…

基于自适应差分进化算法的MATLAB实现

基于自适应差分进化算法(Adaptive Differential Evolution, ADE)的MATLAB实现一、算法原理 自适应差分进化算法通过动态调整缩放因子(F)和交叉概率(CR)提升全局搜索能力。核心改进包括:参数自适应:根据种群适应…

临沂专业网站建设公司哪家好做网站菜单背景图片

问你一句:「你知道 HTTP/1.1 该如何优化吗?」 我们可以从下面这三种优化思路来优化 HTTP/1.1 协议: 尽量避免发送 HTTP 请求在需要发送 HTTP 请求时,考虑如何减少请求次数减少服务器的 HTTP 响应的数据大小 下面,就针对这三种思路具体看看有哪些优化…

什么网站做推广效果好移动端网站没有icp

当遇到错误提示“vcruntime140.dll已加载,但找不到入口点”时,很多人可能会感到困惑,不知道如何去处理这个问题。不过没有必要紧张,在这里我会为大家详细解释 vcruntime140.dll 文件是什么,并指导大家如何高效地解决 v…

购物网站功能模块设计dw制作asp网站模板下载

题目: 给你一个下标从 0 开始的二维整数矩阵 grid,大小为 n * n ,其中的值在 [1, n] 范围内。除了 a 出现两次,b 缺失 之外,每个整数都恰好出现一次 。 任务是找出重复的数字a 和缺失的数字 b 。 返回一个下标从 0 开始…

微网站平台微网站建设方案模板南昌企业网站建设公司

ETL服务内容包含: 数据迁移数据合并数据同步数据交换数据联邦数据仓库

电子商务网站建设课后习题答案成都服务器idc托管

文章目录 DFS排列组合问题排列组合问题的标准模板排列LeetCode46全排列题目描述代码 LeetCode47全排列Ⅱ题目描述代码 组合LeetCode77组合题目描述代码 LeetCode39组合总和题目描述代码 LeetCode40组合总和Ⅱ题目描述代码 LeetCode216组合总和Ⅲ题目描述代码 DFS排列组合问题 …

网站广告素材酒店网络营销推广方式

精读文稿 这期我们介绍的这本书叫做《安静》,副标题是《内向性格的竞争力》。本书共有267页,我会用大约25分钟的时间为你讲述书中的精髓。内向性格具备什么样的竞争力?内向性格的人在人际交往和日常生活中似乎总是吃亏,因为他们不…

凡拓数创北京seo专业团队

Hugging Face预训练GPT微调ChatGPT(微调入门!新手友好!) 在实战中,⼤多数情况下都不需要从0开始训练模型,⽽是使⽤“⼤⼚”或者其他研究者开源的已经训练好的⼤模型。 在各种⼤模型开源库中,最…

网站开发项目的规划与设计文档wordpress upload

《C语言程序设计》课程复习及模拟题讲评;《C语言程序设计》试卷各类题目分数分布情况一、选择题 40分(20小题, 每题2分 ) 主要考核基本概念, 词法, 语法和小程序阅读等。二、阅读题 12分(2小题, 每题6分)三、改错题 12分(2小题, 每题6分)四、设计题 36分(4小题, 每题9分) ;启动…

【SPIE出版、主题宽泛、快速检索】2025年可持续发展与数字化转型国际学术会议(SDDT 2025)

#SPIE 出版-ISSN:0277-786X# #高录用稳检索-快至见刊后1个月EI、Scopus检索# #可持续发展、管理、交通、数字化、社会学、计算机方向及其他交叉学科均可投递# 2025年可持续发展与数字化转型国际学术会议(SDDT 2025) 20…

张家界做网站广告制作公司合同

手机为什么这么卡:闪存I/O测试AndroBench软件名称:Androbench软件版本:4.0.1软件大小:1.01MB软件授权:免费适用平台:Android很多朋友买手机只是为了日常使用,卡顿是最影响日常使用的心情的问题了…

Sping Boot 打包排除相关jar依赖包,CMD 启动方式 pom.xml 说明.

Sping Boot 打包排除相关jar依赖包,CMD 启动方式 pom.xml 说明.Posted on 2025-09-23 11:40 且行且思 阅读(0) 评论(0) 收藏 举报根目录pom.xml<build><plugins><plugin><groupId>org.…

langfuse使用的postgresql异机备份和恢复(docker)并进行langfuse版本升级

环境:OS:Centos 7pg:16.4langfuse旧版本:V2.70.1langfuse新版本:V3.110原langfuse(v2)机器:192.168.1.52新langfuse机器(v3):192.168.1.1351.新机器安装pg并启动(非docker)这一步的目的是进行pg的原库备份后,异机恢复,…

国产化Excel处理组件Spire.XLS教程:Java在 Excel 表格中轻松添加下标

当 Excel 表格中包含化学式、统计脚注或科学数据时,往往需要使用下标来表示。但是,Microsoft Excel 自带的下标功能操作比较繁琐,而且也不支持批量应用,手动操作通常需要花费大量的时间。 基于此,本篇指南将介绍如…