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

发布于:2025-02-11 ⋅ 阅读:(10) ⋅ 点赞:(0)

#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;						// 以邻接表存储的图类型