1 数组
是一个能够存放若干个相同数据类型的数据结构 注意: 在声明数组的时候,想要往数组内存放什么数据类型,那么就必须给这个数组声明成对应的数据类型。
2 数据的声明及定义
数组的数据类型+数组名[数组的容量]={实际数据(每一个实际数据使用’,’分隔开)}; 示例:
1. int arr[5]={0,1,2,3,4};
2. int arr[5]={4}; 将数组中的第0个元素初始化为4,其它元素初始化成0;
3. int arr[5]={0}; 将数组中的所有元素初始化成0;
注意:
- 在声明数组的时候,可以不规定数组长度,但是必须初始化数据。
如: int arr[]={0,1,2,3,4}; 因为系统在运行到数组声明部分时,必须向内存空间申请一片固定大小的内存。那么数据的声明部分没有给到系统数组的大小是多少,那么系统就会去数组的定义部分,查找数组的实际的长度,用来向系统申请空间大小。 所以说,系统会优先查看数组声明部分的容量,再去查看数组实际定义的长度来申请内存空间。如果声明和定义都没有约定数组的容量,那么导致编译报错。 - 当数组的容量使用一个变量去声明的时候,则此时不能定义数组。因为变量的值可能发生改变,当数组使用变量去声明长的时候,系统肯定不会知道数组的确切长度是多少,此时如果给该数组做了明确的定义,可能导致定义的长度比实际数组容量要大。所以系统禁止使用变量声明容量的时候同时去定义该数组。
3 数组的访问
数组名[数组元素位置];
示例: 有一个数组int arr[5]={0,1,2,3,4}; 如要访问第1个元素和第2个元素,使其相加,导出结果:arr[1]+arr[2]==3 (数组的下标是从0开始计算的);
4 访问整个数据结构
访问整个数据结构这个思想,在所有数据结构中都是通用的,并且是所有功能的基础。 我们把访问整个数据结构的过程称作:遍历——对一个数据结构中的所有数据,全都并且仅访问一次。 所有数据结构都会面临如下课题: 数据结构的 增、删、改、查、排、遍历 数组名本身是一个地址,这个地址和该数组首元素的地址是一样的。
5 二维数组
int arr[m][n]; 表示二维数组有n列m行 即由m个有n个元素的一维数组组成。 示例: int arr[2][3]={{1,2,3},{4,5,6}}; 逗号运算符: 可以用来将一个表达式隔开成若干个表达式,使得每一个表达式独立运算,但是整个表达式的值取最末尾表达式的值。
6 数组的排序:
①冒泡排序:逻辑最简单,代码也最简单,但是时间复杂度最高(效率最低)。 使用比较运算符,当发现两者之间的最大值出现,就立即进行换位。
②选择排序:比冒泡难一点,但是效率高。 使用比较运算符,查找出第一位置的元素并记录好下标,当遍历完毕后再把找到的元素进行换位。
③快速排序:代码难度最为高的一种排序方式 ,但是效率非常高。
7 字符数组
字符数组能够和整形数组一样的使用方式,但是字符数组有其特殊的使用方式。
7.1字符数组的声明及定义:
①如同其它数组一样定义:
char str[20]={‘h’,’e’,’l’,’l’,’o’};
②字符数组特有的定义方式:
char str[20]=”hello”;
7.2字符数组的使用:
①如同整型数组一样输入输出
char str[20]= {‘h’,’e’,’l’,’l’,’o’};
for(int i=0;i<5;i++)
{ scanf(“%c”,&str[i]);printf(“%c”,str[i]);}
②字符数组特有的输入输出
char str[20]= {0};
scanf(“%s”,str);
printf(“%s\n”,str);
注意: 在字符数组中,系统默认会在每一个字符数组/字符串的结尾位置,加上结束符’\0‘(也就是空字符)。 由于以上特性,我们在设计字符数组的时候,最大容量最低要求要比实际长度多1.
7.3字符数组的函数:
#include<string.h>
①strlen ,用来测量一个字符数组的实际长度, 参数列表:目标字符数组 返回值:返回字符串的长度。
②strcpy(s1, s2);, 用来实现字符数组的拷贝, 功能:复制字符串 s2 到字符串 s1。是字符数组/字符串之间唯一的相互赋值的方法。使用该函数的时候,目标字符数组尽量比源字符的容量要大。
③strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。是比较ascii的值。返回的是两者的差值
④strcat, 用来拼接两个字符数组/1个字符数组和1个字符串 参数列表:字符数组1,字符数组2/字符串 返回值:将更新后的“字符数组1”返回
⑤strtok, 用来分隔字符串 参数列表:待分隔的字符串,分隔字符串 返回值:分隔后取出来的第一个字符串;
⑥memcpy 用法: 参数列表:目标指针,源指针,需要复制的数量 函数功能:将源指针上的内容,复制到目标指针指向内存空间上,复制的内存空间大小,为第三个参数。 返回值:将更新后的目标指针返回。
|