IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数组的详细介绍 -> 正文阅读

[数据结构与算法]数组的详细介绍

目录

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

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 语言中非常重要的,在程序设计中是常用的数据结构,属于构造类型。在设计中要灵活运用数组。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-01-30 19:10:58  更:2022-01-30 19:11:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 17:22:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码