c语言版数据结构图的一些基本操作函数如下,有三个地方不了解,请各位帮帮忙?
发布网友
发布时间:2022-04-29 07:33
我来回答
共2个回答
热心网友
时间:2023-10-13 05:21
(1)问题三:
i=LocateVex(*G,va);
j=LocateVex(*G,vb);
*G不是指针,是指针G所指对象,就是ALGraph类型。程序中多处使用变量G,但是不同的地方,含义不同。在void CreateGraph(ALGraph *G)里面,G是一个指针,因此,引用其所指对象,要用*G。其他情况下,ALGraph G,G不是指针。
(2)第一:这个void DFSTraverse(ALGraph G,void(*print)(char*)) 为什么不能直接调用print函数,像调用DFS函数一样?可以的,使用函数指针是为以后任意扩展输出程序,以适应不同需要,并且可以作为参数传递。
(3)第二:FirstAdjVex(G,G.vertices[v].data)为什么要用顶点,用了之后又取位置,而不直接用位置,会有什么漏洞吗?不会
int FirstAdjVex(ALGraph G,VertexType v)
{
ArcNode *p;
int v1;
v1=LocateVex(G,v);
p=G.vertices[v1].firstarc;
if(p)
return p->adjvex;
else
return -1;
}
利用已经定义的定位函数LocateVex直接定位顶点v,然后直接读取其firstarc,很自然的过程。
热心网友
时间:2023-10-13 05:21
以我目前的水平只能回答你第三个问题。
直接用G当然也可以,但是因为C语言按值传递,而G应该是一个挺大的结构体,将其复制一遍应当有较大开销;如果使用指针做参数,那么就省去了复制整个结构体的开销,而只用复制一个指针(相当于无符号整数)。按指针传递在很多情况下都被用来降低传值开销的。
热心网友
时间:2023-10-13 05:21
(1)问题三:
i=LocateVex(*G,va);
j=LocateVex(*G,vb);
*G不是指针,是指针G所指对象,就是ALGraph类型。程序中多处使用变量G,但是不同的地方,含义不同。在void CreateGraph(ALGraph *G)里面,G是一个指针,因此,引用其所指对象,要用*G。其他情况下,ALGraph G,G不是指针。
(2)第一:这个void DFSTraverse(ALGraph G,void(*print)(char*)) 为什么不能直接调用print函数,像调用DFS函数一样?可以的,使用函数指针是为以后任意扩展输出程序,以适应不同需要,并且可以作为参数传递。
(3)第二:FirstAdjVex(G,G.vertices[v].data)为什么要用顶点,用了之后又取位置,而不直接用位置,会有什么漏洞吗?不会
int FirstAdjVex(ALGraph G,VertexType v)
{
ArcNode *p;
int v1;
v1=LocateVex(G,v);
p=G.vertices[v1].firstarc;
if(p)
return p->adjvex;
else
return -1;
}
利用已经定义的定位函数LocateVex直接定位顶点v,然后直接读取其firstarc,很自然的过程。
热心网友
时间:2023-10-13 05:21
以我目前的水平只能回答你第三个问题。
直接用G当然也可以,但是因为C语言按值传递,而G应该是一个挺大的结构体,将其复制一遍应当有较大开销;如果使用指针做参数,那么就省去了复制整个结构体的开销,而只用复制一个指针(相当于无符号整数)。按指针传递在很多情况下都被用来降低传值开销的。
热心网友
时间:2023-10-13 05:21
(1)问题三:
i=LocateVex(*G,va);
j=LocateVex(*G,vb);
*G不是指针,是指针G所指对象,就是ALGraph类型。程序中多处使用变量G,但是不同的地方,含义不同。在void CreateGraph(ALGraph *G)里面,G是一个指针,因此,引用其所指对象,要用*G。其他情况下,ALGraph G,G不是指针。
(2)第一:这个void DFSTraverse(ALGraph G,void(*print)(char*)) 为什么不能直接调用print函数,像调用DFS函数一样?可以的,使用函数指针是为以后任意扩展输出程序,以适应不同需要,并且可以作为参数传递。
(3)第二:FirstAdjVex(G,G.vertices[v].data)为什么要用顶点,用了之后又取位置,而不直接用位置,会有什么漏洞吗?不会
int FirstAdjVex(ALGraph G,VertexType v)
{
ArcNode *p;
int v1;
v1=LocateVex(G,v);
p=G.vertices[v1].firstarc;
if(p)
return p->adjvex;
else
return -1;
}
利用已经定义的定位函数LocateVex直接定位顶点v,然后直接读取其firstarc,很自然的过程。
热心网友
时间:2023-10-13 05:21
以我目前的水平只能回答你第三个问题。
直接用G当然也可以,但是因为C语言按值传递,而G应该是一个挺大的结构体,将其复制一遍应当有较大开销;如果使用指针做参数,那么就省去了复制整个结构体的开销,而只用复制一个指针(相当于无符号整数)。按指针传递在很多情况下都被用来降低传值开销的。