十字链表的创建

1人阅读 评论(0) 收藏 举报
分类:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef int Status;

typedef struct OLNode{
    int col, row;
    ElemType value;
    struct OLNode *down, *right;
}OLNode, *OLink;

typedef struct{
    OLink *rhead, *chead;//行、列链表头指针
    int mu, nu, tu;
}CrossList;

Status CreateSMatrix_OL(CrossList *M){//创建稀疏矩阵M, 采用十字链表存储
    int m, n, t;
    int i, j, v;
    OLink p, q;
    if(M){
        free(M);
    }
    scanf("%d%d%d", &m, &n, &t);
    M -> mu = m;
    M -> nu = n;
    M -> tu = t;
    M -> rhead = (OLink *)malloc((m + 1) * sizeof(OLink));
    M -> chead = (OLink *)malloc((n + 1) * sizeof(OLink));
    if(! M -> rhead){
        exit(0);
    }
    if(! M -> chead){
        exit(0);
    }
    M -> rhead = M -> chead = NULL;//初始化行列头指针向量,各行列链表为空
    for(scanf("%d%d%d", &i, &j, &v); i != 0;scanf("%d%d%d", &i, &j, &v)){
        p = (OLink )malloc((m + 1) * sizeof(OLink));
        if(!p){
            exit(0);
        }
        p -> col = i;
        p -> row = j;
        p -> value = v;
        if(M -> rhead[i] == NULL || M -> rhead[i] -> row > j){
            p -> right = M -> rhead[i];
            M -> rhead[i] = p;
        }
        else{//寻找在行表中的插入位置
            for(q = M -> rhead[i]; (q -> right) && q -> right -> col < j; q = q -> right);
            p -> right = q -> right;
            q -> right = p;
        }//完成行插入
        if(M -> chead[j] == NULL || M -> chead[j] -> row > i){
            p -> down = M -> chead[j];
            M -> chead[j] = p;
        }
        else{//寻找在列表中的插入位置
            for(q = M -> chead[j]; (q -> down) && q -> down -> row < i; q = q -> down);
            p -> down = q -> down;
            q -> down = p;
        }
    }
    return 1;
}

查看评论

【数据结构】算法5.4 十字链表-创建

#include #include #include #include#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #defi...
  • Vit_rose
  • Vit_rose
  • 2016-10-10 20:37:42
  • 831

图的创建(十字链表)

十字链表方式存储图: 十字链表的节点结构:节点+前驱节点链表+后继节点链表 十字链表的边结构:头节点+尾节点+尾节点的前驱节点链表+头节点的后继节点链表.   对于如下图结构: 转换为十字...
  • u013009575
  • u013009575
  • 2014-02-08 08:48:44
  • 1049

稀疏矩阵的创建--十字链表

一:概念     既然要用链表节点来模拟矩阵中的非零元素,肯定需要如下5个元素(row,col,val,down,right),其中: row:矩阵中的行。 col:矩阵中的列。 ...
  • tuwenqi2013
  • tuwenqi2013
  • 2016-08-08 19:01:42
  • 1660

十字链表的定义及C语言描述

十字链表常用于表示稀疏矩阵,可视作稀疏矩阵的一种链式表示,因此,这里以稀疏矩阵为背景介绍十字链表。不过,十字链表的应用远不止稀疏矩阵,一切具有正交关系的结构,都可用十字链表存储。 1、存储方式 (...
  • Scythe666
  • Scythe666
  • 2014-07-12 10:06:20
  • 1432

数据结构之---C++语言实现图的十字链表存储表示

数据结构之---C++语言实现图的十字链表存储表示
  • u012965373
  • u012965373
  • 2015-07-29 20:43:03
  • 1249

数据结构:图(十字链表存储 c++实现)

/************************************************************************************ 十字链表结构:主要针对的...
  • s634772208
  • s634772208
  • 2015-05-08 15:15:05
  • 1107

数据结构:有向图的十字链表存储表示(c实现)

/********************************************************** 程序:有向图的十字链表存储表示 完成时间:2013年6月10日 完成...
  • s634772208
  • s634772208
  • 2015-05-08 15:12:31
  • 2665

十字链表构建矩阵

#include #include using namespace std; typedef struct Onode { int e; int i,j; Onode* right; Ono...
  • zhoutonglx
  • zhoutonglx
  • 2014-12-29 09:44:14
  • 494

图的十字链表C语言源码

  • 2016年01月01日 16:25
  • 12KB
  • 下载

数据结构之---C/C++实现稀疏矩阵的十字链表

数据结构之---C/C++实现稀疏矩阵的十字链表
  • u012965373
  • u012965373
  • 2015-05-31 15:36:59
  • 3791
    个人资料
    持之以恒
    等级:
    访问量: 1491
    积分: 187
    排名: 99万+
    文章分类
    文章存档