C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码

一、介绍

**数组:**按一定格式排列起来的,具有租同类型的数据元素的集合。

1)一维数组:

若线性表中的数据元素为非结构的简单元素则称为一维数组。

**一维数组的逻辑结构:**线性结构。定长的线性表。

声明格式:

c 复制代码
数据类型 变量名称[长度];

int num[5] = {0,1,2,3,4};

2)二维数组:

若一维数组中的数据元素又是一维数组结构,则称为二维数组。

二维数组的逻辑结构:

非线性结构:每一个数据元素既在一个行表中,非线性结构又在一个列表中。

线性结构(定长的线性表):该线性表的每个数据元素也是一定长的线性表个定长的线性表。

声明格式:

c 复制代码
数据类型 变量名称[行数][列数];

int num[5][8];

在C语言中,一个二维数组类型也可以定义为一维数据类型。(其分量类型为一维数组类型)。

c 复制代码
typedef elemtype array2[m][n];

等价于:

c 复制代码
typedef elemtype array1[n];

typedef array1 array2[m];

3)n维数组:

三维数组:若二维数组中的元素又是一个一维数组,则称作三维数组。

...

n维数组:若 n-1 维数组中的元素又是一个一维数组结构则称作 n维数组。

结论:

线性表结构是数组结构的一个特例,而数组结构又是线性表结构的扩展

数组特点:

结构固定------定义后,维数和维界不再改变。

二、数组的抽象数据类型定义

三、数组的顺序存储

因为

  • 数组特点:结构固定维数和维界不变。
  • 数组基本操作:初始化、销毁、取元素、修改元素值。一般不做插入和删除操作。

所以:一般都是采用顺序存储结构来表示数组。

注意:数组可以是多维的但存储数据元素的内存单元地址是一维的,因此,在存储数组结构之前,需要解决将多维关系映射到一维关系的问题。

1)一维数组

2)二维数组

1、以行为主序

2、以列为主序

3、两者对比

4、行序列优先表示

这里的i是行索引,j是列索引,假设数组的起始地址为BaseAddress,每行有n个元素,每个元素占用ElementSize字节。

Position = BaseAddress + (i × n + j) × ElementSize

5、列序列优先表示

这里的i是行索引,j是列索引,假设数组的起始地址为BaseAddress,每行有n个元素,每个元素占用ElementSize字节。

Position = BaseAddress + (j × n + i) × ElementSize

3)三维数组


四、特殊矩阵的压缩存储

1.什么是压缩存储?

若多个数据元素的值都相同,则只分配一个元素值的存储空间,且零元素不占存储空间。

2.什么样的矩阵能够压缩?

一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等。

3.什么叫稀疏矩阵?

矩阵中非零元素的个数较少(一般小于5%)。

1)对称矩阵

2)三角矩阵

3)对角矩阵

4)稀疏矩阵

1、三元组顺序表

三元组顺序表 又称有序的双下标法

**三元组顺序表的优点:**非零元在表中按行序有序存储,因此便于进行依行顺序处理的矩阵运算。

**三元组顺序表的缺点:**不能随机存取。若按行号存取某一行中的非零元,则需从头开始进行查找。

2、链式存储:十字链表

例如:

相关推荐
码到成龚7 分钟前
SQL server学习10-数据库编程(中)
数据库·学习
yoyo勰11 分钟前
sqlite3
c语言·sqlite
西岸行者11 分钟前
捋一捋相关性运算,以及DTD和NLP中的应用
人工智能·算法·自然语言处理·信号处理
No0d1es28 分钟前
GESP CCF C++六级编程等级考试认证真题 2024年12月
开发语言·c++·算法·青少年编程·gesp·ccf·六级
编码小哥37 分钟前
C++信号处理
c++
虾球xz38 分钟前
游戏引擎学习第57天
学习·游戏引擎
机器视觉知识推荐、就业指导42 分钟前
C++设计模式:组合模式(公司架构案例)
c++·后端·设计模式·组合模式
就爱学编程1 小时前
重生之我在异世界学编程之C语言:数据在内存中的存储篇(上)
c语言·数据结构
意疏1 小时前
【C 语言指针篇】指针的灵动舞步与内存的神秘疆域:于 C 编程世界中领略指针艺术的奇幻华章
c语言·开发语言·指针
长安05111 小时前
面试经典题目:LeetCode134_加油站
c++·算法·面试