> 文档中心 > 数组的详细介绍

数组的详细介绍

目录

一、集合、列表和数组的概念

1.集合

(1)集合概念

(2)集合的三要素

(3)集合的特性

2.列表

(1)列表概念

(2)列表特征

(3)主要表现

3.索引

(1)索引概念

(2)优缺点

4.数组

(1)数组概念

(2)数组与列表的区别

二、一维数组

1.一维数组概念

2.定义方式

3.数组初始化

4.一维数组的下标

5.一维数组的运用

1.求数组中的最大最小值

2.对数组a[10]={10,4,3,7,9,18,14,12,17,15}进行排序 

 三、二维数组

1.二维数组概念

2.二维数组的定义

3.二维数组初始化

四、例题

1.寻找数组的中心索引

2.搜索插入位置


 

一、集合、列表和数组的概念

1.集合

(1)集合概念

集合一般是:将一个或多个确定的元素所构成的集体。

例a:商店中的所有水果

例b:王者荣耀中的多有英雄

(2)集合的三要素

花括号、逗号和元素

例a:{1,2,3,4,5}

例b:{苹果,香蕉,西瓜}

(3)集合的特性

a:无序性:集合中的元素顺序无规律,无序。

b:确定性:集合中的元素是确定的

c:互异性:集合中的元素必须互不相同

2.列表

(1)列表概念

列表:列表是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。

(2)列表特征

a:有序

b:长度可变

(3)主要表现

数组和链表,栈和队列是两种特殊类型的链表。

注:列表中添加、删除元素的具体实现方式不同的编程语言有所区分。

3.索引

(1)索引概念

索引是针对表而建立的,加速对表中数据行的检索而创建的一种分散的存储结构。

(2)优缺点

优点:

a:快速取数据的检索速度

b:创建了唯一性,保证每一行的数据记录的唯一性;

c:加速了表与表的连接,减少了查询中分组和排序的时间

缺点:

a:索引需要占物理空间。

b:当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。

4.数组

(1)数组概念

数组会用一些名为 索引 的数字来标识每项数据在数组中的位置,且在大多数编程语言中,索引是从 0 算起的。

(2)数组与列表的区别

列表中没有索引,数组中有索引,这是数组与列表最大的不同点。同时数组中的元素在内存中是连续存储的,且每个元素占用相同大小的内存;列表中的元素在内存中可能彼此相邻,也可能不相邻。

二、一维数组

1.一维数组概念

相同类型的集合,称为数组。

2.定义方式

数据类型 数组名 [常量表达式]

int a[10]   //整型数组,数组名为a,10为常量表达式,[]数组长度

3.数组初始化

/*int a[3];a[0]=1;a[1]=2;a[3]=4;//由于此方法较为复杂,一般采用其省略写法*/int a[0]={1,2,4};   //省略写法float b[10]={3,2,4,5,1}; //未赋值的都为0char s[]="study"      //字符型数组s[],长度为6,字符以"\0"结尾,故长度为6;

4.一维数组的下标

一维数组的下标实际是数组第一个元素的偏移量。

一维数组最后一位元素的下标为(长度-1)

例1:

#include int main(){int a[10]={1,4,3,7,9,18,14,12,17,15};for(int i=0;i<10;++i){printf("%d ",a[i]);}printf("\n");}

结果演示:

5.一维数组的运用

1.求数组中的最大最小值

 

#include int main(){int a[10]={10,4,3,7,9,18,14,12,17,15};int max=a[0],min=a[0];for(int i=0;i=max){max=max;}if(a[i]<min){min=a[i];}}printf("最大值为:%d,最小值为:%d",max,min);printf("\n");}

结果演示:

2.对数组a[10]={10,4,3,7,9,18,14,12,17,15}进行排序 

#include int main(){int a[10]={10,4,3,7,9,18,14,12,17,15};int tmp=0;for(int i=0;i<10;++i){for(int j=i+1;j=a[j]){tmp=a[j];a[j]=a[i];a[i]=tmp;}}}for(int k=0;k<10;++k){printf("%d ",a[k]);}printf("\n");}

结果演示:

 三、二维数组

1.二维数组概念

存储数组的数组,称为二维数组

例2:a[3][4]

a[0][0] a[0][1] a[0][2] a[0][3]
a[1][0] a[1][1] a[1][2] a[1][3]
a[2][0] a[2][1] a[2][2] a[2][3]

2.二维数组的定义

数据类型 数组名 [常量表达式][常量表达式]

3.二维数组初始化

//分段赋值int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};//连续赋值int b[3][3]={1,2,3,4,5,6,7,8,9};

例3:

#include int main(){int a[3][3]={80,89,85,90,98,88,87,86,99};for(int i=0;i<3;++i){ for(int j=0;j<3;++j){printf("%d ",a[i][j]);}}printf("\n");}

 

结果演示:

四、例题

1.寻找数组的中心索引

给你一个整数数组 nums ,请计算数组的 中心下标 。

数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。

如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。

如果数组有多个中心下标,应该返回 最靠近左边 的那一个。如果数组不存在中心下标,返回 -1 

(作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/array-and-string/yf47s/
来源:力扣(LeetCode))

 代码详解:

int pivotIndex(int* nums, int numsSize){    int sum=0,a=0;    for(int i=0;i<numsSize;++i){ sum+=nums[i];     //求和    }    for(int i=0;i<numsSize;++i){ if(2*a+nums[i]==sum){     return i; }else a+=nums[i];    }    return -1;}

2.搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/array-and-string/cxqdh/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/array-and-string/cxqdh/
来源:力扣(LeetCode)

 

//由于nums[]数组第有序的,可以采用二分查找的方法int searchInsert(int* nums, int numsSize, int target){    int left=0,right=numsSize-1;  //定义左右边界    int mid;    while(lefttarget){     //中间值大于目标值时     right=mid-1;   //缩小判断区间,     }else {     left=mid+1; }    }    return left;}

五、总结

数组在 C 语言中非常重要的,在程序设计中是常用的数据结构,属于构造类型。在设计中要灵活运用数组。

ZDfans