数组的详细介绍

目录

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

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}; //未赋值的都为0

char s[]="study"      //字符型数组s[],长度为6,字符以"\0"结尾,故长度为6;

4.一维数组的下标

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

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

例1:

#include <stdio.h>
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 <stdio.h>
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<10;++i)
	{
		if(a[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 <stdio.h>
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<10;++j)
		{
			if(a[i]>=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 <stdio.h>

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(left<=right){
        mid=left+(right-left)/2;                       //求中间值下标
        if(nums[mid]==target){                         //判断中间值与目标值是否相等
            return mid;
        }
        if(nums[mid]>target){                          //中间值大于目标值时
            right=mid-1;                               //缩小判断区间,    
        }else {
            left=mid+1;
        }
    }
    return left;
}

五、总结

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

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
C语言中的数组是一种数据结构,用于存储相同类型的多个元素。数组可以包含任何数据类型,包括整数、浮点数、字符等。 数组的定义包括两个部分:数据类型和数组名称。数组名称是用来唯一标识数组的名称,可以根据需要自行命名。数据类型指明了数组中存储的元素类型。定义一个数组时,需要指定数组的长度或容量,即数组中元素的个数。 数组的常规应用非常广泛。首先,数组可以用于存储大量的数据,比如存储学生成绩、商品价格等。通过将多个相关的数据存储在数组中,可以方便地进行数据的访问和处理。其次,数组也可用于实现其他数据结构,比如队列、堆栈和矩阵等。通过合理利用数组的元素索引和遍历功能,可以实现各种复杂的算法和数据操作。另外,数组也可以用于进行数据的排序和查找。通过遍历数组元素,可以找到最大值、最小值,或者根据特定条件查找相应的元素。 数组的使用需要注意一些细节。首先,数组的下标从0开始,即第一个元素的索引为0。其次,数组的长度是固定的,一旦定义后,长度不能改变。当需要存储更多的数据时,需要重新定义一个更大的数组。此外,数组的元素类型必须一致,即数组中的所有元素都必须是相同类型的数据。 总之,C语言中的数组是一种方便有效的数据结构,适用于存储和处理大量相同类型的数据。通过利用数组的索引和遍历功能,可以方便地访问和操作数组中的元素。同时,数组还可以用于实现其他数据结构和完成各种数据操作,是编程中常用的工具之一。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯择微韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值