数据结构之十字链表

#define MAXSIZE 100

#define ERROR 1

#define OK 0

typedef struct{

int a;

char s;

}ElemType;

typedef struct{

ElemType e;

int i,j;

Node *rigth;

Node *down;

}Node,*PointNode;

typedef struct{

PointNode *C;

PointNode *R;

int mu,nu,tu;

}Ta;

int init_table(Ta &H){

int mu,nu,tu;

scanf("please input the table: mu,nu",mu,nu);

if(!H.C=(PointNode*)malloc((nu+1)sizeof(PointNode))) return ERROR;

if(!H.R=(PointNode*)malloc((mu+1)sizeof(PointNode))) return ERROR;

H.tu=0;

H.mu=mu;

H.nu=nu;

H.C[]=H.R[]=NULL;

return OK;

}

int insert_table(Ta &H){

int i,j;

ElemType e;

PointNode p=NULL,q=NULL;

scanf("please input : i, j, e",i,j,e);

if(i<0||j<0) return ERROR;

if(q=(PointNode)malloc(sizeof(Node))) return ERROR;

q->i=i;

q->j=j;

q->e=e;

p=H.R[i];

if(p==NULL||p->j>j){

q->right=p;

p=q;

}

else{

for(;p->right&&p->right-j<j;p=p->right){

q->right=p->right;

p->right=q;

}

}

p=T.C[j];

if(p==NULL||p->i>i){

q->down=p;

p=q;

}

else{

for(;p->down&&p->down-i<i;p=p->down){

q->down=p->down;

p->down=q;

}

return OK;

}

}

时间: 2024-08-07 07:43:46

数据结构之十字链表的相关文章

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

最近一直忙着考研复习,很久都没有更新博客了,今天写一篇数据结构的存储. //有向图的十字链表存储表示 //杨鑫 #include <iostream> #include <cstdio> #include <stdlib.h> #include <cstring> using namespace std; #define MAX_VERTEX_NUM 20 #define OVERFLOW -2 #define OK 1 typedef int Status

7-3-有向图的十字链表存储结构-图-第7章-《数据结构》课本源码-严蔚敏吴伟民版

课本源码部分 第7章  图 - 有向图的十字链表存储结构 ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑        本源码引入的文件  链接? Status.h.Scanf.c.LinkQueue.c        

【算法与数据结构】图 -- 十字链表

图的[十字链表]表示法是一种链式存储结构,可以看成是[邻接表]和[逆邻接表]的组合 本文中用到的有向图 /************************************************************************ 有向图的存储:十字链表 有向图的十字链表存储结构,是有一种链式存储结构,可以看成是[邻接表]和[逆邻接表] 的结合. 图中每条弧对应一个[弧结点],每个顶点对应一个[顶点结点] 弧结点 -------------------------------

看数据结构写代码(21) 稀疏矩阵(十字链表方式)

写完 这个样例,花费了 我不少时间.大部分时间 花费在 调试 内存问题上. 比如在销毁十字链表时.多次释放节点空间,造成 _CrtIsValidHeapPointer(pUserData) 异常. 当使用malloc 分配 一个 空间时,会将这个空间的起始地址和长度 加到一个链表中去.free(p)的时候 ,会从 链表里 查找 是否 有 这个地址空间,找到了就将这个节点从链表中删除._CrtIsValidHeapPointer(pUserData)  这个函数 正是 检查 这个空间是否 在链表里

javascript实现数据结构:稀疏矩阵的十字链表存储表示

当矩阵的非零个数和位置在操作过程中变化大时,就不宜采用顺序存储结构来表示三元组的线性表.例如,在作"将矩阵B加到矩阵A上"的操作时,由于非零元的插入或删除将会引起A.data中元素的移动.为此,对这种类型的矩阵,采用链式存储结构表示三元组的线性表更为恰当. 在链表中,每个非陵园可用一个含5个域的结点表示,其中i,j和e这3个域分别表示该非零元所在的行,列和非零元的值,向右域right用以链接同一行中下一个非零元,向下域down用以链接同一列中下一个非零元.同一行的非零元通过right域

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

首先这里介绍什么是矩阵的十字链表,大家可以理解稀疏矩阵是顺序存储的,那么这个就是链式存储的. 如图: 存储该矩阵 那么应该是如下的格式: 我们知道稀疏矩阵的三元组存储方式的实现很简单,每个元素有三个域分别是col,row, e.代表了该非零元的行号.列号以及值.那么在十字链表的存储方式下,首先这三个域是肯定少不了的,不然在进行很多操作的时候都要自己使用计数器,很麻烦.而十字链表的形式大家可以理解成每一行是一个链表,而每一列又是一个链表 通过上面的图我们可以知道,每个结点不止要存放row, col

看数据结构写代码(37) 图的十字链表的表示与实现

图的邻接表在 查找 有向图的 出度 很 方便,但是 在 查找 入度 时,需要遍历整个图.如果想要 方便的 查找 入度,需要 建立 逆邻接表.十字链表 正好 就是 邻接表 和 逆邻接表的集合.具体结构图如下: 感觉 十字链表 在 查找 入度时 方便 一些,其他 跟 邻接表没什么区别. 源代码 网盘地址:点击打开链接 代码如下: // CrossLinkGraph.cpp : 定义控制台应用程序的入口点. //有向图的十字链表表示法 #include "stdafx.h" #include

[数据结构]图,邻接多重表,十字链表

十字链表 你会发现,要表示一个有向图,因为有 出度 和 入度 ,需要两个邻接表:邻接表和逆邻接表. 其实我们可以把这两个表整合在一起,也就是十字链表(Orthogonal List). 我们依然需要构造一种结构体A,用结构体A的数组来存放所有顶点-我们其实可以把它叫做 顶点表. 我们构造的结构体A如下: data firstin firstout 构造结构体B,用结构体B来记录与这个顶点 用边邻接的 顶点的相关信息,我们把它叫做 边表. tailvex headvex headlink tail

图的十字链表存储(C语言)

时间一晃已经大二下了,学校也开了数据结构的课,想起了自己大一刚会C语言,自学数据结构的时候,那时候很无助啊,不懂就只有拼命看,改bug改很久. 老师一节课讲完了邻接表,十字链表,邻接多重表.然而感觉他好像在自己讲自己的,一点也不认真. 但是依托老师是不行的,只懂理论也不行,或许学生认为邻接矩阵,邻接表不就那种东西吗?很简单啊. 大一的时候我也觉得C语言很简单啊,然后一写不都是错? 不写代码的数据结构不叫数据结构. 不多说,开始吧. 邻接表固然优秀,但也有不足,例如对有向图的处理上,有时候需要再建