一、知识点总结
一维数组
1、数组定义:
类型标识符 数组名[常量表达式]={值,值,…}
一组具有相同类型的变量的集合。
一个数组在内存中占一片连续的存储单元。
【可用指针定义动态数组】
直接对a的访问,就是访问此数组的首地址。
【a即pa(例如:int a[5];int * pa=a;)即&a[0]
a+i即pa+i即&a[i] ,注意上述三种形式只有指针是变量】
2、▲数组大小必须是值为正的常量,不能为变量。
3、数组下标从0开始。
4、一维数组初始化:
数组定义在主函数之外(全局变量),起初始值为0;定义在主函数之内,起初始值是随机的。应该用循环直接赋值。
5、使两个数组值相等的方法:
列举赋值:b[0]==a[0] b[1]==a[1].../循环赋值
数组a复制k个元素到数组b:mencpy(b,a,sizeof(int)*k)
数组a全部复制到数组b:mencpy(b,a,sizeof(a))
使用mencpy函数要包含头文件cstring。
memset(a,0,sizeof(a))的作用是把数组a清零,它在cstring中定义。
6、容错处理:保证输入在合法范围之间,慎防数组越界
7、数组的排序:
选择排序:
for(j=0;j<n-1;j++)
{
l=j;
for(i=1;i<n;i++)
if(a[l]<a[i])
l=I;
if(l!=j) i=a[l],a[l]=a[j],a[j]=i;
}
插入排序:
l= i-1;temp=a[i];
while(l>=0&&a[l]>temp)
{
a[l+1]=a[l];
l--;
}
a[l+1]=temp;
冒泡排序:
for (int j=1; j<=n-1; ++j) //冒泡法排序
for (int i=1; i<=n-j; ++i) //两两相比较
if (a[i]<a[i+1]) //比较与交换
{t=a[i]; a[i]=a[i+1]; a[i+1]=t;}
sort函数 O(n*log2(n))
头文件为#include <algorithm> 在c++中
sort(首地址(a),尾地址(a+n),排序方式(不写则默认从小到大));
关于排序方式:
1)定义函数bool complare(int a,int b){return a>b;}
用法:sort(a,a+n,complare);
2)内置:sort(a,a+n,less<数组元素的数据类型>)//从大到小
sort(a,a+n,greater<数组的数据类型>)//从小到大
同理,sort()可以进行字符排序
8、折半查找用于有序序列中查找指定元素。(可用bsearch函数(c))
ow=0,high=n-1,mid=0;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>temp) high=mid-1;
else if(a[mid]<temp) low=mid+1;
else couture<<a[mid]<<endl;}
cout<<"Not Found!"<<endl;}
二维数组
数据类型数组名[常量表达式1] [常量表达式2] ;
二维数组的列数必须被声明(要不然不知道啥时候换行...)
字符数组和字符串数组
1) 具体格式如下:
[存储类型] char 数组名[常量表达式1]…
2)初始化:
字符char chr1[4]={‘a’,‘b’,‘c’,‘\0’};
字符串 char chr2[5]=“abc” ;(chr1和chr2表示的一样)
char chr[3][4]={“abc”,“mno”,“xyz”};
3)字符常量和字符串常量的区别
定界符不同/量不同/‘\0’的使用
4)字符串的输入
(1)scanf语句
格式:scanf(“%s”,字符数组名);
说明:①系统会自动在输入的字符串常量后添加‘\0’标志,因此输入时,仅输入字符串的内容即可。
②输入多个字符串时,以空格分隔。
(2)gets语句(cstdio中)
格式:gets(字符数组名);
说明:使用gets只能输入一个字符串。读入的是一整行,包括空格;换行结束
(3)getline语句
格式:getline(cin,line(字符数组eg.a[i]),‘#’)
说明:到‘#’处停止输入,不写默认到‘\n’
(4)cin.getline()
cin.getline(字符指针(char*),字符个数N(int),结束符(char));
此函数会一次读取多个字符(包括空白字符)。它以指定的地址为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为'\n'
5)字符串的输出
(1)printf语句
格式:printf(“%s”,字符数组名);
(2) puts语句
格式:puts(字符串名称);
说明:puts语句输出一个字符串和一个换行符。对于已经声明过的字符串a,printf(“%s\n”,a)和 puts(a)是等价的。
6)字符串处理函数(均在string中,在c++中常用<string>)
strlen(字符串名) 计算字符串的长度,终止符’\0’不算在长度之内
strlwr(字符串名) 将字符串中大写字母换成小写字母...
二、应用
数组的主要应用是记录相同类型的数据,常见的递归问题也常使用数组解决。