打字猴:1.7004152e+09
1700415200
1700415201 数组实际上是为了存储多个数据而在内存上集中分配出的一块内存空间,并且为这块空间整体赋予了一个名字。在代码清单6.3中,通过定义数组,操作系统就分配出了一块用于存储3个数据所需的内存空间,并将这块空间整体命名为x。可以通过在[和]之间指定序号(索引)的方式分别访问数组内的各块内存空间
1700415202
1700415203 本例通过char x[3]这条语句就分配出了数组整体所需的内存空间,其中每个元素的内存空间可通过x[0],x[1],x[2]的方式进行访问。虽然本质上还是定义了三个变量,但比起离散的变量,使用数组可以高效地编写也能够实现排序等算法 的程序,具体的例子将在稍后展示
1700415204
1700415205 数组是数据结构的基础,之所以这么说是因为数组反映了内存的物理结构本身。在内存中存储数据的空间是连续分布的。而在程序中,往往要从内存整体中分配一块连续的空间以供使用。如果用程序中的语句表示这种分配使用方式的话,就要用到数组(如图6.2所示)
1700415206
1700415207 图6.2 数组反映了内存物理结构本身
1700415208
1700415209
1700415210
1700415211
1700415212
1700415213
1700415214
1700415215 计算机是怎样跑起来的 [:1700412672]
1700415216 计算机是怎样跑起来的 6.3 要点3:了解数组的应用–作为典型算法的数据结构
1700415217
1700415218 数组是数据结构的基础,只要使用数组就能通过程序实现各种各样的算法以处理大量的数据。代码清单6.4中列出的程序使用了第5章中所介绍的名为“线性搜索”的典型算法,用于从数组x中所存储的1000个数字中查找(search)777这个数字,在这段程序中没有使用“哨兵”
1700415219
1700415220 代码清单6.4 使用线性搜索算法查找数据
1700415221
1700415222 for (i=0; i<1000; i++){
1700415223
1700415224   if (x[i]==777){
1700415225
1700415226 printf(“找到777了!”);
1700415227
1700415228   }
1700415229
1700415230 }
1700415231
1700415232 在C语言中,for语句具备反复执行某种处理的功能,因此为了从头到尾连续地处理数组中的元素,往往需要使用for语句。这段程序中除了数组x还定义了一个变量i,在for这个关键词后面的小括号中,要写上使变量i从0到999每循环一次就增加1的代码。于是就得到了这么一个代码片段
1700415233
1700415234 for (i=0;i<1000;i++){
1700415235
1700415236 在C语言中是通过用{和}将若干条语句括起来,表示程序中的程序块(具有一定意义的语句集合)的。通过这种方式写在for语句程序块当中的if语句就会随着变量i的值的增加而被反复执行1000次,在这里if语句的作用是判断是否已经找到了777
1700415237
1700415238 通常把像变量i这样的用于记录循环次数的变量称为循环计数器(Loop Counter)。数组之所以方便,就是因为可以把循环计数器的值与数组的索引对应起来使用(如图6.3所示)
1700415239
1700415240 图6.3 把循环计数器的值和数组的索引对应起来
1700415241
1700415242
1700415243
1700415244
1700415245 接下来就试着用“冒泡排序”这种典型算法将存储在数组中的1000个数字按降序排列。程序如代码清单6.5所示。在冒泡排序算法中,需要从头到尾地比较数组中每对相邻元素的数值,然后反复交换较大的数值和较小的数值的位置
1700415246
1700415247 代码清单6.5 通过冒泡排序算法排列数据
1700415248
1700415249 for (i=999; i>0; i—){
[ 上一页 ]  [ :1.7004152e+09 ]  [ 下一页 ]