C语言实现稀疏矩阵操作

头文件

// 非零元最大个数
#define MAXSIZE 100
// 定义三元组
typedef struct {
   
	int i, j;
	int e;
}Triple;
// 定义稀疏矩阵
typedef struct {
   
	Triple data[MAXSIZE+1];
	int mu, nu, tu;
}SMatrix;

void printSMatrix(SMatrix *m);

SMatrix *createSMatrix();

void multiSMatrix(SMatrix *m, SMatrix *n);

void addSMatrix(SMatrix *m, SMatrix *n);

void menu2();

源文件

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include "sMatrix.h"


void printSMatrix(SMatrix *m) {
   
	int index = 1;
	for (int i = 1; i <= m->mu; i++) {
   
		for (int j = 1; j <= m->nu; j++) {
   
			index = 1;
			while (index <= m->tu) {
   
				if (i == m->data[index].i && j == m->data[index].j) {
   
					printf("%d\t", m->data[index].e);
					//index++;
					break;
				}
				index++;
			}
			if(index > m->tu)
			{
   
				printf("0\t");
			}
		}
		printf("\n");
	}
}

SMatrix *createSMatrix() {
   
	SMatrix * m = (SMatrix *)malloc(sizeof(SMatrix));

	printf("\n请输入稀疏矩阵的行数,列数,非零元的个数:");
	scanf("%d%d%d", &m->mu, &m->nu, &m->tu);

	printf("\n请依次输入元素的行号,列号与数据:\n");
	for (int i = 1; i <= m->tu; i++) {
   
		scanf("%d%d%d", &m->data[i].i, &m->data[i].j, &m->data[i].e);
	}

	printf("\n您创建的矩阵如下:\n");
	printSMatrix(m);

	return m;
}

SMatrix *fastTranspose(SMatrix *m) {
   
	// 转置矩阵
	SMatrix * t = (SMatrix *)malloc(sizeof(SMatrix));
	t->mu = m->nu;
	t->nu = m->mu;
	t->tu = m->tu;

	if (t->tu) {
   
		// 保存矩阵每一列非零元的个数
		int *num = (int *)malloc(sizeof(int)*(m->nu+1));
		for (int i = 1; i <= m->nu; i++) {
   
			num[i] = 0;
		}
		for (int i = 1; i <= m->tu; i++) {
   
			num[m->data
  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值