#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
//十字链表法 存储 稀疏矩阵
//普通节点
typedef struct OLNode{
int col,row;
float value;
struct OLNode *right,*down;
}OLNode;
//总头结点--存放:行数,列数,非0元数(k),指向右、下基地址的指针
typedef struct CrossList{
int m,n,k;
OLNode *rhead,*chead;
}CrossList;
int createCrossListMat(float A[][MAXSIZE],int m,int n,int k,CrossList &M){
//置空指针--可能是第二次调用此函数,所以要置空
if(M.rhead) free(M.rhead);
if(M.chead) free(M.chead);
M.k=k;
M.m=m;
M.n=n;
//申请基地址空间,没内存则返回
if(!(M.rhead=(OLNode*)malloc(n*sizeof(OLNode))))
return 0;
if(!(M.chead=(OLNode*)malloc(n*sizeof(OLNode))))
return 0;
//基地址置空
for(int i=0;i<n;++i){
M.rhead[i].down=NULL;
M.rhead[i].right=NULL;
}
for(int j=0;j<m;++j){
M.chead[j].down=NULL;
M.chead[j].right=NULL;
}
//定义辅助地址,实时更新,指向非零新生结点
OLNode *temp_c[n];
for(int i=0;i<n;++i){
temp_c[i] = &(M.rhead[i]);
}
//开始存储
for(int i=0;i<m;++i){
//定义辅助地址,实时更新,指向非零新生结点
OLNode *r = &(M.chead[i]);
for(int j=0;j<n;++j){
if(A[i][j]!=0){
OLNode *p=(OLNode*)malloc(sizeof(OLNode));
p->value=A[i][j];
p->row=i;
p->col=j;
p->right=NULL;
p->down=NULL;
temp_c[j]->down=p;
temp_c[j]=p;
r->right=p;
r=p;
}
}
}
return 1;
}
int main(){
return 0;
}
十字链表法 存储 稀疏矩阵
最新推荐文章于 2024-04-04 15:34:37 发布