十字链表实现矩阵

本文详细介绍了如何利用十字链表来高效地实现矩阵的各种操作,如增删元素、矩阵相加和乘法等。通过十字链表的特殊结构,可以方便地进行行列遍历,提高数据访问速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#ifndef CROSSMATRIX_H_
#define CROSSMATRIX_H_


#define FLOWOVER -1
struct SCMNode;//节点
typedef int elemType;//数据域数据类型
typedef struct SCMNode * CMNode;//指向节点的指针


/**************结构体声明与定义**************/


struct SCMNode{
<span style="white-space:pre">	</span>int row;//节点行号
<span style="white-space:pre">	</span>int col;//节点列号
<span style="white-space:pre">	</span>elemType elem;//节点的数值
<span style="white-space:pre">	</span>struct SCMNode * right;//指向节点右侧的下个非零元,若没有则为NULL
<span style="white-space:pre">	</span>struct SCMNode * down;//指向节点下方的下个非零元,若没有则为NULL
};


typedef struct{
<span style="white-space:pre">	</span>CMNode *rowhead;//指针数组,rowhead[1],存的是矩阵第1行第一个节点的地址,若为空行,值为NULL
<span style="white-space:pre">	</span>CMNode *colhead;//指针数组,colhead[1],存的是矩阵第1列第一个节点的地址,若为空列,值为NULL
<span style="white-space:pre">	</span>int numOfRow;//表示矩阵的总行数
<span style="white-space:pre">	</span>int numOfCol;//表示矩阵的总列数
<span style="white-space:pre">	</span>int numOfElem;//表示矩阵的非零元总数
}CrossMatrix;//表头,不是指针,代表十字矩阵本身




/**************方法声明**************/


//创建一个新节点,为后续一些方法的辅助函数
void NewNdoe(CMNode &N, int r, int c, elemType e);
//输入行列数,创建一个空稀疏矩阵
void CreatMatrix(CrossMatrix &CM, int nR, int nC);
//构建并赋值,初始化一个新稀疏矩阵
void InitMatrix(CrossMatrix &CM, int nR, int nC, int nE);
//清空稀疏矩阵
void ClearMatrix(CrossMatrix &CM);
//输出稀疏矩阵
void PrintMatrix(CrossMatrix &CM);
//在输入指针指向的节点左方增加一个新节点,为下面几个运算的辅助函数
void AddNode(CrossMatrix &A, CMNode newN, int r, int c, elemType e);
//删除指定矩阵的指定节点,为下面几个运算的辅助函数
void DeleteNode(CrossMatrix &A, CMNode rowOfA);
//M、N行列数相同,将矩阵M、N相加赋值给M,M = M + N
void AddMatrix(CrossMatrix &M, CrossMatrix N);
//M、N行列数相同,将矩阵M、N相减赋值给M,M = M - N
void SubMatrix(CrossMatrix &M, CrossMatrix N);
//M行数等于N列数,M列数等于N行数,将矩阵M、N相乘赋值给Q,Q = M * N
void MultMatrix(CrossMatrix &Q, CrossMatrix M, CrossMatrix N);
//M转置得到T
void TransposeMatrix(CrossMatrix &T, CrossMatrix M);


#endif

#include "CrossMatrix.h"
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#pragma warning(disable:4996)

void NewNdoe(CMNode &N, int r, int c, elemType e)
{
	N = (CMNode)malloc(sizeof(struct SCMNode));
	if (N == NULL)
		exit(FLOWOVER);
	N->row = r;
	N->col = c;
	N->elem = e;
	N->right = NULL;
	N->down = NULL;
}

void CreatMatrix(CrossMatrix &CM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值