数据结构常见存储方式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的结点的边
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!