结点
结点由数据域和指针域组成
结点只含有一个指针域组成的就是单链表
结点的代码实现就是结构体,数据域里面存储的是结点的数据,指针域存储的就是结构体指针类型的变量。
图形抽像表达数据元素与数据元素之间的逻辑关系如下:
链表一定要有一个头指针也就是链表第一个结点的地址,这样我们就可以找到链表。
头结点的存在就是为了同意代码格式,否则就会单独出现一个指针,如果用结点就可以用结点的数据域去存储其他信息并统一格式。
结构体
/*先定义几类结构体*/
struct str{
int a;
int b;
}str1;
/*这是第一类结构体的形式,有结构体名,有结构体变量*/
struct str2{
int a;
int b;
};
/* 这是第二类结构体的形式,有结构体名,无结构体变量 */
typedef struct {
int a;
int b;
}STR3;
/* 这是第三类结构体的形式,把结构体重定义为STR3 */
typedef struct str4{
int a;
int b;
}STR4;
/*这是第四类结构体的形式,把结构体重定义为STR4,还有结构体名称*/
struct str *p;
p = &str1; /*结构体指针指向结构体变量的地址首地址*/
图的表示
图的表示(建立)有两种方法:
- 邻接矩阵:A(i,j)=1表示i,j存在一条边,顺序存储结构,空间复杂度O(n^2),稠密图。
- 邻接表:只记录存在的边,邻接表是数组(Vector)与链表(List)相结合的数据结构, 稀疏图。
无向图的邻接表是这样的,邻接表有两个部分,一个是顶点表,一个是边表。
顶点表长这样
无向图的邻接表存储例子
在代码层面通过指针向后移动,来实现链表。
结构体指针
循环是有去无回,而递归则是有去有回(因为存在终止条件)。
参考:https://www.cnblogs.com/yellowgg/p/7875459.html
https://pushy.site/categories/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/page/2/