数据结构概述
数据结构的出现是为了在计算机中更加科学的管理数据,选择合适的数据结构可以让我们在操作数据时性能更加优秀,操作更为方便。
常见的数据结构分为两类:
- 线性数据结构(线性表)
- 数组
- 链表
- 栈
- 队列
- ...
- 非线性数据结构(非线性表)
- 树
- 图
数组概述
例如:我要存储一个学生的成绩,使用 double 类型的变量即可搞定。但当我需要存储更多的学生成绩时,例如存储全班学生成绩,很显然再使用 double 类型的变量一个个的来存储将会使程序变得越来繁琐,不方便我们进行使用。
double score = 90;
// 存储全班成绩
double score1 = 90;
double score2 = 80;
// ...
我们需要一种更为优秀的数据存储方式。
数组是线性数据结构中最为基础,最为典型的一种顺序型结构。
它用一组 连续的内存空间 ,来存储一组具有 相同类型 的数据。
与变量相比,变量是一种单一的数据存储方式,而数组是用于存储一连串的一组数据。
数组组成
变量:
变量数据类型 变量名 = 变量值;
数组:
// 声明数组:在内存空间中会开辟一串连续的空间
数组元素数据类型[] 数组名 = new 数组元素数据类型[数组容量];
// 给数组赋值:将数组元素存储到指定的数组空间中
数组名[下标] = 元素值;
// 从数组取出元素
数组名[下标]
- 数组元素数据类型
- 数组元素
- 数组名
- 数组容量
- 数组下标(index)
数组的定义
例如:我要存储5名学生成绩。
// 声明数组:在内存空间中会开辟一串连续的空间
double[] scores = new double[5];
// 给数组赋值:将数组元素存储到指定的数组空间中
scores[0] = 80;
scores[2] = 90;
// 取出数组的值
scores[2]
注意:数组的容量,一经定义,不可改变。
在声明数组时,直接进行赋值。
数组元素数据类型[] 数组名 = {元素值1, 元素值2, ....};
还有一种
数组元素数据类型[] 数组名 = new 数组元素数据类型[]{元素值1, 元素值2, ....};
数组动态赋值
利用数组赋值的规律,采用循环结构进行的键盘绿入
【循环分析】
1.有规律,使用循环,有固定次数for循环
2.循环条件:i < 数组容量
循环变量:int i = 0;
循环出口:i++;
3.循环操作:
1.键盘录入数据
2.将数据赋值给数组的指定下标
4.套用语法
数组默认值
整数型数组(byte、short、int、long):默认值为0
浮点型数组(float、double):默认值为0.0
布尔型数组(boolean):默认值为false
字符型数组(char):默认值为一个空格(\u0000)
字符串型数组(String):默认值为 null
数组遍历
数据的操作,逃脱不了几个本质: CRUD (增删改查)。
- 增加数据:数组名[下标] = 元素值;
- 修改数据:数组名[下标] = 新元素值;
- 删除数据:数组名[下标] = 数组对应元素类型的默认值;
- 查询数据:
- 查询单个的:数组名[下标]
- 查询所有的:
- 利用循环将数组中的每一个空间的元素取出来(遍历)
1.通过循环,遍历所有的数组下标,根据下标取出每一个元素
double[] scores = {90, 80, 70, 60, 50};
//遍历
for (int i = 0; i < scores.length; i++) {
System.out.println(scores[i]);
}
2.通过增强for循环来遍历出数组的每一个元素
for (数组元素数据类型 临时变量名 : 数组名) {
临时变量名
}