数据结构知识框架图

数据结构知识框架图_第1张图片


数据结构描述:

#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;


你可能感兴趣的:(Data,Structure,C,Software,designer,exam)