深入浅出之数组

深入浅出之数组

文章目录:

一、数组的基本语法

1.1 数组声明

数组声明通常为value namenumber的形式。value是值得数据类型,name是数组名称,number是数组的大小。若现在我们需要声明一个数据空间大小为5的数组,我们需要写出以下代码[1](#1)

cpp 复制代码
int a[5];

此时在我们的内存中,为此数组开辟了5个空间大小。并从下标 0 0 0开始命名。[2](#2)所以引索值最多到 4 4 4,否则将会超出数组边界。

若此时直接打印出数组内的值,将会得到 − 32768 ~ 32767 -32768~32767 −32768~32767[3](#3)范围内的随机值。所以我们需要将数组进行初始化。

1.2 数组初始化

数组初始化的语法为value namenumber={value_arg1,value_arg2}。value_arg指的是对应数据类型的具体值,多个值之间用逗号隔开。

同时数组的初始化分为局部初始化和完全初始化。同样以5个空间大小的数组为例,我们输入代码:

cpp 复制代码
int a[5]={1};

此时我们向数组a提供了一个值,此时数组内的a0为 1 1 1,其余位数均被赋值为 0 0 0。同样我们操作以下代码:

cpp 复制代码
int a[5]={1,2};

这样a0和a1分别被赋值上 1 1 1和 2 2 2,若将第一位赋值为 0 0 0,那整个数组将会初始化为 0 0 0。

讲完了局部初始化数组,完全初始化即是将所有的数组空间初始化,例如:

cpp 复制代码
int a[5]={1,2,3,4,5};

二、多维数组

2.1 多维数组的基本语法

多为数组的语法与一维数组的语法基本一致,此处用二维数组进行演示。多维数组的语法结构为value namenumbernumber

在图像化中,可以看作为一个 n × m n×m n×m矩形,每一个 k × k k×k k×k的方块代表一个数组。

但是在内存中,还是以长条的形式分布,因此该数组的地址依旧遵循线性分布。

2.2 多维数组的适用场景

多维数组可以在大量数据检索中,将指定组设为判断条件,其余为储存数据,大大提升开发效率。

三、数组的实际练习(传智杯真题为例)

传智杯 #3 决赛 课程

题目背景

disangan233 喜欢数数,于是他想让你帮他回答一个问题。

题目描述

传智专修学院提供 A , B A,B A,B 两个课程,分别有 n , m n,m n,m 个学生报名。报名 A A A 的学生的编号为 a n a_n an,报名 B B B 的学生的编号为 b m b_m bm,求有多少个学生同时报名了两个课程。

对于所有数据, n , m , a i , b i ≤ 20 n,m,a_i,b_i\leq 20 n,m,ai,bi≤20,保证每个课程报名的学生编号不会重复。

输入格式

输入共 3 3 3 行。

第 1 1 1 行输入 2 2 2 个正整数 n , m n,m n,m。

第 2 2 2 行输入 n n n 个正整数 a 1 ... a n a_1\ldots a_n a1...an,表示报名课程 A A A 的学生编号。

第 3 3 3 行输入 m m m 个正整数 b 1 ... b m b_1\ldots b_m b1...bm,表示报名课程 B B B 的学生编号。

学生编号不保证从小到大排序。

输出格式

输出共 1 1 1 行 1 1 1 个整数,表示答案。

样例 #1

样例输入 #1

复制代码
5 5
1 2 3 4 5
1 3 4 5 6

样例输出 #1

复制代码
4

提示

样例解释

我们发现, 1 , 3 , 4 , 5 1,3,4,5 1,3,4,5 这 4 4 4 名学生同时报名了两门课程,所以答案是 4 4 4。


题目详解:

分析题目,可知AB两个课程均有 m m m和 n n n个人报名,因此在此处可以建立ab两个数组后,进行比较相同元素即可。代码如下:

cpp 复制代码
#include <iostream>
using namespace std;
int main(){
    int n,m,ans=0;
    int a[20],b[20];
    cin>>n>>m;
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<m;i++) cin>>b[i];
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            if(a[i]==b[j]) ans++;
        }
    }
    cout<<ans;
    return 0;
}

  1. 本文的代码皆由C++语言进行演示 ↩︎

  2. 数组是有线性表所构建,因此从数字0开始算起 ↩︎

  3. 此范围由int的范围决定 ↩︎

相关推荐
Tongzhi202614 分钟前
通芝科技无感考勤一体机:软硬一体,开箱即用
数据结构·数据库·科技·算法·均值算法·数据库开发
linux-hzh2 小时前
百日算法修炼 · Day 09
数据结构·算法·排序算法
淡海水2 小时前
C#与常用数据结构源码剖析-全篇导览
开发语言·数据结构·unity·面试·职场和发展·c#
一米阳光86614 小时前
软考(中级)软件设计师核心笔记(8)数据结构——图
数据结构·笔记·职场发展·软考·软件设计师·中级职称
wabs66616 小时前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路
wuyk55517 小时前
2.队列:先进先出的线性数据结构
c语言·数据结构·stm32·单片机
lsylalalala18 小时前
常见的排序算法1
数据结构·算法·排序算法
imaol119 小时前
数据结构---队列
java·数据结构·算法
疯狂打码的少年19 小时前
【数据结构】串的模式匹配:KMP算法(重点)
数据结构·笔记·算法
一米阳光866119 小时前
软考(中级)软件设计师核心笔记(8)数据结构——线性结构、数组、矩阵
数据结构·笔记·职场发展·软考·软件设计师·中级职称