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

文章目录

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

#define ELEMTYPE int

1. 静态分配的顺序表

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

2. 动态分配的顺序表

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

3. 单 链 表

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

4. 双 链 表

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

5. 静态链表

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

6. 顺序栈

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

7. 链栈

c 复制代码
/****************
*	 链    栈	*
*****************/
typedef struct LinKNode
{
	ELEMTYPE data;			// 数据域
	struct LinKNode* next;	// 指针域
}LiStack;

8. 顺序存储的队列

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

9. 链式存储的队列

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

10. 链式存储的二叉树

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

11. 线索二叉树

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

12. 树的双亲表示法

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

13. 树的孩子兄弟表示法

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

12. 图的邻接矩阵法

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

13. 图的邻接表法

c 复制代码
/****************
*   图的邻接表法	*
*****************/
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集合版本

c 复制代码
/// 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;						// 以邻接表存储的图类型
相关推荐
yuanpan17 分钟前
.net/C#进程间通信技术方案总结
开发语言·c#·.net
吃面不喝汤6625 分钟前
破解 Qt QProcess 在 Release 模式下的“卡死”之谜
开发语言·qt
不見星空32 分钟前
2025年第十六届蓝桥杯软件赛省赛C/C++大学A组个人解题
c语言·c++·蓝桥杯
@十八子德月生33 分钟前
8天Python从入门到精通【itheima】-1~5
大数据·开发语言·python·学习
jiunian_cn33 分钟前
【c++】异常详解
java·开发语言·数据结构·c++·算法·visual studio
梁下轻语的秋缘42 分钟前
每日c/c++题 备战蓝桥杯(洛谷P1387 最大正方形)
c语言·c++·蓝桥杯
martian6651 小时前
信创生态核心技术栈:数据库与中间件
开发语言·中间件·系统架构·系统安全·创业创新
Bl_a_ck1 小时前
开发环境(Development Environment)
开发语言·前端·javascript·typescript·ecmascript
每天一个秃顶小技巧1 小时前
02.Golang 切片(slice)源码分析(一、定义与基础操作实现)
开发语言·后端·python·golang
康康这名还挺多2 小时前
鸿蒙HarmonyOS list优化一: list 结合 lazyforeach用法
数据结构·list·harmonyos·lazyforeach