图的存储方式学习笔记

结点

结点由数据域和指针域组成
结点只含有一个指针域组成的就是单链表

结点的代码实现就是结构体,数据域里面存储的是结点的数据,指针域存储的就是结构体指针类型的变量。
图形抽像表达数据元素与数据元素之间的逻辑关系如下:
在这里插入图片描述在这里插入图片描述
链表一定要有一个头指针也就是链表第一个结点的地址,这样我们就可以找到链表。

在这里插入图片描述
头结点的存在就是为了同意代码格式,否则就会单独出现一个指针,如果用结点就可以用结点的数据域去存储其他信息并统一格式。

结构体

/*先定义几类结构体*/

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; /*结构体指针指向结构体变量的地址首地址*/ 


图的表示

图的表示(建立)有两种方法:

  1. 邻接矩阵:A(i,j)=1表示i,j存在一条边,顺序存储结构,空间复杂度O(n^2),稠密图。
  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/

发布了425 篇原创文章 · 获赞 59 · 访问量 15万+

猜你喜欢

转载自blog.csdn.net/qq_21950671/article/details/103976388