本文共 2409 字,大约阅读时间需要 8 分钟。
#includeusing namespace std;typedef struct OLNode{ int i,j; int e;//自定义数据类型 struct OLNode *right,*down;} OLNode,*OLink;typedef struct{ OLink *rhead,*chead;//行和列链表头指针 int num_r,num_c,num_e;//矩阵的行数,列数和非零元的个数} CrossList;CrossList CreateMatrix_OL(CrossList M);void display(CrossList M);int main(){ freopen("in.txt","r",stdin); CrossList M; M.chead=M.rhead=NULL; M=CreateMatrix_OL(M); display(M); return 0;}CrossList CreateMatrix_OL(CrossList M){ int nr,nc,ne; int r,c,e; OLNode *p,*q; cin>>nr>>nc>>ne;//行数,列数,非零元个数 M.num_c=nc; M.num_r=nr; M.num_e=ne; M.rhead=(OLink*)malloc((nr+1)*sizeof(OLink)); M.chead=(OLink*)malloc((nc+1)*sizeof(OLink));// if(!(M.rhead=(OLink*)malloc((nr+1)*sizeof(OLink)))||!(M.chead=(OLink*)malloc((nc+1)*sizeof(OLink))))// { // cout<<"初始化链表失败"< >r>>c>>e; r!=0; cin>>r>>c>>e) { p=(OLNode*)malloc(sizeof(OLNode));// if(!(p=(OLNode*)malloc(sizeof(OLNode))))// { // cout<<"初始化三元组失败"< i=r; p->j=c; p->e=e; //链接到行指定位置 if(M.rhead[r]==NULL||M.rhead[r]->j>c) { p->right=M.rhead[r]; M.rhead[r]=p; } else { for(q=M.rhead[r]; q->right&&q->right->j right); p->right=q->right; q->right=p; } //链接到列指定位置 if(M.chead[c]==NULL||M.chead[c]->i>r) { p->down=M.chead[c]; M.chead[c]=p; } else { for(q=M.chead[c]; q->down!=NULL&&q->i down); p->down=q->down; q->down=p; } } return M;}void display(CrossList M)//行展示{ OLink p; for(int i=1; i<=M.num_r; i++) { if(M.rhead[i]!=NULL) { p=M.rhead[i]; while(p!=NULL) { printf("%d\t%d\t%d\n", p->i, p->j, p->e); p = p->right; } } }}//void display(CrossList M)//列展示//{ // for (int i = 1; i <= M.num_c; i++)// { // if (NULL != M.chead[i])// { // OLink p = M.chead[i];// while (NULL != p)// { // printf("%d\t%d\t%d\n", p->i, p->j, p->e);// p = p->down;// }// }// }//}
参考大佬代码写的模板
转载地址:http://ymqbi.baihongyu.com/