做生产计划类的网站,淘宝店铺怎么推广,网站建设教程菜鸟物流,任丘做网站价格简介#xff1a;三元组#xff0c;意思是一个结构体里#xff0c;有三个变量#xff0c;存储矩阵信息。而三元组顺序存储#xff0c;则是用顺序表#xff0c;存储三元组#xff0c;里面包含#xff0c;三元组类型的一维数组#xff0c;存储非零元素#xff1b;总的行… 简介三元组意思是一个结构体里有三个变量存储矩阵信息。而三元组顺序存储则是用顺序表存储三元组里面包含三元组类型的一维数组存储非零元素总的行数和列数。总的非零元素数其中三元组类型的一维数组中第一个位置存储总行数和总列数以及总的非零元素数。
思路
定义三元组用来表示一个格子的信息该格子信息包含它的行和列的位置以及元素值定义一个三元组顺序表里面有一个三元组类型的一维数组用来存储非零元素其中该数组第一个位置存储总的行数和列数以及总的非零元素个数。随后我们直接赋值一个二维数组稀疏矩阵然后给该数组存进三元组顺序表中。存的时候我们需要对二维数组进行遍历检测到非零元素的时候给三元组顺序表中的一维数组进行赋值给对应的行数列数元素值赋值过去。此外非零元素个数具体看代码就懂了。
代码如下
#include stdio.h
#define Max 36
#include malloc.h
//创建三元组
typedef struct Triples//这个为三元组表示表示一个格子的内容记录了改格子的坐标和值
{int hang,lie;int val;//坐标下的值
}Triples;
//三元组顺序存储
typedef struct TriplesList
{Triples *data;//给每个三元组格子用顺序表表示。 int hangs,lies; //总列数和行数 int count;//总的非零元素个数 }TriplesList;
//打印稀疏矩阵
void PrintNozero(int data[6][6],int hang,int lie)
{int i,j,count;for(i0;ihang;i){for(j0;jlie;j){printf(%d ,data[i][j]);}printf(\n);}}
//初始化三元组一维数组
void InitTriplesList(TriplesList *t)
{t-data(Triples*)malloc(sizeof(Triples)*100);t-count0;t-hangs0;t-lies0;
}
//创建三元组顺序表并检测稀疏矩阵非零元素信息存进顺序表
void CreatTriplesList(TriplesList *t,int a[6][6],int hang,int lie)
{t-hangshang;t-lieslie; int i,j,k1;t-data[0].hangt-hangs; t-data[0].liet-lies;for(i0;ihang;i){for(j0;jlie;j){if(a[i][j]!0) //检测到非零存进去。 { t-count;//给非零元素存储在三元组顺序表中 t-data[k].vala[i][j];t-data[k].hangi;t-data[k].liej;kk1; } }}t-data[0].valt-count;
}
//打印三元组
void PrintTripelsList(TriplesList t)
{ int i;printf(非零元素分别在\n);for(i0;it.count;i){if(i0)printf(此稀疏矩阵共%d行%d列,非零元素为%d个\n,t.data[i].hang,t.data[i].lie,t.data[i].val);elseprintf(%d行%d列为%d\n,t.data[i].hang,t.data[i].lie,t.data[i].val);}printf(\n);
} int main()
{int data[6][6]{0,0,-3,0,0,15,12,0,0,0,18,0,9,0,0,24,0,0,0,0,0,0,0,-7,0,0,0,0,0,0,0,0,14,0,0,0};
//打印稀疏矩阵PrintNozero(data,6,6);
//创建三元组顺序表TriplesList t;
//初始化顺序表InitTriplesList(t);
//给三元组顺序表赋值CreatTriplesList(t,data,6,6);
//打印PrintTripelsList(t);return 0;
}