数据结构模板
c
#define MAXSIZE 100 // 顺序存储最大容量
#define MAXV 100 // 图最大顶点数
#define INF 0x3fffffff
1. 顺序表
静态分配顺序表
c
typedef struct {
int data[MAXSIZE];
int length; // 当前有效元素个数
} SqList;
动态分配顺序表(408优先推荐)
c
typedef struct {
int *data;
int maxsize; // 最大容量
int length; // 当前长度
} SeqList;
2. 单链表
c
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
3. 双向链表
c
typedef struct DNode {
int data;
struct DNode *prior;
struct DNode *next;
} DNode, *DLinkList;
4. 循环单链表
结构体和普通单链表完全一致,仅操作逻辑不同(尾结点next指向头结点)
c
typedef struct LNode {
int data;
struct LNode *next;
} LNode, *LinkList;
5. 循环双向链表
c
typedef struct DNode {
int data;
struct DNode *prior;
struct DNode *next;
} DNode, *DLinkList;
6. 栈
顺序栈
c
typedef struct {
int data[MAXSIZE];
int top; // 栈顶指针
} SqStack;
链栈
c
typedef struct SNode {
int data;
struct SNode *next;
} SNode, *LinkStack;
7. 队列
循环顺序队列
c
typedef struct {
int data[MAXSIZE];
int front; // 队头
int rear; // 队尾
} SqQueue;
链队列
c
typedef struct QNode {
int data;
struct QNode *next;
} QNode;
typedef struct {
QNode *front;
QNode *rear;
} LinkQueue;
8. 顺序串
c
typedef struct {
char ch[MAXSIZE];
int length;
} SString;
9. 普通二叉树(二叉链表)
c
typedef struct BiTNode {
int data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
10. 线索二叉树
c
typedef struct ThreadNode {
int data;
struct ThreadNode *lchild, *rchild;
int ltag; // 0:左孩子,1:前驱线索
int rtag; // 0:右孩子,1:后继线索
} ThreadNode, *ThreadTree;
11. 图
邻接矩阵
c
typedef struct {
int Edge[MAXV][MAXV];
int n, e; // n顶点数,e边数
} MGraph;
邻接表(考研最高频)
c
// 边结点
typedef struct EdgeNode {
int adjvex;
struct EdgeNode *nextedge;
// 带权图增加 int weight;
} EdgeNode;
// 顶点结点
typedef struct VNode {
int data;
EdgeNode *firstedge;
} VNode, AdjList[MAXV];
// 图整体结构
typedef struct {
AdjList adjList;
int n, e;
} ALGraph;