稀疏矩阵相加。两个稀疏矩阵A和B采用十字链表方式存储,计算C=A+B,C采用十字链表方式存储。 算法分析:根据矩阵相加的法则,C中的非零元素c ij 只可能有3种情况:a ij +b ij ,a ij (b ij =0),b ij (a ij =0)。因此,当B加到A上时,对A的十字链表来说,或者是改变结点的val域值a ij +b ij ≠0...
void PlusCrossList(CrossList *A,CrossList *B)//相加并存到A中(这里只用遍历行节点方式就可以了,似乎目前用不到列节点) { int i; Node *p,*temp1,*temp2; for(i=1;i<=A->m;i++)//一行一行处理 { if(B->row_head[i]==NULL)continue;//和A的行对应的B的行中没有元素则换A的下一行 else...
//使用十字链表的存储方式创建稀疏矩阵 void CreateMatrix(CrossList *M){ int i,k; int m,n,num; OLNode *p,*q; if(M->rowhead) //如果链表不空,则释放链表空间 DestroyMatrix(M); printf("请输入稀疏矩阵的行数,列数,非零元素的个数: "); scanf("%d,%d,%d",&m,&n,&num); M->m=m; M...
十字链表表示稀疏矩阵,并求矩阵的加法,减法,乘法,运算要求用C语言 相关知识点: 试题来源: 解析 仅供参考:#include typedef int Etype; typedef struct OLnode\x05 {int i,j; Etype e; struct OLnode *right,*down;\x05 }OLnode; typedef struct {OLnode *rh[5],*ch[5]; int mu,nu,tu; }Cross...
{int i,j; Etype e; struct OLnode *right,*down; }OLnode;typedef struct {OLnode *rh[5],*ch[5]; int mu,nu,tu; }Crosslist;void creatMatrix(Crosslist *M);void out_M(Crosslist M);Crosslist ma;int z;void main(){ creatMatrix(&ma);out_M(ma);} void o...
矩阵的加法是对应项相加,那么你只需要把用十字链表示的两个矩阵中,对应项相加即可。具体来说,对每个顶点,在表头表中查找,然后再查找与其有联系的结点。指针后移,比较两个十字链表中是否存在两个相同的结点,有,则相加,将结果保存到其中一个十字链表中。否则,不变。依次查找其他的顶点。就可以...
*downrow;};};另外,由于这样的十字链表是由多条单链表拼起来的,为了访问每条单链表的保护成员,要声明十字链表类为单链表类的友元。即在classList的声明中添加friendclassMatrix;稀疏矩阵的定义和实现#ifndefMatrix_H#defineMatrix_H#include"List.h"classMatNode{public:intdata;introw,col;union{Node*down;List...
A.十字链表可以用于稀疏矩阵的存储表示。B.十字链表的结点中只需要记录非零元的值,无需记录其在矩阵中的位置。C.采用十字链表存储时,实现两个矩阵相加的算法复杂度为 O(ta+tb),其中 ta 和 tb 分别为两个矩阵中的非零元个数。D.采用十字链表存储时 无法实现矩阵乘法。相关...
百度试题 结果1 题目【例6-2-4】m行n列的稀疏矩阵采用十字链表表示时,其中单链表的个数为C。A.m+1B.n+1C. m+n+D. ,n+ 相关知识点: 试题来源: 解析 答案见上 反馈 收藏
链表 例:稀疏矩阵M及其对应的十字链表如图所示。链表 链表 空表头结点的结构 因各列、各行的空表头结点中的行号和列号都是零,且每列空表头结点只用到向下指针,每行空表头结点只用到向右指针,故可将这组空表头结点合用。由于数值域也没有用,可将空表头结点的数值域改为一个指针域,将各个空表头结点也链接...