【数据结构与算法——C语言版】2. 数组

news2024/11/15 4:21:47

前言

本篇文章介绍了数组的基础定义及使用,并针对数组的基本增删改查做了一些代码示例,下篇文章将讲解基于数组的更高效的方法,比如二分查找、插入排序等。

数组基础

数组定义

int nums[10] = {0};

如上,定义一个int类型的数组,并将每个元素赋初值为0。
实际开发中,我们定义的数组往往是一个我们自己指定的数据类型,如下,定义一个Student结构体,然后定义一个数组。

struct Student {
  char *m_name; // 学生名称
  int age; // 年龄
  int sex; // 性别
};
int main() {
  struct Student students[100]; // 定义一个struct Student类型的数组,拥有100个元素
}

数组访问

数组
定义一个数组,则产生了上图中结构,数组的每个元素都对应一个下标,我们可以通过下标访问指定的元素。比如

int main() {
  int nums[5] = {1, 2, 3, 4, 5};
  for (int i = 0; i < 5; ++i) {
	printf("%d ", nums[i]);
  }
}

这段代码定义了一个有5个元素的int型数组,并将5个元素赋值为1 2 3 4 5;最终通过一个循环打印这个数组。

数组是典型的逻辑上线性,物理上连续的结构。
逻辑上线性——数组中的所有元素都可以通过下标访问,并通过移动下标访问对应的元素。比如nums[2] = 2nums[2+1] = 3;即可以对下标进行数学运算,从而获取到新下标的元素。与之相反的是后面我们要学习的树、图等无法通过下标访问的数据结构。
物理上连续——即数组在内存中的存储是连续的,并且可以通过对数组某个元素的地址进行运算来访问到其他的元素。与之对应的是链表、树、图等物理上不连续的数据结构。

基本数组算法

数据结构的使用无外乎四个模块:增、删、改、查

增:往数组中添加一个或多个元素
删:往数组中删除一个或多个元素、删除数组中的重复元素等
改:修改数组中某个元素
查:给定一个值,判断该值是否存在于数组中

几乎所有的算法都是围绕这几个基本的算法进行的。算法不同,增删改查的效率就不同。所以说,数据结构 + 算法是程序的核心。

基本算法 —— 查找数组元素

题目描述:给定一个数组,给定一个值,判断该值是否位于数组内
思路:遍历数组,并将每个元素与给定值比较,相等则返回1——表示找到,不等则返回0——表示没找到

/*
 * nums: 传入的数组
 * size: 数组元素个数
 * target: 要比较的目标值
*/
int find_num(int nums[], int size, int target) {
	for (int i = 0; i < size; ++i) { // 遍历数组
		if (nums[i] == target) {
			return 1; // 找到了
		}
	}
	return 0; // 没找到
}

基本算法 —— 获取数组中的最大最小值

题目描述:给定一个数组,找到该数组中的最大最小值并输出
思路:定义变量min、max,分别存储数组中最小与最大值,min初始化为INT_MAX,max初始化为INT_MIN, 遍历数组,如果当前元素 < min,就更新 min = 当前元素;如果当前元素 > max,就更新 max = 当前元素

#define INT_MAX 2147483647
#define INT_MIN -2147483648
void print_max_min(int nums[], int size) {
	int max = INT_MIN;
	int min = INT_MAX;
	for (int i = 0; i < size; ++i) { // 遍历数组
		if (nums[i] < min) {
			min = nums[i]; // 更新最小值
		}
		if (nums[i] > max) {
			max = nums[i]; // 更新最大值
		}
	}
	printf("max %d min %d\n", max, min);
}

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

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

相关文章

【Python百日进阶-数据分析】Day146 - plotly小提琴图:px.violin()/go.violin()

文章目录四、实例4.1 Plotly Express 的小提琴图4.1.1 Plotly Express 的基本小提琴图4.1.2 带框和数据点的小提琴图4.1.3 多个小提琴图4.1.4 叠加的小提琴图4.2 graph_objects的小提琴图4.2.1 基本小提琴图4.2.2 多条小提琴迹线4.2.3 分组小提琴图4.2.4 分裂小提琴图4.2.5 高级…

植物大战僵尸:寻找召唤僵尸关键CALL

通过遍历寻找召唤僵尸的CALL&#xff0c;通过调用CALL出现自定义的僵尸&#xff0c;加速僵尸的出现。我们可以通过僵尸出现在屏幕中的个数来遍历寻找僵尸出现的CALL 僵尸CALL的遍历技巧&#xff1a;首先打开CE->进入游戏开始新的游戏-> 直接搜索未知初始化数据等待出现第…

新手程序员入职新公司,该如何快速上手?

小C今天又来找我了&#xff0c;一脸不开心的样子&#xff0c;我心想不是刚被开除&#xff0c;不会这么快又被开除了吧。 小C对我说&#xff1a;下周马上要入职新公司了。 我&#xff1a;好事啊&#xff0c;怎么一脸不开心的。 小C&#xff1a;马上要入职新公司了&#xff0c…

Altium Designer 20 凡亿教育视频学习-04-2

屏蔽电源线或者我们想要屏蔽的线&#xff0c;只显示我们想要的线 PCB上都是线会妨碍我们布线&#xff0c;因此在分模块的布置器件时&#xff0c;我们只单纯的显示我们需要的模块线&#xff0c;其他的线路就不显示了。白线叫预拉线&#xff0c;就是你真实的线要连的两个地方 第…

15nm粒径球形纳米金AuNPs-Thrombin修饰R-藻红蛋白/阿霉素的制备过程

15nm粒径球形纳米金AuNPs-Thrombin修饰R-藻红蛋白/阿霉素的制备过程 今天小编分享纳米金对于R-藻红蛋白的反应&#xff0c;一起看看吧&#xff1a; 纳米金修饰藻红蛋白的制备过程&#xff1a; 取不同pH条件下金前驱体溶液20 mL&#xff0c;先加入质量分数为2%的稳定剂(PVP&am…

高校房产管理系统使用环境?

数图互通高校房产综合管理信息系统是基于公司自主研发的FMCenterV5.0平台&#xff0c;是针对中国高校房产的管理特点和管理要求&#xff0c;研发的一套标准产品&#xff1b;通过在中国100多所高校的成功实施和迭代&#xff0c;形成了一套成熟、完善、全生命周期的房屋资源管理解…

redis 持久化

文章目录一、什么是redis持久化二、两种持久化机制三、RDB(Redis DataBase) 内存快照RDB 原理RDB的触发方式RDB的数据恢复&#xff1a;RDB的优点RDB的缺点四、AOF(Append Only File) 增量日志AOF 原理AOF的触发方式AOF 重写机制AOF的优点AOF的缺点一、什么是redis持久化 redis…

JavaEE【Spring】:SpringBoot 统一功能处理

文章目录前言一、用户登录权限效验1、最初用户登录验证2、Spring AOP 用户统⼀登录验证的问题3、Spring 拦截器① 自定义拦截器② 将自定义拦截器加入到系统配置4、拦截器实现原理① 实现原理源码分析② 拦截器小结5、扩展&#xff1a;统⼀访问前缀添加二、统⼀异常处理1、使用…

系分 - (软件)需求工程

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录系分 - (软件)需求工程考点摘要需求工程需求开发&#xff08;主线&#xff0c;目标&#xff09;需求分类领域工程PIECES框架需求获取需求记录技术需求分析结构化分析方法 - SASA - 数据字典SA - 数据流图D…

浅谈Web缓存

Web缓存分为两类 http缓存浏览器缓存 1、缓存位置 Service WorkerMemory CacheDisk CachePush Cache 2、浏览器缓存分为三类 cookielocalStroragesessionStorage cookie的最大容量为4kb, localStorage, sessionStorage容量为5M localStorage可永久存储, 除非调用API删除或…

【Linux编译器-gcc/g++使用】

1. 背景知识1. 预处理&#xff08;)2. 编译&#xff08;)3. 汇编&#xff08;&#xff09;4. 连接&#xff08;)有关具体详解可以参照这篇博客&#xff1a;程序环境与预处理2. gcc如何完成格式 gcc [选项] 要编译的文件 [选项] [目标文件]2.1预处理&#x1f4d9;功能&#x1f4…

11_1、Java集合概述

一、Java集合框架概述 一方面&#xff0c; 面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象 的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用Array存储对象方面具有一些弊 端&#xff0c;而Java 集合就像一种容器&#xff0c;可以动…

【自学Java】Java语言数组赋值

Java语言数组赋值 Java数组赋值教程 在 Java 语言 中&#xff0c;给 数组 赋值&#xff0c;就相当于给每个位置上的对应的位置填充数据。 Java语言数组赋值详解 Java 中的数据赋值分为动态化赋值和静态化赋值两种赋值方式。动态化赋值指的是先定义数组&#xff0c;然后指定…

Unity github发布 和 gitignore文件的详细设置

你做了一个unity项目 想给他提到github上去 如果你是windows 他会不停提示你 warning: LF will be replaced by CRLF in ***** The file will have its original line endings in your working directory 提示这个是因为 windows和其他平台的换行符不一样导致的 git想给你改换行…

PDF转换成Word转换器,这个软件实在太好用了!

在办公中我们会发现&#xff0c;我们每天需要处理的文件实在是太多了。大部分时间里我们都在跟各种各样的文件打交道&#xff0c;有部分文件内容很接近&#xff0c;甚至只是转换了输出格式而已&#xff0c;其具体内容并没有发生改动。那当我们想要直接使用它的另一种格式的时候…

ArcGIS三维制作步骤发布时间:

ArcGIS三维制作步骤发布时间&#xff1a;2018-01-17 版权&#xff1a;同步视频教程&#xff08;一)&#xff1a;http://www.bigemap.com/video/play2018022687.html&#xff08;二&#xff09;&#xff1a;http://www.bigemap.com/video/play2018022686.html&#xff08;三&…

电脑死机怎么办?超级简单的方法

当我们的电脑运行多个软件的时候&#xff0c;就会很容易发生死机。如果是台式电脑&#xff0c;我们可以通过按重启按钮&#xff0c;或者是通过直接拔电源来解决死机的问题。 如果是笔记本电脑&#xff0c;我们怎么按鼠标或者电脑的键盘&#xff0c;它都没有反应。电脑死机怎么…

Ubuntu 20.04源码编译安装OpenCV 4.7.0

目录 前言 1--下载OpenCV 4.7.0 2--编译安装OpenCV 4.7.0 3--测试 3-1--查看安装的版本 3-2--基于VSCode和CMake测试项目 4--报错解决&#xff08;重点&#xff01;&#xff09; 4-1--OpenCV与FFmpeg不兼容 4-2--LIBTIFF报错 4-3--系统与Anaconda的库lib冲突 4-4--测…

MATLAB-罗盘图绘制

compass 函数用于绘制罗盘图&#xff0c;利用直角坐标系&#xff0c;在圆形栅格上绘制图形&#xff0c;整个形状类似一个“罗盘”&#xff0c;具体使用格式如下。1 ) compass( x , y):函数绘制一个由原点出发、由(x ,y)组成的向量箭头图形。2 ) compass( z):等价于compass( rea…

6步速通:修复损坏的word文件

前两天&#xff0c;老师找到我&#xff0c;想让我帮忙修复一个打不开的docx文档。症状大概是这样&#xff1a; 打开文件的时候花了较长时间&#xff0c;并且显示了乱码&#xff0c;并且老师使用WPS自带的文档修复功能也无法修复。 遇到这个情况&#xff0c;到底怎么办呢&#…