龙空技术网

C语言中数据结构矩阵十字链表表示法

快乐每日数学 291

前言:

如今你们对“c语言矩阵各列元素之和怎么表示的”可能比较关切,你们都想要了解一些“c语言矩阵各列元素之和怎么表示的”的相关知识。那么小编在网络上网罗了一些关于“c语言矩阵各列元素之和怎么表示的””的相关资讯,希望姐妹们能喜欢,你们一起来了解一下吧!

前面之前的数据结构知识,介绍了矩阵的三元组表示法,当然之前只介绍矩阵运算中的转置,至于乘法运算以及加减运算,之前没有介绍,但是三元组表示法缺陷不小,比如当矩阵运算的非零元素个数和位置在操作工程中变化较大时,如果还是用三元组表表示法来计算,并且还要保持三元组表以行序为主的方式存储,那么可能要大量移动数据元素,这时三元组表表示法实用性就欠缺了,今天暂时只介绍一下稀疏矩阵的十字链表存储方式,当然不稀疏也行,该方式的灵活性就大大增强了,它能灵活插入新产生的非零数据元素,并且也能灵活删除因运算变为0的新元素,所以说掌握矩阵十字链表存储方式,还是很不错的。下下篇在介绍广义表之前,会举一个用十字链表进行矩阵的乘法或加法运算。

一、矩阵十字链表:

既然是链表,那么肯定得有结点,结点肯定以结构体方式定义,那么该结构体应该有哪些成员呢?描述一个矩阵中的非零元素,那么肯定需要位置信息,数据元素大小,因此就相当于前面三元组表表示法,那么包含该非零数据元素的行、列、以及该非零数据元素的大小,以及两个指针成员,一个用于连接同一行的非零数据元素,一个用于连接同一列非零数据元素。先看一下示意图吧:

十字链表示意图

我们可以声明该结构体类型如下:

十字链表结点声明

上面就是结点结构体的定义。

我们下面就需要定义一个矩阵的具体信息结构体,上面示意图可以看出,矩阵中每一行每一列都需要一个头指针,根据每个头指针可以扫描遍历每个非零数据元素,因此对于有m行的矩阵,我们需要定义m个行头指针,对于n列的矩阵,我们需要n个列头指针,而且还需要矩阵大小的信息,包括行数列数,以及非零数据元素个数,因此得到下面结构体,如下:

矩阵信息结构体

二、建立十字链表:

今天介绍的只是其中一种算法,但是要是把该种算法了解透彻,你可以添油加醋其他功能,还有可以根据你自己算法来创建,你也许会有更好的,但是基本思路是差不多的,创建该十字链表,涉及到单链表的插入操作,其实并不难,但是必须得了解,才会不难。该算法其实只分为两大步骤,第一、我们需要创建两个结点类型的指针数组,一组作为每个行链表的头指针,另一组作为每个列链表的头指针,第二、每添加一个数据元素,动态创建一个结点,并把该结点插入到行列链表中,一个结点不仅要插入到行链表中同时也需要插入到列链表中,这样才是十字链表嘛,下面附上创建矩阵十字链表的函数,如下:

段1

段2

上面就是创建矩阵十字链表的函数,其实只要理解起来就不难了,上面有说明,这里暂时不多说了。后面附上两个<math.h>库中的函数。

三、pow()函数:

该函数一般形式为:

double pow(double x,double y);

功能:用于计算x的y次幂的值。

参数:双精度参数x为底数,y为幂。

返回值:返回x^y的结果。

注意:底数x如为负数,并且指数不是整数,那么会导致错误,

如果底数为0,且指数为负数(或0)有可能会发生错误,当然也有可能没有错误,主要跟库实现有关。

范例:

pow范例

运行结果:2187。

四、log()函数:

该函数是自然对数函数,以常数e为底。其一般形式为:

double log(double x);

功能:用于获取以e为底,参数x的对数值,e^y=x,其实返回值为y。

参数:参数x为双精度值。

注意:参数x范围为(0,正无穷)。

范例:

log范例

运行结果:

运行结果

好了,今天暂时只介绍到这里。

标签: #c语言矩阵各列元素之和怎么表示的