数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。
创建数组
![](https://img-blog.csdnimg.cn/img_convert/b9c5872df6c5a79cd48a050b2efbdbc5.gif)
顺序表(数组)
顺序表一般 占用一片连续的存储空间
![](https://img-blog.csdnimg.cn/img_convert/c024641caad90fdff8b8f731d1f9afc6.png)
注意:下标从0开始还是从1开始
数组名 是首元素地址,也是指针
数组的特点:
1、数组中的数据类型必须是同一种数据类型,可以是基本数据类型也可以是引用数据类型
2、数组在定义的时候必须指定大小,而且大小是不可以改变的
3、从数组中获取数组元素的时候,需要使用下标来获取,下标从0开始
4、数据是有序集合,这个有序指的不是大小的排序,指的是插入的顺序
数组的输入:
void input(int arr[],int len){
//定义循环变量
int i;
int *p = arr;
for(i=0;i<len;i++){
printf("请输入第%d个元素:",i+1);
scanf("%d",&arr[i]);
//scanf("%d",arr+i);
//scanf("%d",p+i);
}
}
输出元素(遍历数组)
void output(int arr[],int len){
//循环变量
int i;
int *p = arr;
for(i=0;i<len;i++){
printf("%d",arr[i]);
//printf("%d ",*(arr+i));
//printf("%d ",*(p+i));
}
}
遍历数组,通过当前元素的值作为下标,找到下一个元素。最后得到的数组中,下标(因为数组的下标都是从0开始的,所以需要+1)为数组中出现的元素,每个下标对应的值取反输出即是该元素出现的次数。
若当前元素小于0,则跳过
若当前元素大于0,则判断其作为下标对应的元素是否大于0。若大于0,则把对应的元素赋值给当前元素,并把它的值设置为-1;若小于0,则把对应的元素自减1,当前元素置为0;
查询元素
//根据元素的值去找 下标
int searchValue(int arr[],int len,int value){
int i;
for(i=0;i<len;i++){
if(value == arr[i]){
return i;
}
}
return -1;
}
//根据下标 查找元素
int searchKey(int arr[],int len,int key){
//判断位置是否在数组范围之内
if(key<0 || key>len-1){
printf("位置不对!");
return; //exit(0); 结束程序
}
printf("查找的元素是:%d\n",arr[key]);
}
动态生成 数组
void * getArray(){ //返回一个指针变量
int i,*p; //p指向动态数组首地址
p = (int *)malloc(sizeof(int)*num);
if(p==NULL){
printf("空间申请失败!");
return;
}
return p;
}
修改元素
void updateValue(int arr[],int len,int value){
// 修改前 修改后
int firstValue , lastValue;
printf("请输入你要修改的元素:\n");
scanf("%d",&firstValue);
printf("请输入修改后的元素:\n");
scanf("%d",&lasrtValue);
for(i=0;i<len;i++){
if(arr[i] == firstValue){
arr = lastValue;
}
}
}
//根据位置修改
void updateKey(int arr[],int len){
int key,value;
printf("请输入你要修改的位置:\n");
scanf("%d",&key);
printf("请输入你要修改后的值:\n");
scanf("%d",&value);
if(key<0 || key>len-1){
printf("位置不对!");
return;
}
arr[key] = value;
}
插入元素
void insert(int arr[],int len,int index,int value){
int i,temp;
if(index<0 || index>len-1){
return;
}
//元素后移
for(i=len-1;i>=index;i--){
arr[i+1] = arr[i];
}
//插入元素
arr[index] = value;
//长度变化
len++;
}