线性表之数组
在线性数据结构之中,常用的有堆栈、队列、数组和链表。而最简单且易上手的就是数组,数组是一个有序的元素序列,在这个序列里面存放的都是相同特性的数据元素,根据存放的数据类型的不同来区分数组的类型,如果存放的都是int型的数据则该数组为int型数组。一般数组的定义为:类型名 数组名[数组成员个数],如int arr[5]表示这是一个5个int型数据的集合,且最多存储5个该类型的数据,若超过则不保证使用的正确性。
在数组中每个元素都有一个序号,从0开始,称为下标,在需要使用数组中的元素,直接指明下标即可:
#include <stdio.h>
Int main ()
{
Int arr[10] = {0}; //定一个int型数组
Int i = 0;
for(i= 0; i < 10; i++) //将1~10放入数组
{
arr[i] = i + 1;
}
for(i = 0; i < 10; i++)
{
printf(“%d ”, arr[i]); //根据下标依次获取数组里面的值
}
return 0;
}
运行结果:
1 2 3 4 5 6 7 8 9 10
在这里面变量i 即是数组下标,也是循环条件,将数组下标作为循环条件达到最后一个元素就会结束循环。
在数组里面存放的数据的类型必须统一,定义的是int 型数据,那么存放的就必须是int型数据;通过下标访问数组中的数据时,必须在取值范围内查找,过大或过小都会越界,导致数组溢出。
数组内的内存是连续的:数组是一个整体,他的内存是连续的;也就是说数组元素之间是挨着的,彼此之间没有一点空隙;如在数组int arr[4]中它的内存情况如下:
arr[0] arr[1] arr[2] arr[3]
连续的内存可以为指针操作,通过指针去访问数据元素以及内存处理提供了便利,这也使得数组还可以作为缓存使用,也就是临时存储数据。
在进行数组的内存赋值的时候只能给元素逐个赋值不能给数组整体赋值,例如给10个元素全部赋值为1只能写作:
int arr[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
不能写作
int arr[10] = 1;
除了一维数组之外还有多维数组,
int a[2][2] = {{1, 2}, {3, 4}}; //二维数组
int a[2][2][2] = {1, 2, 3, 4, 5, 6, 7, 8}; //三维数组
多维数组的定义和一维数组的定义相同,我们可以把一维数组当作是一排的座位,而二维数组则是有n 排的座位,可以想象成一个矩阵,三位数字则是有多少层这样的矩阵,后面的多维数组也依次增长。
//二维数组的遍历
#include <stdio.h>
int main()
{
int i = 0, row = 0; column = 0;
int arr[3][2] ={{1, 2},
{3, 4},
{5, 6}};
//也可以写成int arr[3][2] = {1, 2, 3, 4, 5, 6};
for(row = 0; row < 3; row++)
{
for(column = 0; column < 2; column++)
{
printf(“%d ”, arr[row][column]);
}
}
return 0;
}
二维数组的遍历也可以按一维数组的遍历方式进行:
for( i = 0; I < 6; i++)
{
printf(“%d”, *(*arr + i));
}