• 大小: 4KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-06-17
  • 语言: C/C++
  • 标签: 数据结构  

资源简介

数据结构,该程序是利用c语言实现稀疏矩阵的三元组转置算法

资源截图

代码片段和文件信息

#include  
#define MAXSIZE 10   //该数组的非零元个数最大不超过10个 
typedef struct {
int ije;  //i为行下标、j为列下标、e为i行j列的数值 
}Triple;  //定义存储行数、列数和数值的三元组结构体 
typedef struct{
Triple data[MAXSIZE+1];   //非零元三元组表,data[0]未用 
int munutu;            //mu为矩阵的行数、nu为矩阵的列数、tu为矩阵非零元的个数 
}TSMatrix;

TSMatrix createSMatrix(int S[5][6])   //根据传入的稀疏矩阵创建三元组表 
{
TSMatrix St;
int t=0mnk=1;            //t为计算矩阵中非零元的个数的计数器,m为传入矩阵的行数,n为传入矩阵的列数, k为记录三元组表data个数的计数器 
for(m=1;m<5;m++)
{
for(n=1;n<6;n++)  //行为外循环,列为内循环 ,当矩阵的值为非零值时,将此元素的行下标、列下标和元素值分别赋值给data三元组表的元素,

//另外, 计算非零值个数的计数器t加一 
if(S[m][n]!=0)
{
t++;
    St.data[k].i=m;
    St.data[k].j=n;
    St.data[k].e=S[m][n];
k++;
     }  
}  


St.tu=t;
St.mu=4;
St.nu=5;//将此时的矩阵的行数、列数、以及非零值的个数分别赋给mu、nu、tu 
printf(“转置前行数为4列数为5非零值有%d个\n“t);
return(St);
}
TSMatrix FastTransSMatrix(TSMatrix St)
{//将三元组重新进行排序,实现矩阵的转置 
int qpcola;  //定义变量q来存放转置后位于原矩阵中第col列的非零元的位置标数
               //定义变量p来对原三元组的非零值进行计数和标号
   //定义变量col 来存放原矩阵的列标 
int num[10]cpot[10];  // 使用num[col]数组表示矩阵St中第 col列中的非零元个数
                      //cpot[col] 表示St 中的col列中第一个非零元在转置后三元组表中的位置 
TSMatrix Mt;         //定义 TSMatrix结构体变量,来存放转置后的三元组数表和行列数和非零值 
Mt.mu=St.nu;        //将原三元组的行数(列数)给转置后三元组的列数(行数)
Mt.nu=St.mu;
Mt.tu=St.tu;
if(Mt.tu)        
{

for(col=1;col<=St.nu;++col)       //利用循环语句逐列扫描,先将存放每一列的数组num置零,便于计数 
num[col]=0; 
for(a=1;a<=St.tu;++a)            //利用循环语句将每一列中的非零元的个数计算下来存放在每一列的num数组中 
++num[St.data[a].j];
cpot[1]=1;                      //易知,第一列的第一个非零元的位置为1 
for(col=2

评论

共有 条评论