【数据结构基础】矩阵的存储结构,数组,三元组表及十字链表

前言

数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷。

也因如此,它作为博主大二上学期最重要的必修课出现了。由于大家对于上学期C++系列博文的支持,我打算将这门课的笔记也写作系列博文,既用于整理、消化,也用于同各位交流、展示数据结构的美。

此系列文章,将会分成两条主线,一条“数据结构基础”,一条“数据结构拓展”。“数据结构基础”主要以记录课上内容为主,“拓展”则是以课上内容为基础的更加高深的数据结构或相关应用知识。

欢迎关注博主,一起交流、学习、进步,往期的文章将会放在文末。


这一节,我们来讨论一个常用的数学工具——矩阵,尤其是它的存储结构

不管我们承认与否,矩阵就是一种数据组织的结构,他有自己独特的运算规律和逻辑结构。

从数据结构学科来说,我们关心各种数据结构的逻辑结构和存储结构。矩阵的逻辑结构,属于线性代数学的内容,在这里不需要赘述。所以,作为数据结构学的内容,我们更关心矩阵的存储结构,也就是以何种方式,将人类可识别的矩阵放置在计算机中,并允许他们进行运算。

数组

其实说来,我们来看看矩阵的样子:
[ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] \begin{bmatrix} a_{11}&a_{12} &a_{13} \\ a_{21}&a_{22} &a_{23} \\ a_{31}&a_{32} &a_{33} \end{bmatrix} a11a21a31a12a22a32a13a23a33
这个方方正正的结构,有着确定的行数和列数。总是能够让我们能够不由自主的对应一种基本的数据结构——数组,不仅是数组,而且是二维数组。

一个矩阵有两个维度,行和列。可以分别对应二维数组中的两个维度。更进一步的,假设一个矩阵,他有 n n n m m m列,第 i i i j j j列元素为 a i j a_{ij} aij,那么使用二维数组可表示为a[i][j]

这样,一个矩阵就可以装进一个二维数组中,这就是最朴素的“矩阵的数组表示”
在这里插入图片描述
不过,二者还是存在一些不那么相互兼容的地方。比如较为突出的:在高级语言中,数组的下标是从0开始计数的,而矩阵的下标则是从1开始计数的。不过好在数组的兼容性更强,只要将空间多开一些,就可以解决这个问题,所以无伤大雅。

来举个例子:

示例一,读入一个n行m列的整数矩阵,计算矩阵中元素的和并输出该矩阵

int a[N + 1][M + 1];//未满足矩阵从1开始计数,数组范围要开大一些,至少多一,建议再多开一些
int main(){
   
	int n,m;
	scanf("%d%d",&n,&m);
	
	for(int i = 1;i <= n;i++){
   //先行后列读入矩阵中元素
		for(int j = 1;j <= m;j++){
   
			scanf("%d",&a[i][j]);
			sum += a[i][j]<
  • 26
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值