数据结构(C语言)实验六:十字链表的简单输入和输出

#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 */

猜你喜欢

转载自blog.csdn.net/qq_40100414/article/details/113814861