三元表的链式存储(十字链表)及顺序存储时一些问题。

三元表的链式存储(十字链表)及顺序存储时一些问题。

链式存储:

typedef struct OLNode

{

int i,j;

ElemType e;

struct OLNode *right,*down;

}OLNode;*OLink;

typedef struct

{

OLink *rhead,*chead;

int mu,,nu,tu;

}CrossList;

M.rhead=(OLink *)malloc((m+1)*sizeof(OLink)))

M.chead=(OLink *)malloc((m+1)*sizeof(OLink)))

这是为了创建头指针,便于指向下面的节点,为什么不用头结点,因为要节省开辟的内存。

M.rhead[i]->i==*(M.rhead+i)->i;

M.rhead可以看成是数组的首地址,M.rhead[i]就是M.rhead数组里面的一个元素 ,M.rhead=(OLink *)malloc((m+1)*sizeof(OLink)))就是数组开辟的内存。M.rhead[i]就是一个OLink(OLNode)类型。

所以在上一篇里面:

typedef struct

{

int i, j;

char v;

} str;

typedef struct

{

str *data;

int row, col, count; //矩阵的行数,列数,和非零元素个数

} Array;

void print_array(Array *p)

{

int j;

j = p->count;

for (int i = 0; i < j; i++)

printf("%d %d %c\n", p->data[i].i, (p->data + i)->j, (p->data + i)->v);

}

p->data = (str *)malloc(n * sizeof(str));

p->data[i].i和(p->data+i)->j都可以,p->data[i]类型是 str类型。

三元表的链式存储(十字链表)及顺序存储时一些问题。