int LocatVex(AdjList G, Data v) { int i; for (i = 0;i < G.vexnum;i++) { if (G.vertex[i].data == v) { return i; } } return -1; }实现找到图中结点的下标位置C语言如果用一个图的指针调用该函数,如何实现
时间: 2024-01-11 21:02:35 浏览: 21
如果要用一个图的指针来调用该函数,可以按以下方式实现:
```c
int LocatVex(AdjList *G, Data v) {
int i;
for (i = 0; i < G->vexnum; i++) {
if (G->vertex[i].data == v) {
return i;
}
}
return -1;
}
```
其中,`AdjList *G` 表示一个指向 `AdjList` 类型的指针,`G->vexnum` 表示通过指针访问结构体成员 `vexnum`,`G->vertex[i]` 表示通过指针访问结构体数组 `vertex` 的第 `i` 个元素。
相关问题
修改下列代码,使每行输出后没有空格#include<iostream> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MVNum 100 //最大顶点数 using namespace std; typedef struct ArcNode{ int adjvex; //邻接点域:该边所指向的顶点的位置 int data; //数据域:存储和边相关的信息 struct ArcNode* nextarc; //链域:指向下一条边的指针 }ArcNode; typedef struct VNode{ int data; //顶点结点的数据域 ArcNode *firstarc; //链域:指向第一条依附该顶点的边的指针 }VNode,AdjList[MVNum]; //AdjList表示邻接表类型 typedef struct{ AdjList vertices; int vexnum,arcnum; //图的当前顶点数和边数 }ALGragh; int CreateUDG(ALGragh &G,int vexnum,int arcnum){ //采用邻接表表示法,创建无向图G G.vexnum = vexnum; G.arcnum = arcnum; for(int i=1;i<=vexnum;i++){ G.vertices[i].data = i; G.vertices[i].firstarc = NULL; } for(int k=1;k<=arcnum;k++){ int i,j; cin>>i>>j; ArcNode *p = new ArcNode; p->adjvex = j; p->nextarc = G.vertices[i].firstarc; G.vertices[i].firstarc = p; ArcNode *q = new ArcNode; q->adjvex = i; q->nextarc = G.vertices[j].firstarc; G.vertices[j].firstarc = q; } return OK; } int InsertVex(ALGragh &G){ //在以邻接表形式存储的无向图G上插入顶点v int v; cin>>v; G.vexnum++; G.vertices[G.vexnum].data = v; G.vertices[G.vexnum].firstarc = NULL; return OK; } int PrintGraph(ALGragh G){ //输出图G for(int i=1;i<=G.vexnum;i++){ cout<<G.vertices[i].data<<" "; ArcNode *p = G.vertices[i].firstarc; while(p){ cout<<p->adjvex<<" "; p = p->nextarc; } cout<<endl; } return OK; } int main(){ int n,m; while(cin>>n>>m){ if(n==0 && m==0) break; ALGragh G; CreateUDG(G,n,m); InsertVex(G); PrintGraph(G); } return 0; }
下面是修改后的代码,主要是去掉了输出中的空格:
#include<iostream>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MVNum 100 //最大顶点数
using namespace std;
typedef struct ArcNode{
int adjvex; //邻接点域:该边所指向的顶点的位置
int data; //数据域:存储和边相关的信息
struct ArcNode* nextarc; //链域:指向下一条边的指针
}ArcNode;
typedef struct VNode{
int data; //顶点结点的数据域
ArcNode *firstarc; //链域:指向第一条依附该顶点的边的指针
}VNode,AdjList[MVNum]; //AdjList表示邻接表类型
typedef struct{
AdjList vertices;
int vexnum,arcnum; //图的当前顶点数和边数
}ALGragh;
int CreateUDG(ALGragh &G,int vexnum,int arcnum){ //采用邻接表表示法,创建无向图G
G.vexnum = vexnum;
G.arcnum = arcnum;
for(int i=1;i<=vexnum;i++){
G.vertices[i].data = i;
G.vertices[i].firstarc = NULL;
}
for(int k=1;k<=arcnum;k++){
int i,j;
cin>>i>>j;
ArcNode *p = new ArcNode;
p->adjvex = j;
p->nextarc = G.vertices[i].firstarc;
G.vertices[i].firstarc = p;
ArcNode *q = new ArcNode;
q->adjvex = i;
q->nextarc = G.vertices[j].firstarc;
G.vertices[j].firstarc = q;
}
return OK;
}
int InsertVex(ALGragh &G){ //在以邻接表形式存储的无向图G上插入顶点v
int v;
cin>>v;
G.vexnum++;
G.vertices[G.vexnum].data = v;
G.vertices[G.vexnum].firstarc = NULL;
return OK;
}
int PrintGraph(ALGragh G){ //输出图G
for(int i=1;i<=G.vexnum;i++){
cout<<G.vertices[i].data;
ArcNode *p = G.vertices[i].firstarc;
while(p){
cout<<" "<<p->adjvex;
p = p->nextarc;
}
cout<<endl;
}
return OK;
}
int main(){
int n,m;
while(cin>>n>>m){
if(n==0 && m==0) break;
ALGragh G;
CreateUDG(G,n,m);
InsertVex(G);
PrintGraph(G);
}
return 0;
}
修改#include <iostream> using namespace std; #define MVNum 100 typedef int Status; typedef char VerTexType; typedef int ArcType; typedef int OtherInfo; typedef struct ArcNode{ int adjvex; struct ArcNode *nextarc; OtherInfo info; }ArcNode; typedef struct VNode{ VerTexType data; ArcNode *firstarc; }VNode,AdjList[MVNum]; typedef struct { AdjList vertices; //vertex的复数为vertices int vexnum,arcnum; }ALGraph; int LocateVex(ALGraph G,char u) { /* 初始条件: 图G存在,u和G中顶点有相同特征*/ /* 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 */ for(int i=0;i<G.vexnum;++i){ if(u==G.vertices[i].data){ return i; } } return -1; } Status CreateUDG(ALGraph &G){ int i,j,k; char v1,v2; cin>>G.vexnum>>G.arcnum; for(i=0;i<G.vexnum;++i){ cin>>G.vertices[i].data; G.vertices[i].firstarc=NULL; } for (k=0;k<G.arcnum;++k){ cin>>v1>>v2; i=LocateVex(G,v1); j=LocateVex(G,v2); ArcNode *p1,*p2; p1=new ArcNode;p1->adjvex=j; p1->nextarc=G.vertices[i].firstarc; G.vertices[i].firstarc=p1; p2=new ArcNode;p2->adjvex=i; p2->nextarc=G.vertices[j].firstarc; G.vertices[j].firstarc=p2; } return 0; } int main{ CreateUDG(ALGraph H) return 0; }
在你提供的代码中,有一些错误和不完整的地方。下面是修改后的代码:
```cpp
#include <iostream>
using namespace std;
#define MVNum 100
typedef int Status;
typedef char VerTexType;
typedef int ArcType;
typedef int OtherInfo;
typedef struct ArcNode {
int adjvex;
struct ArcNode* nextarc;
OtherInfo info;
} ArcNode;
typedef struct VNode {
VerTexType data;
ArcNode* firstarc;
} VNode, AdjList[MVNum];
typedef struct {
AdjList vertices; // vertex的复数为vertices
int vexnum, arcnum;
} ALGraph;
int LocateVex(ALGraph G, char u)
{
/* 初始条件: 图G存在,u和G中顶点有相同特征*/
/* 操作结果: 若G中存在顶点u,则返回该顶点在图中位置;否则返回-1 */
for (int i = 0; i < G.vexnum; ++i) {
if (u == G.vertices[i].data) {
return i;
}
}
return -1;
}
Status CreateUDG(ALGraph& G)
{
int i, j, k;
char v1, v2;
cin >> G.vexnum >> G.arcnum;
for (i = 0; i < G.vexnum; ++i) {
cin >> G.vertices[i].data;
G.vertices[i].firstarc = NULL;
}
for (k = 0; k < G.arcnum; ++k) {
cin >> v1 >> v2;
i = LocateVex(G, v1);
j = LocateVex(G, v2);
ArcNode* p1 = new ArcNode;
p1->adjvex = j;
p1->nextarc = G.vertices[i].firstarc;
G.vertices[i].firstarc = p1;
ArcNode* p2 = new ArcNode;
p2->adjvex = i;
p2->nextarc = G.vertices[j].firstarc;
G.vertices[j].firstarc = p2;
}
return 0;
}
int main()
{
ALGraph H;
CreateUDG(H);
return 0;
}
```
在修改后的代码中,我添加了main函数的括号,表示正确的函数定义。同时,我在main函数中创建了一个ALGraph类型的变量H,并且将H作为参数传递给CreateUDG函数。
这样修改后的代码就可以正确编译和运行了。如果还有其他问题,请随时提问。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)