常见数据结构的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;						// 以邻接表存储的图类型
相关推荐
Maybe_ch5 分钟前
Blazor-<select>
开发语言·c#·blazor
华梦岚2 小时前
F#语言的学习路线
开发语言·后端·golang
Zz_waiting.2 小时前
java数据结构_二叉树_5.4
数据结构·算法
lly2024063 小时前
XML 元素:结构化数据的基石
开发语言
钟离墨笺3 小时前
【c++】四种类型转换形式
开发语言·c++
“抚琴”的人3 小时前
【C#零基础从入门到精通】(一)——了解C#
开发语言·c#
梅清瑶3 小时前
Powershell语言的数据库编程
开发语言·后端·golang
吴天德少侠3 小时前
设计模式中的关联和依赖区别
java·开发语言·设计模式
汤姆和杰瑞在瑞士吃糯米粑粑3 小时前
【C++学习篇】C++11
开发语言·c++
zjkzjk77113 小时前
C++ 左值引用 & 右值引用 && std::move()左值改右值 移动构造函数()
开发语言·c++