数据结构——结构体篇

第二章 线性表

  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;
发布了33 篇原创文章 · 获赞 5 · 访问量 685

猜你喜欢

转载自blog.csdn.net/u013140841/article/details/103823731