一、十字链表结构体
#define MaxSize 5
typedef struct{
int m;
int n;
int k;
DLNode *rhead;
DLNode *chead;
}CrossList;
typedef struct DLNode{
int row;
int col;
float val;
DLNode *right;
DLNode *down;
}DLNode;
二、十字链表代码
int CreateCrossList(float A[][MaxSize], int m, int n, int k,CrossList &M){
if (M.chead)
free(M.chead);
if (M.rhead)
free(M.rhead);
M.chead = NULL;
M.rhead = NULL;
M.m = m;
M.n = n;
M.k = k;
M.chead = (DLNode *)malloc(sizeof(DLNode)*m);
M.rhead = (DLNode *)malloc(sizeof(DLNode)*n);
if (M.chead == NULL || M.rhead == NULL)
return 0;
for (int i = 0; i < m; i++){
M.chead[i].right = NULL;
M.chead[i].down = NULL;
}
for (int i = 0; i < n; i++){
M.rhead[i].right = NULL;
M.rhead[i].down = NULL;
}
DLNode *temp[MaxSize];
for (int i = 0; i < n; i++){
temp[i] = &(M.rhead[i]);
}
for (int i = 0; i < m; i++){
DLNode *r = &(M.chead[i]);
for (int j = 0; j < n; j++){
if (A[i][j] != 0){
DLNode *p = (DLNode *)malloc(sizeof(DLNode));
p->val = A[i][j];
p->row = i;
p->col = j;
r->right = p;
r = p;
temp[j]->down = p;
temp[j] = p;
}
}
}
return 1;
}