数组——初识数据结构

栅格数据空间叠置分析题目步骤讲解 题目: 准备工作: ①新建数据库,将实验数据导入(利于后期矢量转栅格操作,未建数据库此步骤会一直出错); ②在工具条自定义窗口勾选spacial analyst模块,在菜单栏→扩展模块,勾选spacial analyst;确保实验后面的操作可以成功。 详细操作步骤: 1.对三个方案的规划路线(line.shp)建立50m缓冲区;打开ArcMap,在ArcToolBox→分析工具→邻域分析→缓冲区,打开缓冲区工具窗口,界面设置如图:线性单位填写50米,其余默认,单击“确定”。 ... 阅读详情

一维数组

数组的创建

数组是一种相同类型元素的集合

数组的创建方式

C99 中引入了变长数组的概念,变长数组支持数组的大小使用变量来指定

明显这里的vs2019不支持变长数组

数组初始化和不完全初始化

第二个数组就是典型的不完全初始化,开辟了10个空间,只有第一个是1,剩下的就用0填充

这里的ch1和ch2看起来似乎一样,但ch1只有 a b c, 后面的0是编译器主动加上的;ch2是abc\0,\0的ASCII码值也是0,所以后面也是6个0,但ch2本身就自带了一个

这样的代码也是有问题的,这里只用了一个空字符串初始化,所以数组的长度是一个元素

一维数组的使用

一个数组初始化好后每个元素都有其下标,下标是从0开始的

一维数组在内存中的存储

这里我们打印一下数组的每个元素的地址看看,%p是打印地址

我们发现每个相邻的地址最后的数字就相差4,因为这是整形数组,而一个整型是4个字节

数组在内存重视连续存放的!

随着数组下标的增长,地址也是由低到高变化的

数组开辟的空间也不宜太大

数组中的数据放在栈区

0和\0

二维数组

二维数组的创建

初始化

第一个参数是行数,第二个是列数

这个数组是怎么存放的呢?

其实是1234先把第一行放满,5放在第二行,其余的位置都是0

还有另一种初始化方式

就是指定初始化位置

以及,对于二维数组,初始化时,可以省略行,不能省略列

二维数组的使用

我们尝试一下一列一列打印

二维数组在内存中的存储

试着打印一下地址看看

能发现他们似乎也是连续存放的

也能将它们理解为一个12元素的整型数组

数组越界

当我们访问的空间超过数组申请的空间时,就造成了越界访问

还有这样

可能有人比较疑惑,为啥5会打印两次呢?

第一次打印了5个,第二次还是从行的下标0位置处开始,5这个位置是数组第二行的第一个元素,所以还会被打印一次。

数组应用

冒泡排序

冒泡排序(Bubble Sort)是一种简单直观的排序算法

冒泡排序的核心思想是:

通过相邻元素两两比较,把较大的元素“冒泡”到序列的一端,像水中的气泡一样逐步上升。

具体过程如下:

  • 从头到尾依次比较相邻两个元素,如果前一个比后一个大,就交换它们;

  • 每完成一轮,最大的元素就被“冒泡”到了当前未排序部分的末尾;

  • 然后对剩下的部分重复这一过程,直到整个序列有序。

比如排序 [5, 2, 4, 3, 1],第一轮结束后变成 [2, 4, 3, 1, 5],最大值 5 被放到了最后。之后对 [2, 4, 3, 1] 再次进行“冒泡”,直到全部排好序。

设有一个长度为 n 的数组,共需进行最多 n-1 轮“冒泡”:

  • 第 1 轮:比较 n-1 次,把最大值移到末尾;

  • 第 2 轮:比较 n-2 次,把次大值移到倒数第二位;

  • …

  • 第 n-1 轮:只需比较 1 次。

基本理念就是数组中的元素两两相比较,随后判断是否交换位置,最终的目的是排成一个升序或降序数组

或者函数的形式

#include<stdio.h>
void bubble_sort(int arr[10])
{
	//求数组的元素个数
	int sz = sizeof(arr) / sizeof(arr[10]);
	//冒泡排序的趟数
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		//一趟冒泡排序
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}

int main()
{
	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);

	//0 1 2 3 4 5 6 7 8 9
	//要对数组升序排序
	//冒泡排序
	bubble_sort(arr);
	//打印
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

但结果好像不对诶~

原来上面数组名传参的时候传递的只是数组首元素的地址,形参就是指针变量来接收,并没有把整个数组传上去。(这叫做数组名的降级)

上面sz就是1了,所以数组才会没变化

这时我们只需要在main函数里先把sz计算好,然后传给排序函数就行

#include<stdio.h>
void bubble_sort(int arr[10],int sz)
{
	//冒泡排序的趟数
	int i = 0;
	for (i = 0; i < sz - 1; i++)
	{
		//一趟冒泡排序
		int j = 0;
		for (j = 0; j < sz - 1 - i; j++)
		{
			if (arr[j] > arr[j + 1])
			{
				int tmp = arr[j];
				arr[j] = arr[j + 1];
				arr[j + 1] = tmp;
			}
		}
	}
}

int main()
{
	int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
	int sz = sizeof(arr) / sizeof(arr[0]);

	//0 1 2 3 4 5 6 7 8 9
	//要对数组升序排序
	//冒泡排序
	bubble_sort(arr,sizeof(arr)/sizeof(arr[0]));
	//打印
	for (int i = 0; i < sz; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}

看一下这段代码

运行结果是两边都相等!

这里刚好也得出了

当p指向数组的第一个元素时,p+i就指向数组第i个元素

p里存放着数组首元素的地址,所以p和arr可以相互替换,下面这些效果也相等

还有加法交换律能得出的结论

前面讲了数组名是数组首元素地址,但存在两个例外

sizeof(数组名),数组名表示整个数组,计算的是整个数组的大小,单位是字节

&数组名,数组名表示整个数组,取出的是整个数组的地址

看看这个,前面两个+1后跳过了一个整型元素,地址都是+4,而第三个+1后跳过了整个数组,地址变化了40个字节

【一看就会】Autoware.universe中静态绕障路线的生成逻辑 在路径行为规划中,前期根据地图和起点终点,生成了一组连续可行的路径段序列(lanelets),然后后续路径行为规划,又会进行起始点,终止点,避障绕障路径的路径规划,并且会调用route_handler中的函数,进行中心线生成,最后生成路径,后续再给速度行为规划进行速度规划。在autoware.universe的规划中,是基于规则的规划,而其中的规则又是为了解决不同场景的。而这些场景,大部分是为了解决路上障碍物(静态、动态、行人、车辆等等)。 阅读详情

相关推荐

快手did did_gt edid的注册过程

接口 https://gdfp.ksapisrv.com/rest/infra/gdfp/report/kuaishou/android did 是本地生成的16进制 或者 获取的 android_id did_gt 是did生成时间戳 1595073601970 public static final Random f16237a = new Random(System.currentTimeMillis()); public static long m19668a() {  &n

HURUWO的技术博客 1万+

初识数据结构之数组

为什么很多编程语言中数组都从0开始编号? 提到数组,我想你肯定不陌生,甚至还会自信地说,它很简单啊。 是的,在每一种编程语言中,基本都会有数组这种数据类型。不过,它不仅仅是一种编程语言中的数据类型,还是一种最基础的数据结构。尽管数组看起来非常基础、简单,但是我估计很多人都并没有理解这个基础数据结构的精髓。 在大部分编程语言中,数组都是从 0 开始编号的,但你是否下意识地想过,为什么数组要从 0 开...

慕白博客 404

深度解析中国支付清算体系

说起国之重器,不仅仅有 东风快递、渔16、渔17、渔18,还有另外一个国之重器-CNAPS2(中国支付清算体系)。 中国国内支付行业的发达水平、繁荣程度,不客气的讲,在全世界都是数一数二的,世界上最大的银行卡组织银联在中国,世界上交易量最大的网络零售支付清算体网联在中国。可以说现在我国经济的高速发展,离不开CNAPS2。

银行信息系统应用架构详解 2510

数组与数据结构初识

数据结构数据结构主要是数据的一个存储和逻辑结构的体现。只要能存储结构的一个结构我们就称为数据结构。

m0_74186355的博客 201

【深度学习】通俗易懂讲解循环神经网络LSTM

目录 1、循环神经网络(Recurrent Neural Networks) 2、长依赖存在的问题 3、LSTM 网络 4、LSTMs的核心思想 5、一步一步理解LSTM 6、LSTM的变种 7、总结 1、循环神经网络(Recurrent Neural Networks) 人对一个问题的思考不会完全从头开始。比如你在阅读本片文章的时,你会根据之前理解过的信息来理解下面看到的文字。...

Nieson2012的专栏 2729

永磁同步电机无传感器控制:HFI与ESMO技术详解

高频注入(HFI)和增强型滑模观测器(ESMO)是现代永磁同步电机(PMSM)无传感器控制的核心技术。HFI通过注入高频信号利用电机凸极效应获取转子位置,而ESMO则通过改进传统滑模观测器,有效抑制抖振并提升动态响应。这两种技术的结合特别适用于零低速区域的位置估计,在工业伺服、电动汽车等领域有广泛应用。方波高频注入作为实现方案之一,具有计算量小、实现简单的特点,配合自适应滤波等信号处理技术,可以在保证精度的同时降低系统成本。

weixin_29183637的博客 355

数据结构和算法初识 + 数组

目录数据结构和算法的关系线性结构和非线性结构稀疏sparsearray数组二维数组和稀疏数组的转换 数据结构和算法的关系 数据结构是一门研究组织数据方式的学科,有了编程语言也就有了数据结构.学好数据结构可以编写出更加漂亮,更加有效率的代码。 要学习好数据结构就要多多考虑如何将生活中遇到的问题,用程序去实现解决. 程序 = 数据结构 + 算法 数据结构是算法的基础, 换言之,想要学好算法,需要把数据结构学到位。 线性结构和非线性结构 数据结构包括:线性结构和非线性结构。 线性结构 线性结构作为最常用

m0_56600567的博客 147

51雾化器实现

1. 雾化器简介 雾化器是将试液雾化的一种器械。雾化器是原子化系统的重要部件,其性能对测定的精密度和化学干扰等产生显著影响。因此要求雾化器喷雾稳定、雾滴细小、均匀和雾化效率高。雾化器的类型有超声雾化器,空气压缩式雾化器,网式雾化器。超声雾化器因其价格合适,适合家用,被广泛应用于加湿器,香薰机等各种小家电,也在医疗领域有很多的应用。家用雾化器的主要器件是一枚雾化片。 家用雾化器分为两种不同类别雾化片,实孔雾化片和微孔雾化片,这两种的喷雾方法和工作原理是有所不同的。不同的雾化片需要特定的频率才能工作。 实孔雾

qq_42415953的博客 2万+

数据结构与算法 — 初识数据结构与算法、数组的使用及操作

目录 一、什么是数据结构 二、什么是算法 三、数组 1.数组的基本使用 (1).创建和初始化数组 (2).数组长度和遍历数组 2.数组的常见操作 (1).添加元素 (2).删除元素 (3).任意位置 3.数组的其他操作 (1).常见方法 (2).数组合并 (3).迭代方法 (4).reduce方法 一、什么是数据结构 ...

m0_59897687的博客 324

第八节:Orin NX 修改pinmux

读SPI1对应的寄存器,看对应的GPIO口是否被复用为SPI功能。说明GPIO口的功能已经被复用为SPI。烧录或者命令行烧录,都是根据。这里我们把文件统一命名成。文件,Orin NX的。测试SPI功能,基于。

孤独旅客的博客 792

【27】软考软件设计师——数据流图(DFD)补全题满分精讲|下午15分大题深度拆解

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第27篇,深度精讲**下午案例题第1道必考大题:数据流图(DFD)补全**,该题单题分值高达**12 ~ 15分**,是整张试卷最稳的保底得分大题。我结合多年备考复盘与真题阅卷规则,超详细拆解DFD四大核心元素标准定义、机考绘图规范、三层分层逻辑、**父图子图平衡刚性扣分规则**,升级强化版「DFD满分补全三步法」;复刻历年高频真题完整流程,拆解缺失数据流定位、实体/存储辨析、平衡改错、文字需求对照全流程,配套**阅卷满分答题话术、机考避坑细则

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 590

Java面试八股文宝典:初识数据结构-数组

下一章我们将继续探讨其他与 HashMap 相关的关键数据结构,包括HashSet。这些数据结构在特定的应用场景中发挥了重要作用,它们具有不同的特性和性能特点,我将详细介绍它们的使用方法、优势以及适用的情况。如果您在这些内容中发现任何不准确或需要进一步说明的地方,欢迎提出,我将尽力提供准确和有用的信息。让我们共同学习,共同进步。

qq_34445142的博客 339

Vue3 - 完美解决高德地图定位失败 Get ipLocation failed.Geolocation permission denied.(获取ipLocation失败。地理定位权限被拒绝。)

Get ipLocation failed.Geolocation permission denied.,vue3引入高德地图当前定位失败 ,vue3中使用高德地图定位报错,高德地图API用户定位失败,高德地图H5 定位失败报错排查和解决方案,微信公众号H5网页高德地图定位报错,谷歌浏览器-高德地图定位失败geolocation,getCurrentPosition 返回的 message报错,如何解决此问题,uniapp h5高德地图,微信、QQ等内置浏览器定位失败,高德地图实现实时用户位置定位,引入高德

🏆 前端领域优质创作者 4170

高级数据结构1—初识树状数组—快速求得前缀和和修改某一元素值

树状数组的原理与模板

CS_boy的博客 989

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Python算法笔记(2)-初识数据结构-数组、链表、栈、队列、哈希表

Python算法笔记(2)-初识数据结构-数组、链表、栈、队列、哈希表

入佛门六根不净,入商场狼性不足 803

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java面试八股文宝典:初识数据结构-数组的应用扩展之HashMap

除了基本的数组,还有其他高级的数据结构,用于更复杂的数据存储和检索需求。其中,HashMap是 Java 集合框架中的一部分,用于存储键值对(key-value pairs)。HashMap允许我们通过键来快速查找和检索值,类似于字典或关联数组的概念。HashMap在实际编程中广泛应用于各种场景,包括缓存、数据库索引、数据存储等。HashMap本文已经提供了有关HashMap的深入信息,包括其底层代码和注意事项。下一章将继续探讨 HashTable,以便能够全面了解这两个重要的数据结构。

qq_34445142的博客 394

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

07-【数据结构与算法-Day 7】告别数组束缚,初识灵活的链表 (Linked List)

在前面的文章中,我们学习了数组,一种强大且应用广泛的数据结构。然而,数组天生的“体质”——连续的内存空间和固定的大小,也给它带来了难以逾越的障碍,尤其是在处理动态数据和频繁增删的场景中。本文将带您认识一位新的“朋友”——链表(Linked List)。它通过一种“穿针引线”的巧妙方式,完美规避了数组的硬伤,提供了极高的插入和删除效率。本文将作为链表系列的开篇,从最基础的概念入手,为您揭开链表的神秘面纱,深入理解其核心构成:节点(Node)与指针(Pointer),并带您直观地感受单向链表的结构之美。

吴师兄大模型的博客 1145

Java面试八股文宝典:初识数据结构-数组的应用扩展之HashTable

上一章我们了解HashMap后,让我们深入研究HashTable,这是另一个键值对存储的数据结构。Hash表是一个非常重要且广泛用于编程中的数据结构,了解其工作原理和用法对于编写高效的程序非常重要。HashTable是一个重要的哈希数据结构,用于存储键值对。它具有快速查找、线程安全、不允许 null 键和值等特性。了解其底层实现和用法对于编写高效且安全的程序至关重要。在使用HashTable时,请注意线程安全性和性能方面的考虑,并根据实际需求进行调整。下一章我们将继续探讨其他数据结构,包括HashSet。

qq_34445142的博客 399

Java面试八股文宝典:初识数据结构-数组的应用扩展之ConcurrentHashMap

好的,本期我们的数组数据类型的讲解就到此结束。下期,我们将继续深入探讨链表数据结构,它将带领我们进入更加复杂和灵活的数据结构世界。如果您在学习过程中有任何问题或疑问,都欢迎在评论中提出或者私信联系我。我将竭尽全力为您提供更全面和详细的讲解,以确保您的学习得以顺利进行。期待下期的精彩内容!

qq_34445142的博客 407

JavaScript回顾六:数组和对象

我们学习数组就得知道什么是数组。 一、数组初识/特点 .数组:一组数据的集合,数组的每一个数据叫做一个元素;Array[4]:数组和长度; 数组元素可以是任意类型,同一个数组中的不同元素可能是对象或数组; 每个数组都具有一个length属性,length属性就是数组元素的个数(数组的长度); 数组中每个元素在数组中有一个位置,以数字表示,称为索引(下标); 索引从0开始排列,[0]表示第一个数据,以此类推; 数组最大的索引,始终比数组长度小1; 数组的数据类型是一个对象,其实就是加了个数字索引和lengt

weixin_49521534的博客 328

【c语言 】数组入门

今天,我们就来一起探索C语言中的数组,从初识数组到数组的存储方式,再到数组的定义和元素的访问方式,逐步揭开数组的神秘面纱。

m0_74195174的博客 1357

数据结构和算法基础(一)[初识复杂度,对数器,二分法,位运算及简单应用:找到二进制最右面的1,找到数组中的唯一/唯二奇数次出现的数]

初识复杂度 对数器 二分法 位运算及简单应用: 找到二进制最右面的1 找到数组中的唯一/唯二奇数次出现的数

书院二层楼 1025

2019-01-15

放了寒假后,我开始自己学习C语言,一边看PP T,一边看从图书馆借的书。如果我们在这之前还学过Python,会绝得C语言虽然比较难,但是逻辑却很严谨,通过学习C语言,有利于我们提高自己的逻辑思维。 一个星期过去了,我对C语言有了大概的了解,但是对链表、数组、文件的操作和一些函数库还是很生疏。 在学习C语言的时候,我们要多练习,要多尝试,很多代码都是在不断出错,不断修正的过程中成功...

qq_46197017的博客 152

Typescript入门 (1)

Typescript入门(1)一.Typescript开发环境搭建二、静态类型基础静态类型对象静态类型三.函数参数注解四.数组类型注解五.元组的使用和类型约束六.初识interface七.再识interface 一.Typescript开发环境搭建 下载Node.js //node官网 https://nodejs.org/zh-cn/ 安装Node.js 使用npm全局安装typescript //1.进入命令行 //2.输入以下代码 npm install typescript -g 创建

蜡笔小星的博客 133

数据结构和算法初识

本文主要讲解了数据结构和算法的基本概念及其两者关系,同时讲解了栈、队列和优先队列三种数据结构的概念、特点及其代码实现封装和相关面试题

zhanghuaiwei 602

数据结构—笔记整理—初识数据结构

数据结构笔记及相关知识整理,冲冲冲!!!

好好读书 4万+
上一篇: 递归——最烧脑的一集
下一篇: 操作符与表达式
宴之敖者、
博客等级 码龄4年 131粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值