一、数组:一组具有相同类型的变量的集合。 按顺序排列的一组同种类型的数据构成的集合。
1.一般形式: 数据类型 数组名 [整数] 中括号内的整数表示数组中元素的个数
如: int a [5]
2.下标的个数表明数组的维数。
3.数组分为一维数组、二维数组……多维数组。
4.一个数组在内存中占一片连续的存储单元。
5.数组大小必须是值为正的常量,不能为变量;一旦定义,不能改变大小。
6.数组大小最好用宏来定义,以适应未来可能的变化。
如: #define SIZE 5
int a[SIZE];
7.数组定义后的初值仍然是随机数。
8.一般需要我们来初始化。
9. a[j]!=a[j] 是取反操作。
10.下标越界是大忌!! 如a[5] 是0、1、2、3、4 不能有5,数组从0算起。
11.注意:a.数组做函数形参时,数组的长度可以不出现在数组名后面的方括号内,通常用另一个整型形参来指定数组的长度。
b.一维数组在内存中占用的字节数为:数组长度×sizeof(基类型)
二维数组占用的字节数为:第一维长度×第二维长度×sizeof(基类型)
c.在不同编译系统中,int型所占的字节数是不同的。
d.数组第二维的长度声明永远都不能省略。
12.函数 #include……memset(a,0,sizeof(a)) 作用是把数组清零,一般用于整体赋值为-1或0。
13.为了不出错,在函数以外定义为全局变量。把数组做成全局数比较好,数组要定义成全局数组,不要在函数内定义。
14.字符串用字符数组存。
15.bool类型占内存最小,因为它只有两个值,ture or false 即 1or 0。
二、排序和查找
1.排序:是把一系列无序的数据按照特定的顺序(如升序或降序)重新排列为有序序列的过程。
介绍两类:插入数据和插入排序
a.插入数据 如:l=num-1;
while(l>=0&&a[l]<x)
{ a[l+1]=a[l];
l--; }
a[l+1]=x;
b.插入排序 如:void ins sort(int*a,int num)
{ for(i=1;i<num;i++)
{ l=i-1;temp=a[i];
while(l>=0&&a[l]>temp)
{ a[l+1]=a[l];
l--;}
a[l+1]=temp;}}
2.查找:是在数组中搜索一个特定元素的处理过程。
有线性查找和折半查找,主要介绍折半查找。
折半查找法的基本思想为:首先选取位于数组中间的元素,将其与查找键进行比较。如果它们的值相等,则查找键被找到,返回数组中间元素的下标。否则,将查找的区间缩小为原来区间的一半,即在一半的数组元素中查找。
折半查找最多比较log2n次。
补充一个sort函数:
#include<algorithm>
using namespace std;
默认的sort函数是按升序排列的。
sort(a,a+n);//两个参数分别为待排序数组的首地址和尾地址。
三、可以解决的问题
判断一组数据是否符合要求、大量数据的处理、有规律的配对等。
四、感想
数组的出现使许多问题的解决更加优化,但掌握运用起来却并不容易。只看课本貌似不难,但一做OJ就能发现难度瞬间上来了。这次的数组练习比上次的练习更难,甚至光看题干都看不懂,反复琢磨,终于完成后,才发现代码没有想象的那么长,可见c的奥妙!