c语言-链表VS数组

数组和链表的区别

 
  • 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入和删除元素,就应该用数组。
  • 链表恰好相反,链表中的元素在内存中不是顺序存储的,而是通过存在元素中的指针联系到一起。比如:上一个元素有个指针指到下一个元素,以此类推,直到最后一个元素。如果要访问链表中一个元素,需要从第一个元素开始,一直找到需要的元素位置。但是增加和删除一个元素对于链表数据结构就非常简单了,只要修改元素中的指针就可以了。如果应用需要经常插入和删除元素你就需要用链表数据结构了。

   *C++语言中可以用数组处理一组数据类型相同的数据,但不允许动态定义数组的大小,即在使用数组之前必须确定数组的大小。而在实际应用中,用户使用数组之前有时无法准确确定数组的大小,只能将数组定义成足够大小,这样数组中有些空间可能不被使用,从而造成内存空间的浪费。链表是一种常见的数据组织形式,它采用动态分配内存的形式实现。需要时可以用new分配内存空间,不需要时用delete将已分配的空间释放,不会造成内存空间的浪费。
  (1) 从逻辑结构角度来看
     a, 数组必须事先定义固定的长度(元素个数),不能适应数据动态地增减的情况。当数据增加时,可能超出原先定义的元素个数;当数据减少时,造成内存浪费。
     b,链表动态地进行存储分配,可以适应数据动态地增减的情况,且可以方便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项)
  (2)从内存存储角度来看
     a,(静态)数组从栈中分配空间, 对于程序员方便快速,但自由度小。
     b, 链表从堆中分配空间, 自由度大但申请管理比较麻烦.

 -----介绍的很详细,简单但有些地方容易忘,所以转过来和大家一起分享!

转载于:https://www.cnblogs.com/luoqingyu/p/5972504.html

C语言数据结构基石:动态数组 vs. 单向链表,从零实现核心操作 本文介绍了动态数组单向链表两种基础数据结构的C语言实现。动态数组通过malloc/realloc实现动态扩容,支持随机访问但插入删除效率低;单向链表通过节点指针串联数据,插入删除高效但不支持随机访问。文章详细展示了两种结构的头文件设计、核心功能实现(初始化、插入、遍历、删除等),并通过Person结构体进行测试验证。这两种结构分别代表连续存储离散存储思想,是构建更复杂数据结构的基础,掌握它们对提升编程能力至关重要。 阅读详情

相关推荐

C语言队列实现对比链表 vs 数组,5种操作时间复杂度实测

本文深入对比了C语言中队列的两种实现方式——链表数组,通过五种核心操作(入队、出队、取队头、取队尾、判空)的性能实测,分析了它们在时间复杂度空间效率上的差异。测试结果显示,数组实现在大多数操作上性能更优,尤其适合内存受限环境;而链表实现则更适合队列大小变化剧烈的场景。文章还提供了工程实践中的选择建议优化技巧,帮助开发者根据具体需求做出明智决策。

weixin_30219613的博客 276

数组链表的区别及优缺点

概念及特点: 数组:存放内存地址必须连续的. 查找的时候很方便,可以通过数组下标获取数据; 添加删除很不方便,如果插入一个元素,必须这个元素后面的元素都往后移一个内存地址 删除,所有后面元素都往前移动一个内存地址 链表:存放内存地址可以不连续,存放方式是通过元素中的指针,来寻找下一个元素. 这种结构添加删除元素很容易,只要修改指针指向下下个元素,就能删除,而添加则是 一个元素的指针指向后面的插...

谢伟光的博客 4033

C语言单向链表排序代码包:含升序/降序实现、内存管理VS工程配置

一套开箱即用的C语言单向链表排序示例,支持用户动态输入整数构建链表,并一键完成升序或降序排列。内部集成两种排序逻辑——冒泡排序选择排序,每种都适配链表结构特点,不依赖数组转换。代码涵盖链表创建、头插/尾插节点、正向遍历打印、按值查找、节点删除及整链内存释放等完整操作流程。所有函数职责单一,参数命名直观(如head、new_node),关键步骤配有中文注释说明指针移动链接更新细节。配套Visual Studio工程文件(.vcxproj + .vcxproj.filters),在VS2019及以上版本中双

postgres8guard的博客 159

链表数组的区别

链表数组 数组是有下标索引data两部分组成 链表是有data指向下一个数据的指针地址两部分组成 重点介绍: Vector、ArrayList都是以数组的形式存储在内存中,所以查询效率高,新增删除效率不高,但是Vector被Synchronized修饰,所以线程是安全的,ArraryList线程不安全。 LinkedList则以链表的形式进行存储,所以查询效率底,新增删除效率高,并且线程不安全。 ...

qq_42126523的博客 205

数组链表的关系

数组链表的关系 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中。同样的道理,如果想删除一个元素,同样需要移动大量元素去填掉被移动的元素。如果应用需要快速访问数据,很少或不插入删除元素,就应该用...

weixin_30758821的博客 194

数组链表的区别

数组一般创建在栈区,链表一般创建在堆区,在增加节点时需要new或malloc新节点,相较于数组长度不固定,自由度高。所以当线性表进行大量的插入删除操作时建议使用链表,若主要对线性表进行查找操作,较少进行插入操作是建议使用数组数组可以通过下标随机访问,单向链表只能通过头结点从前向后访问链表中的元素。链表在进行插入删除时,找到要插入或删除的位置后,增删时间复杂度为O(1)。数组在插入或删除的时候需要移动链表中的其他元素,时间复杂的为O(n)。链表是链式存储,链表在内存空间中不一定是连续的。

m0_61098695的博客 5789

数组链表的区别

数组链表的区别

博可睿的博客 6万+

C语言数据结构数组 vs 链表的性能评估适用场景

链表的大小可以动态增长或缩小。相比之下,链表在插入删除操作上具有优势,只需要改变节点的指针指向即可,不需要移动其他元素,因此插入删除的性能较好,时间复杂度为O(1)。对于数组而言,插入或删除元素需要将后续元素往后或往前移动,这涉及到大量的数据搬移操作,因此插入删除操作的性能较差,时间复杂度为O(n)。而链表需要从头节点开始遍历,直到找到目标位置的节点,因此链表的访问速度相对较慢,时间复杂度为O(n)。链表的节点不一定连续存储,每个节点都需要存储额外的指针信息,因此链表在内存占用方面相对较高。

极客代码 696

C语言队列实现对比链表 vs 数组,5种操作性能实测内存分析

本文深入对比了C语言中队列的两种实现方式:链表数组,通过5种核心操作的性能实测内存分析,揭示了各自的优劣势。测试显示数组实现在时间性能上普遍优于链表,特别是在销毁操作上快94%,而链表则在动态扩容内存利用率方面更具优势。文章还提供了实际应用场景的选择指南高级优化技巧,帮助开发者根据需求选择最合适的队列实现方式。

weixin_30755393的博客 322

数据结构:C语言版】004:C语言中的栈-数组VS链表实现及其应用

栈是一种简单yet强大的数据结构。无论是基于数组还是链表实现,栈都在许多编程场景中发挥着关键作用。理解栈的工作原理实现方法,对于解决各种编程问题理解计算机系统的内部工作机制都有很大帮助。在实际应用中,选择数组还是链表实现取决于具体需求,如是否需要动态大小、内存使用效率等因素。

2403_83044722的博客 591

c语言tips-结构体数组 VS 链表宏:`list_for_each_entry` 的优势局限对比分析

这时,许多开发者会转向链表,尤其是在 Linux 内核中被广泛使用的宏式链表管理方式,比如。我们将代码放到pythontutor运行,可以很直观的看到这两张数据结构的区别,并总结一下这两种方式的优缺点。在嵌入式开发、操作系统内核或者一般的 C 语言项目中,我们经常需要管理一组结构体数据。以下代码分别使用结构体数组使用链表遍历的方式来管理一组结构体数据,分别做这种数据结构的建立遍历。无疑是最直观的选择,数组简单、访问高效,代码逻辑也易于理解。等方面的优劣,帮助你在实际工程中做出更合适的选择。

留下虚度光阴的一些证据。 1174

c语言课程设计报告详细设计,清华大学出版社-图书详情-《C语言课程设计指导教程》...

前言C语言课程设计是C语言程序设计的后续实践环节,对提高学生C语言编程能力、创新能力、团队合作能力、分析问题解决问题的能力等起着重要作用。笔者连续多年主讲C语言程序设计、C++程序设计软件工程三门计算机专业基础课,如何有效开展C语言课程设计环节、更好地实现教学目标,是笔者一直在思考并不断通过实践来求解的问题。笔者结合自身多年教学经验,总结编写了本书,力求给读者展示如何利用流行的开发工具,采用流...

weixin_26782929的博客 396

四种方法实现学生信息管理系统(C语言

语言:C 平台:VS2017 暑假磕磕碰碰了很久,嵌套的那块可能有点冗余,功能也算基本实现。具体的功能参照代码里面的菜单即可。有误可评论目录学生信息管理系统数组实现学生信息管理系统单链表实现学生信息管理系统嵌套链表实现学生信息管理系统二叉树实现学生信息管理系统 学生信息管理系统 数组实现学生信息管理系统 功能: 学生信息的读取 姓名/学号/成绩的排序 学生姓名或学号进行查询 学生增删 数量固定 代码: # include<stdio.h> #include<string.h> #in

qq_41027556的博客 5931

C语言实现约瑟夫环

约瑟夫环实验报告 报告人:又是一个新的人类? (一)实验描述要求 实验描述: 已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;...

小黑成长史 4391

别再死记硬背了!通过约瑟夫环问题,彻底搞懂C语言数组链表的本质区别适用场景

本文通过约瑟夫环问题深入剖析C语言数组链表的本质区别适用场景。从内存布局、操作效率到实际应用,详细对比两种数据结构在约瑟夫环问题中的表现,帮助开发者理解何时选择数组链表。文章还提供了实战选型指南混合数据结构方案,助力提升编程效率。

weixin_33709364的博客 164

c 语言指针教学视频,[C语言] 猎豹网校 C指针视频教程

资源介绍21days_Cpp_二进制十六进制.mp4xa0xa080x86_内联汇编.mp4xa0xa0ABG2C_for_循环.mp4xa0xa0ABG2C_关系运算符.mp4xa0xa0ABG2C_字符串.mp4xa0xa0ABG2C_循环.mp4xa0xa0ABG2C_数学运算.mp4xa0xa0ABG2C_更高级的运算符.mp4xa0xa0ABG2C_测试多个值.mp4xa0xa0ABG...

weixin_39743511的博客 152

中南林业科技大学软件协会2022.10.8问题总结

中南林业科技大学软件协会

m0_69468108的博客 381
上一篇: 数字信号处理--FFT与蝶形算法
下一篇: 大毕设-matlab-AM调制解调
Coldhack1268
博客等级 码龄11年 4粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值