数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)

发布时间:2026/8/29 12:40:14

数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)
1. 什么是数组数组是一种线性数据结构它把相同类型的多个元素按连续的内存空间依次存储并通过下标索引来访问每个元素。数组是编程语言中最基础、最常用的数据结构之一。在 C/C 中数组的声明格式为// 声明一个包含 5 个 int 元素的数组 int arr[5]; // 声明并初始化 int nums[5] {10, 20, 30, 40, 50}; // 省略长度由编译器根据初始化列表推断 int scores[] {90, 85, 92, 88};数组的下标从 0 开始例如nums[0]表示第一个元素 10nums[4]表示第五个元素 50。数组在内存中是连续存放的因此可以通过下标直接计算出元素的地址实现 O(1) 的随机访问。2. 数组的作用数组的核心作用可以概括为以下几点批量存储同类型数据用一个变量名管理多个数据避免为每个数据单独声明变量。高效随机访问通过下标可以在常数时间内访问任意元素时间复杂度为 O(1)。内存连续、缓存友好由于元素在内存中连续排列遍历时能充分利用 CPU 缓存提升访问速度。作为其他数据结构的基础栈、队列、哈希表、堆等高级数据结构底层往往都依赖数组实现。下面通过一段代码演示数组的基本操作#include iostream using namespace std; int main() { int arr[5] {10, 20, 30, 40, 50}; // 随机访问O(1) cout 第三个元素 arr[2] endl; // 遍历数组 for (int i 0; i 5; i) { cout arr[ i ] arr[i] endl; } // 修改元素 arr[0] 99; cout 修改后第一个元素 arr[0] endl; return 0; }3. 数组的应用场景数组在实际开发中应用非常广泛常见场景包括存储固定数量的数据例如存储一个班级学生的成绩、一周七天的温度等。实现查找和排序算法二分查找、冒泡排序、快速排序等算法都直接基于数组操作。作为动态数据结构的底层存储例如用数组实现栈、队列、循环队列等。矩阵和图像处理二维数组天然适合表示矩阵、图像像素等二维数据。字符串处理C 语言中字符串本质上就是字符数组。哈希表的冲突解决开放寻址法直接使用数组存储键值对。下面给出一个用数组实现栈的简单示例#include iostream using namespace std; class ArrayStack { private: int* data; int capacity; int topIndex; public: ArrayStack(int cap) { capacity cap; data new int[capacity]; topIndex -1; } void push(int value) { if (topIndex capacity - 1) { data[topIndex] value; } } int pop() { if (topIndex 0) { return data[topIndex--]; } return -1; // 栈空 } ~ArrayStack() { delete[] data; } }; int main() { ArrayStack stack(10); stack.push(1); stack.push(2); stack.push(3); cout 出栈 stack.pop() endl; // 输出 3 return 0; }4. 数组与链表的区别数组和链表是两种最基础的线性数据结构它们在内存布局、访问方式、插入删除效率等方面有显著差异。下面从多个维度进行对比对比维度数组链表内存布局连续内存空间非连续节点通过指针连接随机访问O(1)通过下标直接访问O(n)需要从头遍历插入/删除已知位置O(n)需要移动大量元素O(1)只需修改指针空间分配静态分配或动态一次性分配大小固定动态分配按需申请节点空间利用率高无额外指针开销较低每个节点需额外存储指针缓存友好性高连续内存利于 CPU 缓存低节点分散缓存命中率低扩容需要重新分配更大的内存并拷贝天然支持动态增长下面用代码直观展示数组和链表在插入、访问上的差异#include iostream using namespace std; // 链表节点定义 struct Node { int data; Node* next; Node(int val) : data(val), next(nullptr) {} }; // 在链表头部插入节点O(1) Node* insertHead(Node* head, int val) { Node* newNode new Node(val); newNode-next head; return newNode; } // 遍历链表查找元素O(n) int getByIndex(Node* head, int index) { Node* cur head; int i 0; while (cur ! nullptr i index) { cur cur-next; i; } return (cur ! nullptr) ? cur-data : -1; } int main() { // 数组随机访问 O(1) int arr[5] {10, 20, 30, 40, 50}; cout 数组下标访问 arr[3] arr[3] endl; // 链表插入 O(1)访问 O(n) Node* head nullptr; head insertHead(head, 50); head insertHead(head, 40); head insertHead(head, 30); cout 链表第 2 个元素 getByIndex(head, 2) endl; return 0; }5. 总结数组和链表各有优劣选择哪种数据结构取决于具体场景如果读多写少、需要频繁按下标访问元素优先选择数组。如果写多读少、需要频繁在中间插入或删除元素优先选择链表。如果数据规模固定且对性能要求高数组通常更合适如果数据规模动态变化较大链表更灵活。理解数组和链表的本质区别是掌握数据结构与算法的基础也是写出高效代码的关键一步。

相关新闻

链表详解:定义、作用、应用场景及与数组的区别(C/C++ 实战)

链表详解:定义、作用、应用场景及与数组的区别(C/C++ 实战)

2026/8/29 12:40:14

1. 什么是链表链表是一种物理存储单元上非连续、非顺序的线性数据结构,它由一系列节点(Node)组成。每个节点包含两部分:一部分是存储数据元素的数据域(data),另一部分是存储下一个节点地址的指针…

4个月1亿美元,生物世界模型为何需要“数据发电厂”?

4个月1亿美元,生物世界模型为何需要“数据发电厂”?

2026/8/29 12:40:14

最近关注的不是“又一个百亿参数大模型”,而是 TechBio 赛道里出现的一个新组合:一家公司在 4 个月里融进 1 亿美元,同时建齐 3 座“数据发电厂”,目标是训练一个“生物世界模型”。这个标题信息量很密,但它不是一个普…

大模型+形式化验证:从GPT-5.6与Fable协作看AI数学证明闭环

大模型+形式化验证:从GPT-5.6与Fable协作看AI数学证明闭环

2026/8/29 12:40:14

近几天,技术社区里讨论最多的话题之一,是“GPT-5.6 和 Fable 联手解决了一道悬了 25 年的数学难题”这则消息。由于公开细节还不完整,这里不猜测难题本身,也不对两个产品下结论,而是把它当成一个更好的技术问题的起点&…

Vue3进度条(Progress)

Vue3进度条(Progress)

2026/8/29 13:50:22

Vue2进度条(Progress) 可自定义设置以下属性: 进度条宽度(width),单位 px,类型:string | number,默认 undefined;type: line 时,为进度条宽度&am…

Vue3分割线(Divider)

Vue3分割线(Divider)

2026/8/29 13:50:22

可自定义设置以下属性: 分割线标题的位置(orientation),类型:left | center | right,默认 center 标题和最近 left/right 边框之间的距离,去除了分割线,同时 orientation 必须为 le…

2026年ai建站哪家技术强,多平台对比来啦!

2026年ai建站哪家技术强,多平台对比来啦!

2026/8/29 13:50:22

2026年ai建站哪家技术强,多平台对比来啦!艾瑞咨询《2026年中国企业数字化建站行业白皮书》给出一组对照:国内AI建站渗透率已破68%,但抽样超1200家中小企业中仅31%在AI生成站点半年后仍持续续费且搜索流量正向增长。 深圳某3C配件品…

千问赢在生态:本地部署、开发者集成与办公场景全解析

千问赢在生态:本地部署、开发者集成与办公场景全解析

2026/8/29 13:50:22

看到“苹果删了千问,但阿里赢了”这个说法时,我第一反应不是去考证事件细节,而是想另一个问题:一个 AI 产品如果只是失去某个渠道入口,为什么还能被这么多人继续讨论?千问给出的答案,不是把流量…

MySQL存储过程实战:从设计到性能优化的完整指南

MySQL存储过程实战:从设计到性能优化的完整指南

2026/8/29 13:50:22

1. 项目概述:从“一次性脚本”到“可复用引擎” 如果你写过一段时间数据库应用,尤其是处理过复杂的报表生成、数据清洗或者需要高频执行相同逻辑的业务,你大概率会对满屏重复或相似的SQL语句感到头疼。今天要聊的“存储过程”,就是…

芯片厂落地背后:嵌入式开发必懂的SoC启动与固件烧录全解析

芯片厂落地背后:嵌入式开发必懂的SoC启动与固件烧录全解析

2026/8/29 13:40:22

半导体制造业的每一次选址落地,都会牵动芯片设计、设备、材料、封测等一系列产业链条。最近“马斯克 TeraFab 芯片厂在得州进入协议阶段”的消息在科技圈传播得很广,很多做嵌入式和芯片相关开发的同学也来问我:这个“协议阶段”到底是什么意思…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/27 11:10:02

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/29 10:22:10

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/28 7:34:42

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

四款热门降AI工具测评:研究生和本科生怎么选?

四款热门降AI工具测评:研究生和本科生怎么选?

2026/8/29 0:09:39

马上要交论文了,最近真的被论文ai率折磨的够呛。 明明查重都没问题了,但是ai率就是居高不下,崩溃了,明明都是我自己写的,天杀的,明明都是我亲生的啊 改来改去,终于给我搞出一套完美的降ai方案…

论文降AI率免费攻略:自查、提示词与工具推荐

论文降AI率免费攻略:自查、提示词与工具推荐

2026/8/29 0:09:39

马上要交论文了,最近真的被论文ai率折磨的够呛。 明明查重都没问题了,但是ai率就是居高不下,崩溃了,明明都是我自己写的,天杀的,明明都是我亲生的啊 改来改去,终于给我搞出一套完美的降ai方案…

北京GEO优化服务商推荐:预算型企业如何选北京GEO优化服务商?

北京GEO优化服务商推荐:预算型企业如何选北京GEO优化服务商?

2026/8/29 0:09:39

前言:预算有限的企业更关心投入能否形成可持续的品牌资产。评估北京GEO优化服务商时,不能只比较单篇内容或单月报价,还要看是否能够把问题词、官网、信源和监测串成完整链路。本期重点放在预算配置、试点范围和交付边界,帮助企业先…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/28 7:35:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/28 7:34:51

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/28 7:34:35

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…