专栏目录(数据结构与算法解析):https://blog.csdn.net/qq_40344524/article/details/107785323
数组
定义:有序的元素序列,
数组是用来存储具有“一对一”逻辑关系的数据的线性存储结构,由于在各种编程语言中常把数组作为基本数据类型来使用,很多人会误解数组不是存储结构。
通常我们根据不同的结构特性将数组分为三类:一维数组,二维数组和多维数组(存储(n-1)维数组的数组,不做过多讨论)
本节中我们主要针对一维数组进行详细讲解,分析数组的应用场景,使用方法及其优缺点。
一维数组:
一维数组是指存储单个元素的数组,
以整形数组为例,通常C语言中我们会将其定义为:int array[n],其中n表示数组中可存放数据的个数,
特点
存储空间是连续的,存储的数据都是相同类型的,数据的位置具有先后顺序
接下来我们通过C语言代码对数组的操作进行演示:
// Array.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
#include <Windows.h>
//数组的声明和初始化
int array[10] = { 1, 5, 66, 8, 55, 9, 1, 32, 5, 65 };
int* insert(int data, int index){
int temp[11]; /*用来存放删除数字后的新数组, 因为删除了一个值, 所以长度加1*/
for (int i = 0; i < 11; i++)
{
if (i<index)
{
temp[i] = array[i]; /*循环变量i小于插入值位置Index时, 每一个元素所存放的位置不变*/
}
else if (i=index)
{
temp[i] = data; /*i等于Index时, 将插入值赋给数组temp*/
}
else
{
temp[i] = array[i - 1]; /*因为插入了一个新的元素, 所以插入位置后的每一个元素所存放的位置都要向后移一位*/
}
}
return temp;
}
int* delete_from_position(int index){
int temp[9]; /*用来存放删除数字后的新数组, 因为删除了一个值, 所以长度减1*/
for (int i = 0; i < 10; i++)
{
if (i<index)
{
temp[i] = array[i]; /*循环变量i小于插入值位置Index时, 每一个元素所存放的位置不变*/
}
else
{
temp[i] = array[i + 1]; /*删除值后面的元素都往前移一位, 要删除的值直接被覆盖*/
}
}
return temp;
}
int* update(int index, int data){
array[index] = data;
return array;
}
int select_from_index(int index){
return array[index];
}
int select_from_data(int data){
int index=-1;
for (int i = 0; i < 10; i++)
{
if (array[i]==data)
{
index = i;
break;
}
}
return index;
}
int main()
{
//数组中插入元素
int *array_in = insert(10,5);
//删除指定位置的元素
int *array_de = delete_from_position(4);
//修改指定位置元素为1
int *array_up = update(5, 1);
//查找指定位置的元素
int data = select_from_index(7);
//按照元素值查找元素位置
int index = select_from_data(9);
return 0;
}
二维数组:
二维数组指的是存储一维数组的数组,
以整形数组为例,通常C语言中我们会将其定义为:int array[m][n],其中m表示二维数组的行,n表示二维数组的列,二维数组通常也叫做矩阵。
特点
存储空间是连续的,存储的数据都是相同类型的,数据的位置具有先后顺序
二维数组的初始化与一维数组略有不同,
1.分行给二维数组赋初值。
int array[5][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}};
2.可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。
int array[5][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25};
3.可以对部分元素赋初值,其余元素值自动为0.
4.如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度必须指定。
总结:
本节中我们主要学习了一维数组,通过上述学习我们不难发现对数组进行的各项操作中读取指定位置的元素值最方便,相反的在数组中插入和删除元素是比较复杂的。其实数组是不擅长进行插入和删除元素操作的,数组是连续的,所以查找数据速度很快。但也正因为它是连续的,所以当插入一个元素时,插入点后所有的元素全部都要向后移,而删除一个元素时,删除点后所有的元素全部都要向前移,这个过程会耗费大量的资源。数组的常会用在有大量查找和修改操作并且很少增删操作的场景下,例如记录某栋句居民楼中各户人口数时我们可以使用数组,此时数组长度不会发生改变,只需要对数组进行查找和修改操作。
数组就讨论到这里,后续我会找时间另开一题对二维数组(矩阵)进行详细的整理,下一节详解另一个数据结构——链表,它的特性与数组刚好相反。
以上是我的一些粗浅的见解,有表述不当的地方欢迎指正,谢谢!
表述能力有限,部分内容讲解的不到位,有需要可评论或私信,看到必回…