常见数据结构的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;						// 以邻接表存储的图类型
相关推荐
Fanxt_Ja10 小时前
【LeetCode】算法详解#15 ---环形链表II
数据结构·算法·leetcode·链表
侃侃_天下10 小时前
最终的信号类
开发语言·c++·算法
echoarts10 小时前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Aomnitrix11 小时前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
每天回答3个问题11 小时前
UE5C++编译遇到MSB3073
开发语言·c++·ue5
今后12311 小时前
【数据结构】二叉树的概念
数据结构·二叉树
伍哥的传说11 小时前
Vite Plugin PWA – 零配置构建现代渐进式Web应用
开发语言·前端·javascript·web app·pwa·service worker·workbox
小莞尔12 小时前
【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统
c语言·stm32·单片机·嵌入式硬件·51单片机
小莞尔12 小时前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
liujing1023292912 小时前
Day03_刷题niuke20250915
c语言