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