您的位置:首页 > 理论基础 > 数据结构算法

数据结构知识框架图

2015-03-29 20:33 375 查看


数据结构描述:

#define MAX 50
typedef int ElemType;

//线性表:顺序
typedef struct
{
//表中数据个数
int count;
ElemType data[MAX];
}ArrayList;

//线性表:链式,带头节点
typedef struct Node
{
ElemType data;
struct Node* next;
}LinkList;

//栈:顺序
typedef struct
{
//int count; //栈中元素的个数
int top;   //栈顶的index,栈空时为-1
ElemType data[MAX];
}SqStack;

//栈:链式,不要头节点,直接在链表头部进行操作
typedef struct Node
{
ElemType data;
struct Node* next;
}LiStack;

//队列:顺序,采用循环数组,空出一个不放元素/设置一个flag表示是否队满/记录队列中元素个数
typedef struct
{
//int count; //队列中元素的个数
int front,rear;   //头指针和尾指针
ElemType data[MAX];
}SqQueue;

//队列:链式,最好使用循环链表
typedef struct
{
LinkNode* first,* last;

}LiQueue;

//二叉树:孩子兄弟表示法
typedef struct Node
{
struct Node* lchild;
struct Node* rchild;
ElemType data;
}BTree;

//图:
/*
邻接矩阵:
1.无向图的邻接矩阵是对称矩阵,可以只存三角矩阵
2.不带权的有向图的邻接矩阵是稀疏矩阵,可以用三元组标识
3.无向图:邻接矩阵的第i行非0元素的个数是第i个顶点的度(对于有向图,是出度)
4.易于确定顶点间是否有边,但是确定总边数时,要按行和列进行扫描,复杂。
*/
typedef struct
{
int no;  //定点编号
char* info; //顶点其他信息
} VertexType;  //顶点类型

typedef struct
{
int edges[MAX][MAX];   	//邻接矩阵的边数组
int n,e;			  	//顶点数,边数
VertexType vxs[MAX];	//存放顶点信息
} MGraph;

//顺序分配与链式分配的结合,邻接表
/*
邻接表:
1.表示不唯一
2.n,e的无向图需要存储n个顶点和2*e个边,对于稀疏图,邻接表更省空间
3.第i个链表的长度是顶点i的度。
4.有向图中只存储了以顶点为起点的边,不宜找到指向该顶点的边,可以设计逆邻接表,保存指向该顶点的边。
*/
typedef struct ANode
{
int adjvex;				///该边的终点位置
struct ANode* nextarc;	//指向下一条边的指针
char* info;				//边的信息
} ArcNode;

typedef struct VNode
{
char* data;         //顶点信息
ArcNode* firstarc;  //指向第一条边
}VNode;

typedef VNode AdjList[MAX];
typedef struct
{
AdjList adjlist;  	//邻接表
int n,e; 			//顶点数,边数
} ALGraph;

//并查集
typedef struct node
{
int data;   //对应此人的编号
int rank;   //节点对应的秩
int parent; //节点对应的双亲节点
} UFSTree;

//哈夫曼树:其实是一种贪心思想,每次选最小的两个构成一个根
typedef struct{
char data;
double weight;
int parent;
int lchild;
int rchild;
}HTNode;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: