第二章 线性表
- 线性表的动态分配顺序存储结构 P22
#define int ElemType
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct{
ElemType *elem;//存储空间基址
int length;//当前长度
int listsize;//当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;
- 线性表的单链表存储结构 P28
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
- 线性表的静态单链表存储结构 P31
#define MAXSIZE 100 //链表的最大长度
typedef struct{
ElemType data;
int cur;//假指针
}component,SLinkList[MAXSIZE];
- 线性表的双向链表存储结构 P35
掌握删除和插入操作时指针的指向变化
typedef struct DuLNode{
ElemType data;
struct DuLNode *prior;
struct DuLNode *next;
}DuLNode,*DuLinkList;
第三章
栈
- 栈的顺序存储表示 P46
#define STACK_INIT_SIZE 100 //初始分配量
#define STACKINCREMENT 10 //增量
typedef struct{
SElemType *base;//在栈构造之前和销毁之后,base的值为NULL
SElemType *top;//栈顶指针
int stacksize;//当前已分配的存储空间,以元素为单位
}SqStack;
栈的顺序存储表示 假指针
#define STACK_INIT_SIZE 100 //初始分配量
#define STACKINCREMENT 10 //增量
typedef struct{
SElemType *base;//在栈构造之前和销毁之后,base的值为NULL
int top;//栈顶指针
int stacksize;//当前已分配的存储空间,以元素为单位
}SqStack;
队列
- 单链队列——队列的链式存储结构 P61
typedef struct QNode {
QElemType data;
struct QNode *next;
} QNode,*QueuePtr;
typedef struct {
QueuePtr *front;
QueuePtr *rear;
}LinkQueue;
- 循环队列——队列的顺序存储结构 P64
循环意义下的加一操作
#define MAXQSIZE 100 //最大队列长度
typedef struct {
QElemType *base; //初始化的动态分配存储空间
int front; //头指针,若队列不变,指向队列头元素
int rear; //尾指针,若队列不空,指向队尾元素的下一个位置
}SqQueue;
第四章 串
- 串的定长顺序存储表示 P73
#define MAXSTRLEN 255 //可在255以内定义最大串长
typedef unsigned char SString[MAXSTRLEN + 1];//0号单元存放串的长度
- 堆分配存储表示 P75
typedef struct {
char *ch;//若是非空串,则按照串长分配存储区,否则ch为NULL
int length;//串长度,省去了listsize 此处的length就是listsize
}HString;
第五章 数组和广义表
数组
- 稀疏矩阵的三元组顺序表存储表述 P98
#define MAXSIZE 12500 //假设非0元个数的最大值为12500
typedef struct {
int i,j; //非0元的 行 列 下标
ElemType e;//非0元元素
}Triple;
typedef struct {
Triple data[MAXSIZE + 1];//非0元三元组表,data[0]未用
int mu,nu,tu;//矩阵的行数 列数 非0元的个数
}TSMatrix;
- 稀疏矩阵的十字链表表示 P104
typedef struct OLNode {
int i,j;//该非0元的 行 列 下标
ElemType e; //该元素
struct OLNode *right,*down;//该非零元所在行表和列表的后继链域
}OLNode,*OLink;
typedef struct {
OLink *rhead,*chead;//行和列链表指针向量基址
int mu,nu,tu;//稀疏矩阵的 行 列 非零元个数
}CrossList;
广义表
- 广义表的头尾链表存储表示 P109
typedef enum{ATOM,LIST}ElemTag;//ATOM == 0:原子, LIST == 1:广义表
typedef struct GLNode {
ElemType tag;//公共部分,用于区分原子结点和表结点
union {//原子部分和表结点的联合部分
AtomType atom;//atom是原子节点域
struct {
struct GLNode *hp,*tp;
}ptr;//ptr是表结点的指针域,ptr.hp 和 ptr.tp 分别指向表头和表尾
};
}*GList;//广义表类型
- 广义表的扩展性链表存储表示 P110
孩子兄弟表示法
typedef enum{ATOM,LIST}ElemTag;//ATOM == 0:原子, LIST == 1:广义表
typedef struct GLNode {
ElemType tag;//公共部分,用于区分原子结点和表结点
union {//原子部分和表结点的联合部分
AtomType atom;//atom是原子节点域
struct GLNode *hp;//表结点的表头指针
};
struct GLNode *tp;//相当于线性链表的next。指向下一个元素结点
}*GList;//广义表类型
第六章 树和二叉树
二叉树
- 二叉树的顺序存储表示 P126
#define MAX_TREE_SIZE 100//二叉树的最大结点数
typedef TElemType SqBiTree[MAX_TREE_SIZE]; //0号单元存储根节点
SqBiTree bt;
- 二叉树的二叉链表存储表示 P127
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;
树
- 双亲表示法 P135
#define MAX_TREE_SIZE 100//
typedef struct PTNode { //结点结构
TElemType data;
int parent;//双亲位置域
}PTNode;
typedef struct { //树结构
PTNode nodes[MAX_TREE_SIZE];
int r,n;//根的位置和结点树
}PTree;
- 孩子表示法 P136
typedef struct CTNode {//孩子结点
int child;
struct CTNode *next;
}*ChildPtr;
typedef struct {//双亲结点
TElemType data;
ChildPtr firstChild;//孩子链表头指针
}CTBox;
typedef struct {
CTBox nodes[MAX_TREE_SIZE];
int r,n;//根的位置和结点数
}CTree;
- 树的二叉链表(孩子—兄弟)存储表示 P136
typedef struct CSNode {
ElemType data;
struct CSNode *firstchild,*nextsibling;
}CSNode,*CSTree;