数据结构常见存储方式c语言

 

树---双亲表示法

 

复制代码
#define MaxSize 100  //树中最多结点数
typedef struct{  //树的结点定义
    char data;  //数据元素
    int parent;  //双亲位置域
}PTNode;

typedef struct{  //树的类型定义
    PTNode nodes[MaxSize];  //双亲表示
    int n;  //结点数
}PTree;
复制代码

 

 

树---孩子表示法

复制代码
#define MaxSize 100

typedef struct ChildNode{ //链表中每个结点的定义
    //链表中每个结点存储的不是数据本身,而是数据在数组中存储的位置下标
    int child;
    struct ChildNode *next;
}ChildNode;

typedef struct{  //树中每个结点的定义
    char data;  //结点的数据类型
    ChildNode *firstchild;  //孩子链表头指针
}CHNode;

typedef struct{
    CHNode nodes[MaxSize];  //存储结点的数组
    int n;
}CTree;
复制代码

树---孩子兄弟表示法

typedef struct CSNode{
    char data;  //数据域
    struct CSNode *firstchild, *nextsibling;  //第一个孩子和右兄弟指针    
}CSNode, *CSTree;

二叉树---左右孩子表示法

#define datatype char  //定义二叉树元素的数据类型为字符
typedef struct node //定义结点由数据域,左右指针组成
{ Datatype data;
struct node *lchild,*rchild;
}Bitree;

 

 

图---邻接矩阵

复制代码
/*图的邻接矩阵存储表示法*/
//用两个数组分别存储顶点表和邻接矩阵
#define MaxInt 32767  //表示极大值,即无穷
#define MVNum 100  //最大顶点数
typedef char VerTexType;  //假设顶点的数据类型为字符型
typedef int ArcType;    //假设边的权值类型为整型
typedef struct
{
    VerTexType vexs[MVNum];    //顶点表
    ArcType arcs[MVNum][MVNum];    //邻接矩阵
    int vexnum, arcnum;    //图的当前顶点数和边数
}AMGraph;
复制代码

 

图---邻接表

复制代码
/*图的邻接表的存储定义*/
//弧的结点结构
#define MVNum 100    //最大的顶点数
typedef struct ArcNode
{
    int adjvex;    //该边所指的顶点的位置
    struct ArcNode* nextarc;    //指向下一条边的指针
    OtherInfo info;    //和边相关的信息
}ArcNode;
//顶点的结点结构
typedef struct VNode
{
    VertexType data;//顶点信息
    ArcNode* firstarc;//指向第一条依附该顶点的边
}VNode,AdjList[MVNum];//AdjList表示邻接表类型
//AdjList v相当于VNode v[MVNum]

//图的结构定义(邻接表)
typedef struct
{
    AdjList vertices;//vertices是vertex的复数
    int vexnum, arcnum;//图的当前顶点数和边数
}ALGraph;

/*说明*/
ALGraph G;//定义了邻接表表示的图G
G.vexnum = 5;G.arcnum = 6;//图G包含了5个顶点和6条边
G.vertices[1].data = 'v2';//图G中第2个顶点是v2
p = G.vertices[1].firstarc;//指针p指向顶点v2的第一个边结点
p->adjvex = 4;//p指针所指边结点是到下标为4的结点的边
复制代码

 

posted @   老家伙2004  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示