从零开始学习C语言丨最基本的数据结构

2023-3-31 来源:不详 浏览次数:

这篇文章来和大家聊一聊C语言中又一个重要的知识点,数组。

首先,大家知道程序是由什么组成的吗?

有人说,程序=CtrlC+CtrlV。当然,这是大家调侃的说法。

大多数人认可的是,程序=算法+数据结构。

程序本质上是为了帮助人们更好地解决问题。算法属于逻辑部分,是解决问题的步骤;数据结构属于存储部分,用来存储解决问题的工具。

例如,我们做菜。算法就是放多少盐、火候怎么控制、怎么炒等步骤;数据结构则是用来存放菜刀、油盐酱醋等工具的橱柜。二者相辅相成,缺一不可。

数组,是最基本、也是最常用的数据结构。是用来存储固定大小、相同类型元素的顺序集合。

学好数组,再去学习算法与数据结构会有着很大的帮助。

数组声明

在前面学习数据类型中,知道数组是属于构造类型中的一种。既然作为一种数据类型,数组自然是需要声明,才会被编译器所识别使用。

数组声明需要提供数组中元素的类型,数组变量的名称以及数组大小。

这里声明了一个int类型,变量名为arr,长度为10的整形数组。

声明后的arr数组中只能存放int类型的数据,不能是char、float、double等其他类型。同时,只能存放不超过10个int类型的数据。

数组在声明之后要怎么把数据填入呢?

一种是声明时并进行初始化赋值,另一种是通过索引值赋值。

在生活中,谈到顺序,我们都是默认从1开始的。但是在计算机中,索引顺序是从0开始的,也就是数组相应位置对应的索引值,实际上是n-1。

为什么索引值从0开始?

这边我找到了三种解释,有说是为了节省内存空间的,在之前内存是一个非常稀罕的东西。

假设有4个数据要存入,索引值从1开始,对应的二进制是(1,10,11,);从0开始的索引,对应的二进制是(0,1,10,11)。

如果从1开始,要比从0开始多耗费1个bit的内存,这对于当时内存极为稀缺的年代是不能被接受的。沿至今日,即便内存便宜了,但是大家也沿袭了这个习惯。

至于其他的说法,还有从硬件层面作出解释,以及上届、下届差值的说法。有兴趣的,大家伙儿可以自行去了解。

数组最大的优点就是支持随机访问,即当你想要访问数组中某个数值,只要知道这个数值在数组中的哪个位置,就可以知道它对应的索引值(n-1),通过索引值就可以直接使用这个数值。

但数组也有缺点,那就是在一开始创建数组,数组中的元素个数以及数组所占用的内存空间就已经被固定了。

如果数组中的空间没有使用完,那么就会造成空间浪费。

所以在创建数组中之前,就要想清楚这个数组准备用来做什么,里面要放多少数据。

数组长度

当我们需要定义一个遍历数组的函数,但是不知道传入的数组的长度是多少。这时候,怎么知道数组的长度呢?

这里就需要使用到sizeof运算符.

sizeof(arr)返回的是数组变量arr所占用的内存空间大小,为数据类型所占用的空间大小乘以数组长度;

sizeof(arr[0])返回的是数组中第一数值所占用的内存空间大小,和其类型相关。

两者相除后的结果,就是数组arr的长度。

多维数组

如果把所有数据都存放在一个数组里面,有时候会显得比较混乱,分不清谁是谁。

例如,我们要存放一个班级所有同学的成绩,但是成绩又分学科,有语文、数学、英语等等。

如果用一维数组表示:

像这种情况,处理起数据就会比较麻烦。

最好展示的方式,就是使用表格。每一行表示每一位同学,每一列对应的就是学科成绩,这样就会让数据显得清晰明了。

方式如下:

这种方式也被称之为二维数组。

数组里面可以存放任意类型的数据,而数组本身也是一个数据类型,自然也是可以放在数组里面。

所以,二维数组也被称为数组的数组。

二维数组的赋值和访问方式,和一维数组的访问方式一样,都是可以通过索引值来赋值或者访问。

第一行表示将arr数组中的第一个数组中的第二个数据更改为99.0。

第二行表示访问arr数组中的第二个数组中的第三个数据,所以值为50.5。

有二维数组,自然也会有三维的、四维的等等,统称为多维数组。

对于一般人来说,学习到二维数组就差不多。再高维的数组,目前来说没有太大的必要。

值得注意的是,无论是一维数组,还是多维数组,里面所有元素的数据类型都必须一致。

总结

文中介绍了数组的定义和作用,数组的声明方式,初始化赋值,索引值赋值。以及如何确定未知长度数组的长度,二维数组的声明和使用。

如果您觉得本篇文章还可以的话,点个赞或者分享,支持一下。目前个人还处在学习阶段,文中可能会出现谬误之处,如有发现的,希望能够不吝赐教一番。

转载请注明:
http://www.weichiyen.com/szsx/13260.html
  • 上一篇文章:

  • 下一篇文章:
  • 网站首页 版权信息 发布优势 合作伙伴 隐私保护 服务条款 网站地图 网站简介

    温馨提示:本站信息不能作为诊断和医疗依据
    版权所有 2014-2024
    今天是: