当前位置: 首页 > article >正文

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

一、介绍

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

1)一维数组:

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

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

声明格式:

数据类型 变量名称[长度];

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

2)二维数组:

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

二维数组的逻辑结构:

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

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

在这里插入图片描述

声明格式:

数据类型 变量名称[行数][列数];

int num[5][8];

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

typedef elemtype array2[m][n];

等价于:

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、链式存储:十字链表

在这里插入图片描述

例如:

在这里插入图片描述

在这里插入图片描述


http://www.kler.cn/a/450915.html

相关文章:

  • 【Linux】查询磁盘空间被谁占用了
  • Golang的容器化技术实践总结
  • CloudCompare下载、安装与汉化
  • 【零基础保姆级教程】制作自己的数据集(二)——Labelme的安装与使用及常见的报错解决方法
  • Linux下编译安装Kokkos
  • EasyExcel停更,FastExcel接力
  • zabbix监控山石系列Hillstone监控模版(适用于zabbix7及以上)
  • vue实现打印指定页面内容
  • 消除视野盲区,保障行车安全--叉车四路环绕AI防撞系统
  • 迈向未来:.NET技术的持续创新与发展前景
  • 【华为OD-E卷-木板 100分(python、java、c++、js、c)】
  • Naive UI 分页组件二次封装
  • Dubbo简单总结
  • 【蓝桥杯——物联网设计与开发】基础模块8 - RTC
  • GitPuk安装配置指南
  • LEC: 基于Transformer中间层隐藏状态的高效特征提取与内容安全分类方法
  • 武汉做网站优化推广效果的科学评估方法
  • redis库基础知识
  • SpringBoot开发——Spring Boot 的9大类常用注解
  • 【XR】ATW
  • LeetCode 1705.吃苹果的最大数目:贪心(优先队列) - 清晰题解
  • Python+QQ邮箱调用定时监控——以网站监测为例
  • Z轴方向二维图像插值形成三维图像的算法及其优劣分析
  • Jmeter 分布式压测部署--常见坑以及解决方案
  • C++简明教程(10)(初识类)
  • acme ssl证书自动续签 nginx