常见数据结构的C语言定义---《数据结构C语言版》

embedded/2025/2/12 16:13:01/

文章目录

    • `1. 静态分配的顺序表`
    • `2. 动态分配的顺序表`
    • `3. 单 链 表`
    • `4. 双 链 表`
    • `5. 静态链表`
    • `6. 顺序栈`
    • `7. 链栈`
    • `8. 顺序存储的队列`
    • `9. 链式存储的队列`
    • `10. 链式存储的二叉树`
    • `11. 线索二叉树`
    • `12. 树的双亲表示法`
    • `13. 树的孩子兄弟表示法`
    • `12. 图的邻接矩阵法`
    • `13. 图的邻接表法`
    • `1-13集合版本`

#define ELEMTYPE int

1. 静态分配的顺序表

/****************
* 静态分配的顺序表 *
*****************/
#define MAXSIZE 50			// 线性表的最大长度
typedef struct
{ELEMTYPE data[MAXSIZE]; // 顺序表的元素int length;				// 顺序表的当前长度
}SqList;					// 顺序表类型定义

2. 动态分配的顺序表

/****************
* 动态分配的顺序表 *
*****************/
#define INITSIZE 50			// 线性表的初始长度
typedef struct
{ELEMTYPE* data;			// 动态分配数组的指针int MaxSize;			// 数组的最大容量int length;				// 数组中的元素个数
}SeqList;					// 动态分配的数组顺序表定义

3. 单 链 表

/****************
*	 单 链 表		*
*****************/
typedef struct LNode		
{ELEMTYPE data;			// 数据域struct LNode* next;		// 指针域
}LNode, *LinkList;

4. 双 链 表

/****************
*	 双 链 表		*
*****************/
typedef struct DNode
{ELEMTYPE data;			// 数据域struct DNode* prior;	// 前驱指针struct DNode* next;		// 后继指针
}DNode, * DLinkList;

5. 静态链表

/****************
*	静 态 链 表	*
*****************/
typedef struct 
{ELEMTYPE data;			// 数据域int next;				// 下一个元素的数组下标
}SLinkList[MAXSIZE];

6. 顺序栈

/****************
*	 顺 序 栈		*
*****************/
typedef struct 
{ELEMTYPE data[MAXSIZE];	// 数据域int top;				// 栈顶指针
}SqStack;

7. 链栈

/****************
*	 链    栈	*
*****************/
typedef struct LinKNode
{ELEMTYPE data;			// 数据域struct LinKNode* next;	// 指针域
}LiStack;

8. 顺序存储的队列

/****************
*  顺序存储的队列	*
*****************/
typedef struct
{ELEMTYPE data[MAXSIZE];	// 数据域int front;				// 队头指针int rear;				// 队尾指针
}SqQueue;

9. 链式存储的队列

/****************
*  链式存储的队列	*
*****************/
typedef struct LinkNode		// 链式队列节点定义
{ELEMTYPE data;struct LinkNode* next;
}LinkNode;
typedef struct 
{LinkNode* front;		// 队头指针LinkNode* rear;			// 队尾指针
}LinkQueue;

10. 链式存储的二叉树

/****************
* 链式存储的二叉树 *
*****************/
typedef struct BiTNode
{ELEMTYPE data;			// 数据域struct BiTNode* lchild;	// 左孩子指针struct BiTNode* rchild;	// 右孩子指针
}BiTNode,*BiTree;

11. 线索二叉树

/****************
*	线索二叉树	*
*****************/
typedef struct ThreadTNode
{ELEMTYPE data;				// 数据域struct ThreadTNode* lchild;	// 左孩子指针struct ThreadTNode* rchild;	// 右孩子指针int ltag;					// 左线索标记int rtag;					// 右线索标记
}ThreadTNode, * ThreadTree;

12. 树的双亲表示法

/****************
*  树的双亲表示法	*
*****************/
#define MAX_TREE_SIZE 100		// 树中能存储的最大节点数
typedef struct					// 树的节点定义
{	ELEMTYPE data;				// 数据元素int parent;					// 双亲指针
}PTNode;	
typedef struct
{PTNode nodes[MAX_TREE_SIZE];// 双亲表示int n;						// 节点数
}PTree;

13. 树的孩子兄弟表示法

/****************
*树的孩子兄弟表示法*
*****************/
typedef struct CSNode
{ELEMTYPE data;struct CSNode* firstchild;	// 第一个孩子指针struct CSNode* nextsibling;	// 右兄弟指针
}CSNode, * CSTree;

12. 图的邻接矩阵法

/****************
*  图的邻接矩阵法	*
*****************/
#define MAXVERTEXNUM 100		// 顶点数目的最大值
#define VertexType char			// 顶点对应的数据类型
#define EdgeType int			// 边对应的数据类型
typedef struct
{VertexType vex[MAXVERTEXNUM];				// 顶点表EdgeType edge[MAXVERTEXNUM][MAXVERTEXNUM];	// 邻接矩阵(边表)int vexnum;					// 顶点数量int arcnum;					// 边数量
}MGraph;

13. 图的邻接表法

/****************
*   图的邻接表法	*
*****************/
typedef struct ArcNode			// 边表节点
{int adjvex;					// 该弧所指向的顶点的位置struct ArcNode* nextArc;	// 指向下一条弧的指针ELEMTYPE info;				// 该弧的权值
}ArcNode;
typedef struct VNode			// 顶点表节点
{VertexType data;			// 顶点信息ArcNode* firstArc;			// 指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAXVERTEXNUM];
typedef struct
{AdjList vertices;			// 邻接表int vexnum;					// 顶点数int arcnum;					// 弧数
}ALGraph;						// 以邻接表存储的图类型

1-13集合版本

/// This is the definition of common data structure#define ELEMTYPE int/****************
* 静态分配的顺序表 *
*****************/
#define MAXSIZE 50			// 线性表的最大长度
typedef struct
{ELEMTYPE data[MAXSIZE]; // 顺序表的元素int length;				// 顺序表的当前长度
}SqList;					// 顺序表类型定义/****************
* 动态分配的顺序表 *
*****************/
#define INITSIZE 50			// 线性表的初始长度
typedef struct
{ELEMTYPE* data;			// 动态分配数组的指针int MaxSize;			// 数组的最大容量int length;				// 数组中的元素个数
}SeqList;					// 动态分配的数组顺序表定义/****************
*	 单 链 表		*
*****************/
typedef struct LNode		
{ELEMTYPE data;			// 数据域struct LNode* next;		// 指针域
}LNode, *LinkList;/****************
*	 双 链 表		*
*****************/
typedef struct DNode
{ELEMTYPE data;			// 数据域struct DNode* prior;	// 前驱指针struct DNode* next;		// 后继指针
}DNode, * DLinkList;/****************
*	静 态 链 表	*
*****************/
typedef struct 
{ELEMTYPE data;			// 数据域int next;				// 下一个元素的数组下标
}SLinkList[MAXSIZE];/****************
*	 顺 序 栈		*
*****************/
typedef struct 
{ELEMTYPE data[MAXSIZE];	// 数据域int top;				// 栈顶指针
}SqStack;/****************
*	 链    栈	*
*****************/
typedef struct LinKNode
{ELEMTYPE data;			// 数据域struct LinKNode* next;	// 指针域
}LiStack;/****************
*  顺序存储的队列	*
*****************/
typedef struct
{ELEMTYPE data[MAXSIZE];	// 数据域int front;				// 队头指针int rear;				// 队尾指针
}SqQueue;/****************
*  链式存储的队列	*
*****************/
typedef struct LinkNode		// 链式队列节点定义
{ELEMTYPE data;struct LinkNode* next;
}LinkNode;
typedef struct 
{LinkNode* front;		// 队头指针LinkNode* rear;			// 队尾指针
}LinkQueue;/****************
* 链式存储的二叉树 *
*****************/
typedef struct BiTNode
{ELEMTYPE data;			// 数据域struct BiTNode* lchild;	// 左孩子指针struct BiTNode* rchild;	// 右孩子指针
}BiTNode,*BiTree;/****************
*	线索二叉树	*
*****************/
typedef struct ThreadTNode
{ELEMTYPE data;				// 数据域struct ThreadTNode* lchild;	// 左孩子指针struct ThreadTNode* rchild;	// 右孩子指针int ltag;					// 左线索标记int rtag;					// 右线索标记
}ThreadTNode, * ThreadTree;/****************
*  树的双亲表示法	*
*****************/
#define MAX_TREE_SIZE 100		// 树中能存储的最大节点数
typedef struct					// 树的节点定义
{	ELEMTYPE data;				// 数据元素int parent;					// 双亲指针
}PTNode;	
typedef struct
{PTNode nodes[MAX_TREE_SIZE];// 双亲表示int n;						// 节点数
}PTree;/****************
*树的孩子兄弟表示法*
*****************/
typedef struct CSNode
{ELEMTYPE data;struct CSNode* firstchild;	// 第一个孩子指针struct CSNode* nextsibling;	// 右兄弟指针
}CSNode, * CSTree;/****************
*  图的邻接矩阵法	*
*****************/
#define MAXVERTEXNUM 100		// 顶点数目的最大值
#define VertexType char			// 顶点对应的数据类型
#define EdgeType int			// 边对应的数据类型
typedef struct
{VertexType vex[MAXVERTEXNUM];				// 顶点表EdgeType edge[MAXVERTEXNUM][MAXVERTEXNUM];	// 邻接矩阵(边表)int vexnum;					// 顶点数量int arcnum;					// 边数量
}MGraph;/****************
*   图的邻接表法	*
*****************/
typedef struct ArcNode			// 边表节点
{int adjvex;					// 该弧所指向的顶点的位置struct ArcNode* nextArc;	// 指向下一条弧的指针ELEMTYPE info;				// 该弧的权值
}ArcNode;
typedef struct VNode			// 顶点表节点
{VertexType data;			// 顶点信息ArcNode* firstArc;			// 指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAXVERTEXNUM];
typedef struct
{AdjList vertices;			// 邻接表int vexnum;					// 顶点数int arcnum;					// 弧数
}ALGraph;						// 以邻接表存储的图类型

http://www.ppmy.cn/embedded/161635.html

相关文章

【华为OD-E卷 - 119 评论转换输出 100分(python、java、c++、js、c)】

【华为OD-E卷 - 评论转换输出 100分(python、java、c、js、c)】 题目 在一个博客网站上,每篇博客都有评论。 每一条评论都是一个非空英文字母字符串。 评论具有树状结构,除了根评论外,每个评论都有一个父评论。 当评…

【Vue】在Vue3中使用Echarts的示例 两种方法

文章目录 方法一template渲染部分js部分方法一实现效果 方法二template部分js or ts部分方法二实现效果 贴个地址~ Apache ECharts官网地址 Apache ECharts示例地址 官网有的时候示例显示不出来,属于正常现象,多进几次就行 开始使用前,记得先…

51c自动驾驶~合集49

我自己的原文哦~ https://blog.51cto.com/whaosoft/13164876 #Ultra-AV 轨迹预测新基准!清华开源:统一自动驾驶纵向轨迹数据集 自动驾驶车辆在交通运输领域展现出巨大潜力,而理解其纵向驾驶行为是实现安全高效自动驾驶的关键。现有的开…

【C++动态规划 状压dp】1879. 两个数组最小的异或值之和|2145

本文涉及知识点 C动态规划 状态压缩dp LeetCode1879. 两个数组最小的异或值之和 给你两个整数数组 nums1 和 nums2 ,它们长度都为 n 。 两个数组的 异或值之和 为 (nums1[0] XOR nums2[0]) (nums1[1] XOR nums2[1]) … (nums1[n - 1] XOR nums2[n - 1]) &…

北斗导航 | 基于多假设解分离(MHSS)模型的双星故障监测算法(MATLAB代码实现——ARAIM)

===================================================== github:https://github.com/MichaelBeechan CSDN:https://blog.csdn.net/u011344545 ===================================================== 双星故障监测算法 一、多星故障MHSS模型流程1、数据预处理2、构建假设模…

文理医院预约挂号系统的设计与实现(代码+数据库+LW)

摘要 近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设计系统有一个初步的认识与了解,确定文理医院预约挂号系统的总体功能模块。然后&#…

玩转观察者模式

文章目录 什么是观察者模式解决方案结构适用场景实现方式观察者模式优缺点优点:缺点:什么是观察者模式 观察者模式通俗点解释就是你在观察别人,别人有什么变化,你就做出什么调整。观察者模式是一种行为设计模式,允许你定义一种订阅机制,可在对象事件发生时通知多个“观察…

【数据结构-异或字典树】力扣421. 数组中两个数的最大异或值

给你一个整数数组 nums &#xff0c;返回 nums[i] XOR nums[j] 的最大运算结果&#xff0c;其中 0 ≤ i ≤ j < n 。 示例 1&#xff1a; 输入&#xff1a;nums [3,10,5,25,2,8] 输出&#xff1a;28 解释&#xff1a;最大运算结果是 5 XOR 25 28. 示例 2&#xff1a; 输…