第6章 数组
虽然数组放到很靠后的位置,但实际上它与int,double等在难度上没有本质区别。我们可以把一个数组理解为一组格子,格子的名称就是数组的名字。
定义一个一维数组的格式为:
<类型> <数组名> [元素个数];
比如:int a[100];
表示定义了一个一维数组,数组里有100个格子,每个格子里可以存储一个int类型的变量。当然了,或许一维数组理解成一行表更加合适。需要注意的是,格子的编号是从0到99。
所以,int a[100][100];就定义了一个二维数组,相当于一个100*100的表格。三维则继续推广。虽然没有维数的限制,但因为有程序使用的内存的限制(能使用的格子的数量的限制),维数一般不会太多。
如果想知道一个数组中包含的元素个数,一般用下列语句:
sizeof(x)/sizeof(x[0]);
sizeof是C语言提供的一元运算符,可以返回某个类型、变量或数组所占用内存的字节数。
复制数组:我们只能给数组中的某个格子复制。赋值语句形式如下:
a[n]=x; n为下标,必然是非负整数。二维和更高位的数组以此类推。
数组元素的排序,用一篇专题来写。查找通常是二分查找。
使用一维数组的常用数据结构:
散列表——哈希表:
利用数组下标,建立数值和下标的函数,就可以在需要的时候迅速找到数值。
栈:先进后出。操作包括:栈的初始化、元素进栈、元素出栈、检查栈是否为空。栈说白了是一个思想,只是用数组来实现的,还是要做题才能掌握。可以简单理解为,把一个东西放到桶里,先放进去肯定在桶底,拿出来的时候先拿出桶的上部的东西。
队:先进先出。操作和栈是一样的。队就好比火车过隧道,肯定是先进入隧道的那节车厢先出隧道。
第7章 指针
我决定不写指针了……因为这玩意儿虽然对于函数原理的理解很有帮助,但平时做题编程真的很少用到。还是把精力放到算法上……
第8章 编程思想
文章中处处体现的东西就不单独写啦。
第9章 结构和联合
结构(struct):
定义一个结构类型的语法如下:
struct [<类型名>]{
<类型> <成员名称>;
…
};
比如定义一个结构:
struct innt{ int a; bool flag; };
这样定义的innt用法和int,bool等类型没有区别。既可以定义变量,也可以作为数组类型:
innt qaq,kuku[100];
调用的时候就可以:
qaq.a=100; qaq.flag=1; kuku[10].a=5; kuku[10].flag=0;
联合的定义语句和结构几乎相同,只需要把struct换成union。二者的区别在于结构中各个成员变量的存储空间是独立的,而联合中各个成员变量的存储空间是共享的。所以同一时间一个联合中只能有一个数据。编程中没遇到过,所以就不细说了。