阅读背景:

数据结构——稀疏矩阵的十字链表表示方法

来源:互联网 
/************************ author's email:[email protected] 稀疏矩阵的十字链表表示方法 ************************/ #include<iostream> using namespace std; #define maxSize 4 //普通结点定义 typedef struct OLNode { int row, col; struct OLNode *right, *down; float val; }OLNode,*node; //头结点结构定义 typedef struct { OLNode *rhead, *chead; int m, n, k; }CrossList; int InitMatrix(CrossList *M); int createcrossListmat(float A[][maxSize], int m, int n, int k, CrossList *M); int main() { float A[][maxSize] = { { 0,0,0,1 }, { 0,0,3,2 }, { 1,0,0,0 }, { 0,2,0,0 } }; int m, n, k; m = n = maxSize; k = 5; CrossList M; InitMatrix(&M); cout << "十字链表中元素为:" << endl; createcrossListmat(A, m, n, k, &M); return 0; } int InitMatrix(CrossList *M) { (*M).rhead = (*M).chead = NULL; (*M).k = (*M).m = (*M).n = 0; return 1; } 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).m = m; (*M).n = n; (*M).k = k; if (!((*M).rhead = (OLNode *)malloc(sizeof(OLNode)*m))) return 0; if (!((*M).chead = (OLNode *)malloc(sizeof(OLNode)*n))) return 0; for (int i = 0; i < m; ++i) { (*M).rhead[i].right = NULL; (*M).rhead[i].down = NULL; } for (int i = 0; i < n; ++i) { (*M).chead[i].right = NULL; (*M).chead[i].down = NULL; } //建立列链表的辅助指针数组 OLNode *temp_r[maxSize]; for (int j = 0; j < n; ++j) temp_r[j] = &((*M).chead[j]); for (int i = 0; i < m; ++i) { OLNode *c = &((*M).rhead[i]); for (int j = 0; j < n; ++j) { if (A[i][j] != 0) { OLNode *p = (OLNode*)malloc(sizeof(OLNode)); p->row = i; p->col = j; p->val = A[i][j]; p->down = NULL; p->right = NULL; c->right = p; c = p; temp_r[j]->down = p; temp_r[j] = p; cout << p->val<<'\t'; } } } cout << endl; return 1; } /************************ author's email:wardse



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: