一般来说,知道了各种存储结构的结构体,或者各种算法(其实算法是在各种特定的存储结构下实现)所需的结构体,所以我觉得记住或者牢记各种场合,各种情形下所需要的存储结构的结构体,对算法的创建和表达就会轻松和容易许多。
一、顺序存储
1、 顺序表
#defineMAXSIZE 100
typedef int datatype;
typedef struct
{datatype a[MAXSIZE];
int size;
}sequence_list;
2、栈(顺序栈)
#defineMAXSIZE 100
typedef int datatype;
typedef struct
{datatype a[MAXSIZE];
int top;
}sequence_stack;
3、队列(顺序队列,顺序循环队列)
#defineMAXSIZE 100
typedef int datatype;
typedef struct
{datatype a[MAXSIZE];
int front;
intrear;
}sequence_queue;
其中循环队列判满条件:(rear+1)%MAXSIZE=front;判空条件:rear=front
二、链式存储
1、单链表(带头结点的单链表,循环单链表)
typedef int datatype;
typedef struct link_node
{datatype info;
struct link_node *next;
}node;
2、双链表
typedef int datatype;
typedef struct dlink_node
{datatype info;
struct link_node *llink,*rlink;
}dnode;
3、链式栈
typedef int datatype;
typedef struct link_node
{datatype info;
struct link_node *next;
}node;
node*top;
4、链式队列
typedef int datatype;
typedef struct link_node
{datatype info;
struct link_node *next;
}node;
typedef struct
{node *front,*rear;
}queue;
三、字符串
1、顺序串:模式匹配(朴素的模式匹配算法,KMP算法)
#defineMAXSIZE 100
typedef struct
{ charstr[MAXSIZE];
int length;
}seqstring;
2、链式串
typedef struct node
{char data;
struct node *next;
}linkstrnode;
typedef linkstrnode *linkstring;
3、N维数组:行优先存储,列优先存储
(三维数组)
typedef int datatype;
typdef struct
{datatype *base;//数组存储区的首地址指针
int index[3];//存放三维数组各维的长度
int c[3]; //存放三维数组各维的ci值
}array;
四、树
1、双亲表示法
#defineMAXSIZE 100
typedef char datatype;//节点值的类型
typedef struct node//结点类型
{datatype data;
int parent;//结点双亲的下标
}node;
typedef struct tree
{ node treelist[MAXSIZE];//存放结点的数组
int length,root;//树中实际所含结点的个数,根节点的位置
}tree;//树的类型
2、孩子表示法(指针方式)
#definem 3//树的度数
typedef char datatype;//节点值的类型
typedef struct node
{datatype data;
struct node *child[m];//指向子女的指针数组
}node,*tree;
tree *node;
3、孩子表示法(数组方式)
#definem 3//树的度数
#define MAXSIZE 20//存放树结点的数组大小
typedef char datatype;//结点值的类型
typedef struct node//结点类型
{datatype data;
int child[m];
}treenode;
treenode tree[MAXSIZE];//存储树结点的数组
int root;//根节点的下标
int length;//树中实际所含结点的个数
4、孩子表示法(链式方式)
#define MAXSIZE 50
typedef char datatype;//结点值的类型
typedef struct chnode//孩子结点的类型
{int child;
struct chnode *next;
}chnode,*chpoint;
typedef struct//树中每个结点的类型
{datatype data;
chpointfirstchild;//指向第一个子女结点的指针
}node;
typedef struct//树的类型
{ node treelist[MAXSIZE];
int length,root;//树中实际所含结点的个数,根结点的位置
}tree;
5、孩子兄弟表示法
typedef char datatype;//结点值的类型
typedef struct node//孩子结点的类型
{datatype data;
struct node *firstchild,*rightsibling;
}node,*pnode;
pnode root;
6、树的括号表示
7、树的层号表示
五、二叉树
1、完全二叉树
#define MAXSIZE 20
typedef char datatype;//结点值的类型
datatype tree[MAXSIZE];
int n;//树中实际所含结点的个数
2、一般二叉树(顺序存储)
#define MAXSIZE 20
typedef char datatype;//结点值的类型
typedef struct
{datatype data;
int lchild,rchild;//存放左,右子女的下标
int parent;//存放双亲结点的下标(当需要带双亲指示时声明)
}node;
node tree[MAXSIZE];
intn;//树中实际所含结点的个数
introot;//存放根结点的下标
3、链式存储
typedef char datatype;//结点值的类型
typedef struct node
{datatype data;
structnode *lchild,*rchild;//存放左,右子女的下标
int *parent;//指向双亲结点的指针(当需要带双亲指示时声明)
}bintnode;
typedef bintnode *bintree;
bintree root;//指向二叉树根节点的指针
六、图
1、邻接矩阵类型定义
#define FINITY 5000//用5000表示无穷大
#define M 20//最大顶点数
typedef char vertextype;//顶点值的类型
typedef int edgetype;//权值类型
typedef struct
{vertextype vex[M];//顶点信息域
edgetype deges[M][M];//邻接矩阵
int n,e;//图中顶点总数,边数
}Mgraph;
2、邻接表类型定义
#define M 20//最大顶点数
typedef char datatype;//顶点信息数据类型
typedef struct node//边表结点
{ int adjvex;//邻接点
struct node *next;
}edgenode;
typedef struct vnode//头结点类型
{datatype vertex;//顶点信息
edgenode *firstedge;//邻接链表 头指针
}vertexnode;
typedef struct//邻接表类型
{vertexnode adjlist[M];//存放头结点的顺序表
int n,e;//顶点数,边数
}linkedgraph;
七、检索
1、顺序检索,二分法检索(存储有序)
#defineMAXSIZE 100
typedef int datatype;
typedef struct
{datatype a[MAXSIZE];
int len;
}sequence;
2、分块检索
#defineMAXSIZE 100
typedef int datatype;
typedef struct
{datatype a[MAXSIZE];
int len;
}sequence;
typedef struct
{datatype key;//块中最大值
int address;//分界点
}indexnode;
3、二叉排序树
typedef int datatype;//结点值的类型
typedef struct node
{datatype data;
structnode *lchild,*rchild;
}bsnode;
typedef bsnode *bstree;
4、Huffman树
typedef struct node
{int data;//权值
structnode *lchild,*rchild,*next;
}hufnode;
typedef hufnode *linkhuf;
八、排序
#defineMAXSIZE 100//文件中记录个数的最大值
typedef int keytype;//排序码类型
typedef struct
{keytype key;
intother;//还可定义记录中除了排序码外的其他域
}recordtype;
typedef struct
{recordtype r[MAXSIZE+1];
intlength;//待排序文件中记录的个数
}table;