20230919数据结构-数组

前言

数组是一种常见的数据结构,它是同类型元素的有序集合。数组有固定的大小,可以通过索引访问其中的元素。

一、定义

<数据类型><数组名>[<大小>];

int numA[5];//定义一个大小为5的整形数组
char numB[50];//定义一个大小为50的字符数组
int numC[]={1,2,3,4,5};//定义一个大小为5的数组,并初始化赋值元素1,2,3,4,5
char numD[3][20];//定义一个大小为3的字符串数组,每个字符串有20个字符的容量,每个字符串最大长度为19
char numE[3][3];//定义一个3*3的整形矩阵
struct ABC{
	//...
};
struct ABC numF[3];//定义一个大小为3的结构体数组,每个元素存储一个结构体信息

二、特点

1、存储相同类型的元素

数组中的所有元素必须具有相同的数据类型,如整数、浮点数、字符等。

2、连续的内存空间

数组中的元素在内存中是连续存储的,通过索引可以快速访问特定位置的元素。

3、固定的大小

数组在创建时需要指定大小,一旦定义后,大小不可更改。

4、索引从0开始

数组的索引从0开始,即首个元素的索引为0,第二个元素为1,以此类推。

5、快速访问元素

通过索引访问数组中的元素,如"num[0]"表示数组的第一个元素。

6、无边界检查

C/C++中的数组在访问时不进行边界检查,如果访问了超出数组范围的索引,可能导致未定义行为。

int num[5];		//数组下标为0-4
num[5]=1;		//超出定义范围的操作
printf("%d\n",num[6]);	//超出定义范围的操作

三、优缺点

1、优点

能够快速访问和修改元素

2、缺点

大小固定,不能动态调整;数组的插入和删除操作比较耗时,需要进行元素的移动

四、动态数组

数组的大小在定义时必须是一个常量,不能使用变量作为大小。
如果需要调整数组大小,可以考虑使用动态内存分配(如"malloc"和"free")或使用动态数组(如"std::vector")。

五、操作

静态数组中(固定大小的数组),通过移动元素的方式实现数组的插入与删除。

#include <stdio.h>
#define MAX_SIZE 10
void insertElement(int arr[],int size,int index,int element){
	if(size>=MAX_SIZE||index<0||index>size){
		printf("无效的插入操作.\n");
		return;
	}
	//后移元素,给插入的元素腾出空间
	for(int i=size;i>index;i--){
		arr[i]=arr[i-1];
	}
	//插入元素
	arr[index]=element;
	//更新数组大小
	size++;
	//输入插入后的数组
	for(int i=0;i<size;i++){
		printf("%d\n",arr[i]);
	}
}

void deleteElement(int arr[],int size,int index){
	if(index<0||index>=size){
		printf("无效的删除操作.\n");
		return;
	}
	//前移元素,覆盖需要删除的元素
	for(int i=index;i<size-1;i++){
		arr[i]=arr[i+1];
	}
	//更新数组大小
	size--;
	//输出删除后的数组
	for(int i=0;i<size;i++){
		printf("%d\n",arr[i]);
	}
}

int main(){
	int arr[MAX_SIZE]={1,2,3,4,5};
	int size = 5;
	int index = 2;
	int element = 6;
	//执行插入操作
	//insertElement(arr,size,index,element);
	
	//执行删除操作
	//deleteElement(arr,size,index);
	
	return 0;
}

注意:插入与删除都需要在数组的下标范围内进行操作,如果需要超出范围的插入,需要使用动态数组调整数组的大小,重新分配更大的内存空间,并将原数组的内容复制到新的内存位置中。

六、应用场景

1、存储和访问一组数据

数组是一种线性数据结构,可以用于存储一组相同类型的数据元素,并通过索引快速访问和修改元素。如人员的信息,图像的像素值等。

2、遍历和处理数据

通过使用循环语句,可以遍历数组中的所有元素,对每个元素进行处理和操作。如计算数组数值总和,查找最大值和最小值等。

3、矩阵和多维数据

由于数组可以具有多个维度,因此可以用于表示矩阵和多维数据。如图像处理中的像素矩阵,地图数据等。

4、缓存和缓冲区

数组可用作缓存或缓冲区,用于临时存储数据以提高性能。如计算过程中的临时存储,网络数据的接收缓冲区。

5、排序和搜索

使用数组可以实现各种排序和搜索算法。如冒泡排序,二分查找等。

6、实现其他数据结构

可以基于数组组成其他数据结构,如栈、队列、哈希表等。数组提供了底层的数据存储和访问,可以用于构建更高级的数据结构。

7、数据库和文件存储

在数据库和文件存储中,数组广泛用于存储和组织数据。如数据库表中的行和列、文件中的数据记录等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值