数据结构实验报告之三元组顺序存储的稀疏矩阵练习(代码版)

#include <stdio.h>
#define MAXSIZE 30
#define n 5

typedef int ElemType;
// 定义三元组
typedef struct{
    int i, j;
    ElemType value;
}Triple;
// 矩阵压缩
int zipMatrix(int arr[n][n], Triple *t){
    int index=0;
    int i,j;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++){
            if(arr[i][j]!=0){
                t->i=i+1,t->j=j+1;
                t->value=arr[i][j];
                t++;
                index++;
            }
        }
    return index;
}
// 对角线求和
int sumMatrix(Triple t[], int size){
    int s=0;
    for(int k=0;k<size;k++){
        if(t[k].i==t[k].j||(t[k].i+t[k].j)==n-1){
            s=s+(t[k].value);
        }
    }
    return s;
}
// 快速转置
void swapMatrix(Triple t[], int size){
    Triple T[size]={};
    int num[n+1]={};
    int p[n+1]={};
    int temp,k;
  
int col[n]={}; for(k=0;k<size;k++){ col[t[k].j]++; } for(k=1;k<=n;k++){ num[k]=col[k-1]; } p[1]=1; for(k=2;k<=n;k++){ p[k]=p[k-1]+num[k-1]; } for(k=0;k<size;k++){ temp=p[t[k].j]-1;
      while(T[temp++].value!=0); T[temp-1].i=t[k].j; T[temp-1].j=t[k].i; T[temp-1].value=t[k].value; } for(k=0;k<size;k++){ printf("(%d,",T[k].i); printf("%d,",T[k].j); printf("%d)",T[k].value); } } int main(){ // 定义一个数组 int arr[n][n]={{0,0,6,4,0}, {7,3,8,0,0},{0,4,0,2,0}, {6,3,0,0,0},{4,0,9,0,1} }; // 初始化一个三元组 Triple t[MAXSIZE]={}; Triple *T=t; int size=zipMatrix(arr,T); int sum=sumMatrix(t,size); printf("对角线之和为:%d ",sum); printf("原三元组 "); for(int k=0;k<size;k++){ printf("(%d,",t[k].i); printf("%d,",t[k].j); printf("%d)",t[k].value); } printf(" "); printf("经转置的三元组 "); swapMatrix(t,size); return 0; }
爱我没结果!
原文地址:https://www.cnblogs.com/angoli/p/12746468.html