#include <stdio.h>
#include <stdlib.h>
typedef int Etype;
typedef struct OLnode {
int i, j; /* 行号、列号域 */
Etype e; /* 数据域 */
struct OLnode *right, *down; /* 行向的、列向的指针域 */
} OLnode; /* 数据元素结点类型 */
typedef struct {
OLnode *rh[5], *ch[5];
int mu, nu, tu;
} Crosslist; /* 十字链表行、列表头 */
/* 函数声明 */
void creatMatrix(Crosslist *M);
void out_M(Crosslist M);
Crosslist ma;
int z;
/* 主函数 */
void main() {
creatMatrix(&ma);
out_M(ma);
} /* main */
/* 十字链表的输出 */
void out_M(Crosslist M) {
int i;
OLnode *p;
char ch;
/* 输出矩阵的总行数、总列数、非零元素总个数 */
printf("\n m=%d n=%d t=%d\n", M.mu, M.nu, M.tu);
for (i = 1; i <= M.mu; i++) {
p = M.rh[i]; /* 指向第i行 */
if (p) {
printf("\n i=%d", i);
while (p) {
printf(" (%3d%3d%4d) ", p->i, p->j, p->e);
p = p->right;
}
}
printf("\n");
}
}
void creatMatrix(Crosslist *M) {
int m, n, t, row, col, i, j;
Etype va;
OLnode *p, *q, *s;
/* 输入矩阵的总行数、总列数、非零元素总个数 */
printf("\n m,n,t=?");
scanf("%d,%d,%d", &m, &n, &t);
for (i = 1; i <= m; i++) M->rh[i] = NULL;
for (j = 1; j <= n; j++) M->ch[j] = NULL;
M->mu = m;
M->nu = n;
M->tu = t; /* 建立成空十字链表 */
/* 以下为非零元素的逐一输入和插入 */
for (i = 1; i <= M->tu; i++) {
printf("\n i,j,e=?");
scanf("%d,%d,%d", &row, &col, &va);
p = (OLnode *) malloc(sizeof(OLnode));
p->i = row;
p->j = col;
p->e = va;
/* 在第row行上链接 */
q = M->rh[row];
s = q;
while (q != NULL && q->j < col) {
s = q;
q = q->right;
}
p->right = q;
if (q == M->rh[row])M->rh[row] = p; else s->right = p;
/* 在第col列上链接 */
q = M->ch[col];
while (q && q->i < row) {
s = q;
q = q->down;
}
p->down = q;
if (q == M->ch[col]) M->ch[col] = p; else s->down = p;
} /* for */
}/* creatMatrix */
数据结构(C语言)实验六:十字链表的简单输入和输出
Guess you like
Origin blog.csdn.net/qq_40100414/article/details/113814861
Recommended
Ranking