数据结构——结构体总结

第二章 线性表

  1. 线性表动态分配顺序存储结构 P22
#define int ElemType 

#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10   //线性表存储空间的分配增量
typedef struct{
	ElemType  *elem;//存储空间基址
	int length;//当前长度
	int listsize;//当前分配的存储容量(以sizeof(ElemType)为单位)
}SqList;

  1. 线性表单链表存储结构 P28
typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;
  1. 线性表静态单链表存储结构 P31
#define MAXSIZE 100 //链表的最大长度
typedef struct{
	ElemType data;
	int cur;//假指针
}component,SLinkList[MAXSIZE];
  1. 线性表双向链表存储结构 P35
    掌握删除插入操作时指针的指向变化
typedef struct DuLNode{
	ElemType data;
	struct DuLNode *prior;
	struct DuLNode *next;
}DuLNode,*DuLinkList;

第三章

  1. 顺序存储表示 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;

队列

  1. 单链队列——队列的链式存储结构 P61
typedef struct QNode {
	QElemType data;
	struct QNode *next;
} QNode,*QueuePtr;
typedef struct {
	QueuePtr *front;
	QueuePtr *rear;
}LinkQueue;
  1. 循环队列——队列的顺序存储结构 P64
    循环意义下的加一操作
#define MAXQSIZE 100 //最大队列长度
typedef struct {
	QElemType *base; //初始化的动态分配存储空间
	int front;  //头指针,若队列不变,指向队列头元素
	int rear;  //尾指针,若队列不空,指向队尾元素的下一个位置
}SqQueue;

第四章 串

  1. 串的定长顺序存储表示 P73
#define MAXSTRLEN 255 //可在255以内定义最大串长
typedef unsigned char SString[MAXSTRLEN + 1];//0号单元存放串的长度 
  1. 堆分配存储表示 P75
typedef struct {
	char *ch;//若是非空串,则按照串长分配存储区,否则ch为NULL
	int length;//串长度,省去了listsize 此处的length就是listsize
}HString;

第五章 数组和广义表

数组

  1. 稀疏矩阵三元组顺序表存储表述 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;
  1. 稀疏矩阵的十字链表表示 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;

广义表

  1. 广义表的头尾链表存储表示 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;//广义表类型
  1. 广义表的扩展性链表存储表示 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;//广义表类型

第六章 树和二叉树

二叉树

  1. 二叉树的顺序存储表示 P126
#define MAX_TREE_SIZE 100//二叉树的最大结点数
typedef TElemType SqBiTree[MAX_TREE_SIZE]; //0号单元存储根节点
SqBiTree bt;
  1. 二叉树的二叉链表存储表示 P127
typedef struct BiTNode{
	TElemType data;
	struct BiTNode *lchild,*rchild;//左右孩子指针
}BiTNode,*BiTree;

  1. 双亲表示法 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;
  1. 孩子表示法 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;
  1. 树的二叉链表(孩子—兄弟)存储表示 P136
typedef struct CSNode {
	ElemType data;
	struct CSNode *firstchild,*nextsibling;
}CSNode,*CSTree;

第七章 图

  1. 图的数组存储表示 P161
# define INFINITY INT_MAX //最大值∞
# define MAX_VERTEX_NUM 20 //最大顶点个数

typedef enum {DG,DN,UDG,UDN} GraphKind;//{有向图,有向网,无向图,无向网}
typedef struct ArcCell{
	VRType adj;//VRType是顶点关系类型,对无权图,用1或0表示是否相邻;对带权图,则为权值类型
	InfoType *info;//该弧相关信息的指针
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

typedef struct{
	VertexType vexs[MAX_VERTEX_NUM];//顶点向量
	AdjMatrix arcs;//邻接矩阵
	int vexnum,arcnum;//图的当前顶点数和弧数
	GraphKind kind;//图的种类标志
}MGraph;
  1. 图的邻接表存储表示 P163
# define MAX_VERTEX_NUM 20 //最大顶点个数

typedef struct ArcNode{
	int adjvex;//该弧所指向的顶点的位置
	struct ArcNode *nextarc;//指向下一条弧的指针
	InfoType *info;//该弧相关信息的指针
}ArcNode;
typedef struct VNode{
	VertexType data;//顶点信息
	ArcNode *firstarc;//指向第一条依附该顶点的弧的指针
}VNode,AdjList[MAX_VERTEX_NUM];
typedef struct{
	AdjList vertices;
	int vexnum,arcnum;//图的当前顶点数和弧数
	int kind;//图的种类标志
}ALGraph;
  1. 有向图的十字链表存储表示 P165
# define MAX_VERTEX_NUM 20
typedef struct ArcBox {
	int tailvex,headvex;//该弧的尾和头顶点的位置
	struct ArcBox *hlink,*tlink;//分别为弧头相同和弧尾相同的弧的链域
	InfoType *info;//该弧相关信息的指针
}ArxBox;
typedef struct VexNode {
	VertexType data;
	ArxBox *firstin,*firstout;//分别指向该顶点的第一条入弧和出弧
}VexNode;
typedef struct {
	VexNode xlist[MAX_VERTEX_NUM];//表头向量
	int vexnum,arcnum;//有向图的当前顶点数和弧数
}OLGraph;
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值