稀疏矩阵(十字链表存储)6种操作的实现

该博客介绍了如何使用十字链表存储稀疏矩阵,并实现了6种基本操作:创建、输出、转置、相加、相减和相乘。通过交互式输入,用户可以创建不同尺寸的稀疏矩阵并进行相应的数学运算。操作过程涉及链表的插入、删除和遍历等数据结构操作。
摘要由CSDN通过智能技术生成
/*   数据结构分析与学习专栏
*   Copyright (c) 2015, 山东大学 计算机科学与技术专业 学生
*   All rights reserved.
*   作    者:   高祥
*   完成日期:  2015 年 4 月 11 日
*   版 本 号:016

*任务描述:针对稀疏矩阵,实现6个基本操作
*   1:建立稀疏矩阵 ;
*   2:输出稀疏矩阵 ;
*   3:转置稀疏矩阵 ;
*   4:稀疏矩阵相加 ;
*   5:稀疏矩阵相减;
*   6:稀疏矩阵相乘 ;

*主要函数:
*   1.void InitMatrix(Matrix &M);//初始化矩阵
*   2.void InsertElem(Link &newnode,Matrix &M);//将已有的非零元素结点插入到矩阵中
*   3.void DeleteElem(Matrix &M,Link &deletenode,int row,int line);//删除在(row,line)处的结点
*   4.void CreateMatrix(Matrix &M);//创建矩阵
*   5.void Output(Matrix M);//输出矩阵
*   6.void TransposeMatrix(Matrix &M);//转置矩阵
*   7.void AddMatrix(Matrix &M,Matrix &N);//矩阵相加
*   8.void SubtractMatrix(Matrix &M,Matrix &N);//矩阵相减
*   9.void MultiplyMatrix(Matrix &M,Matrix &N);//矩阵相乘

*/
#include<iostream>
#include<cstdlib>
#include<iomanip>
using namespace std;

#define OK 1
#define FALSE 0

typedef int Status;
typedef int ElemType;

typedef struct node
{
    int row;//非零元素的行数
    int line;//非零元素的列数
    ElemType elem;//非零元素的大小
    struct node *right;//同一行的链接
    struct node *down;//同一列的链接
} Node,*Link;

typedef struct
{
    Link *rowhead;//所有行链表表头的指针数组
    Link *linehead;//所有列链表表头的指针数组
    int rownum;//矩阵的总行数
    int linenum;//矩阵的总列数
    int elemnum;//矩阵的非零元素总数
} Matrix;

void InitMatrix(Matrix &M);//初始化矩阵
void InsertElem(Link &newnode,Matrix &M);//将已有的非零元素结点插入到矩阵中
void DeleteElem(Matrix &M,Link &deletenode,int row,int line);//删除在(row,line)处的结点
void CreateMatrix(Matrix &M);//创建矩阵
void Output(Matrix M);//输出矩阵
void TransposeMatrix(Matrix &M);//转置矩阵
void AddMatrix(Matrix &M,Matrix &N);//矩阵相加
void SubtractMatrix(Matrix &M,Matrix &N);//矩阵相减
void MultiplyMatrix(Matrix &M,Matrix &N);//矩阵相乘
void Interaction();//输出操作

int main()
{
    Interaction();

    Matrix M,N;
    int operate;

    while(cin>>operate)
    {
        switch(operate)
        {
        case 0:
            return 0;

        case 1:
            cout<<"请输入创建的稀疏矩阵的行数、列数、非0元素个数:";
            cin>>M.rownum>>M.linenum>>M.elemnum;
            CreateMatrix(M);
            break;

        case 2:
            Output(M);
            break;

        case 3:
            TransposeMatrix(M);
            break;

        case 4:
INPUT1:
            cout<<"请输入创建的稀疏矩阵的行数、列数、非0元素个数:";
            cin>>N.rownum>>N.linenum>>N.elemnum
  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值