十字链表构建矩阵

本文介绍了一种使用链表实现的稀疏矩阵存储方法,包括初始化、创建和打印矩阵的功能。通过用户输入构建矩阵,并确保非零元素按行、列有序存储。

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

#include<cstdio>
#include<iostream>
using namespace std;

typedef struct Onode
{
	int e;
	int i,j;
	Onode* right;
	Onode* down;
}*ONode;
typedef struct Olink
{
	Onode** rowhead;
	Onode** colhead;
	int m;
	int n;
	int len;
}*OLink;
void init(Olink *M)
{
	M->rowhead=M->colhead=NULL;
	M->m=M->n=M->len=0;
	return ;
}
void create_link(Olink *M)
{
	cout<<"构建矩阵:"<<endl;
	cout<<"请输入矩阵行数,列数,非0元素个数"<<endl;
	cin>>M->m>>M->n>>M->len;
	M->rowhead=new ONode [M->m];
	M->colhead=new ONode [M->n];
	int i,j,k;
	for(i=0;i<M->m;i++)
		M->rowhead[i]=NULL;
	for(j=0;j<M->n;j++)
		M->colhead[j]=NULL;
	int m,n,e;
	ONode p;
	for(k=0;k<M->len;k++)
	{
		p=new Onode;
		cout<<"请输入非0元素的行号,列号,元素值:\t";
		cin>>p->i>>p->j>>p->e;
		if(M->rowhead[p->i]==NULL||p->j<M->rowhead[p->i]->j)
		{
			p->right=M->rowhead[p->i];
			M->rowhead[p->i]=p;
		}
		else
		{
			ONode q=M->rowhead[p->i];
			while(q->right!=NULL&&q->right->j<p->j)
				q=q->right;
			p->right=q->right;
			q->right=p;
		}
		if(M->colhead[p->j]==NULL||p->i<M->colhead[p->j]->i)
		{
			p->down=M->colhead[p->j];
			M->colhead[p->j]=p;
		}
		else
		{
			ONode q=M->colhead[p->j];
			while(q->down!=NULL&&q->down->i<p->i)
				q=q->down;
			p->down=q->down;
			q->down=p;
		}
	}
}
void printMatrix(Olink M)
{
	cout<<"打印矩阵:"<<endl;
	int i,j;
	ONode p;
	for(i=0;i<M.m;i++)
	{
		p=M.rowhead[i];
		for(j=0;j<M.n;j++)
		{
			if(!p||p->j!=j)
			printf("%-3d",0);
		
		else
		{
			printf("%-3d",p->e);
			p=p->right;
		}
		}
		printf("\n");
	}
	
}

int main()
{
	Olink M;
	init(&M);
	create_link(&M);
	printMatrix(M);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值