数据结构中邻接矩阵的存储结构类型的讨论

wingrez 2019-09-02 05:34:49
在《数据结构(C语言版)严蔚敏著》P160中,有这样一段话:“由于图的结构比较复杂,任意两个顶点之间都可能存在联系,因此无法以数据元素在存储区中的物理位置来表示元素之间的关系,即图没有顺序映像的存储结构,但可以借助数组的数据类型表示元素之间的关系。”
接着,书中给出了邻接矩阵的定义:

#define INFINITY INT_MAX //最大值
#define MAX_VERTEX_NUM 20 //最大顶点个数
typedef enum{DG, DN, UDG, UDN} GraphKind; //{有向图,有向网,无向图,无向网}
typedef struct ArcCell{
VRType adj; //VRType是顶点关系类型。对无权图,用1或0表示相邻否;对带权图,则为权值类型。
InfoType *info; //该弧相关信息的指针
}ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct{
VertexType vexs[MAX_VERTEX_NUM]; //顶点向量
AdjMatrix arcs; //邻接矩阵
int vexnum, arcnum; //图的当前顶点数和弧数
GraphKind kind; //图的种类标志
}MGraph;


除了上述的定义外,常用的还有一种:

#define MaxVertexNum 100 //顶点数目的最大值
typedef char VertexType; //顶点的数据类型
typedef int EdgeType; //带权图中边上权值的数据类型
typedef struct{
VertexType Vex[MaxVertexNum]; //顶点表
EdgeType Edge[MaxVertexNum][MaxVertexNum]; //邻接矩阵,边表
int vexnum, arcnum; //图的当前顶点数和弧数
}MGraph;


尽管书中声称图没有顺序表示,但还是有些资料中认为邻接矩阵属于一种顺序存储结构。

根据顺序存储结构的特点:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。我是认可严蔚敏老师的。

那么邻接矩阵是否属于一种顺序存储结构呢。大家谈谈自己的看法吧。

...全文
199 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wingrez 2019-09-05
  • 打赏
  • 举报
回复
本帖无满意答案结贴。如果您对这个问题感兴趣,欢迎来与我讨论。
赵4老师 2019-09-03
  • 打赏
  • 举报
回复
电脑内存或文件内容或传输内容只是一个一维二进制字节数组及其对应的二进制地址; 人脑才将电脑内存或文件内容或传输内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……
wingrez 2019-09-02
  • 打赏
  • 举报
回复
引用 3 楼 赵4老师 的回复:
我的意思是不谈内存布局或者文件布局,谈论“是否顺序存储结构”是浪费生命。

哈哈,在发帖之前我就考虑过这个问题有没有意义,但是秉着对计算机理论认真负责的态度,避免误人子弟的行为发生,我觉得还是有必要探讨一下。况且数据结构这门课程对于计算机专业学生极其重要,难免会出现像我这样存在这种疑问的人,在我查阅了相关资料后,发现这个问题说法不一,而且针锋相对,这就令人很纠结了。
赵4老师 2019-09-02
  • 打赏
  • 举报
回复
我的意思是不谈内存布局或者文件布局,谈论“是否顺序存储结构”是浪费生命。
wingrez 2019-09-02
  • 打赏
  • 举报
回复
引用 1 楼 赵4老师 的回复:
为什么要有数据结构这个东东?
因为要将现实世界或者抽象理论中的各种数据保存在计算机外存(光盘、硬盘、U盘……)或内存(ROM、RAM、SRAM……)里面的二进制字节数组中。
然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。

又见面了,不过涉嫌答非所问,刷经验行为,举报了
赵4老师 2019-09-02
  • 打赏
  • 举报
回复
为什么要有数据结构这个东东? 因为要将现实世界或者抽象理论中的各种数据保存在计算机外存(光盘、硬盘、U盘……)或内存(ROM、RAM、SRAM……)里面的二进制字节数组中。 然后让CPU这个只会执行预先保存好的加减乘除移位条件转移……等机器指令的家伙按照人的意志去处理这些数据。至于具体如何处理就是所谓算法。

64,647

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧