正在加载图片...
∥.节省篇幅,本题只给出 Insert_Arc算法其余算法请自行写出 Status Insert Arc( ALGraph&G, char v, char w)/在邻接表表示的图G上插入边(v,w) if(LOcate Vex(G, v))<0) return ERROR; if(Locate Vex(G, w)0) return ERROR p=(ArcNode*)malloc(sizeof(ArcNode)); >adjvex=j, p->nextarc=NULL if(!G vertices[i]. firstarc)Gvertices[i]. firstarc=p else for(q=Gvertices[]. firstarc: q->q->nextarc q=q->nextarc) fq→> adnex=j) return error;∥边已经存在 q->nextarc=p; G arcum++. eturn oK 3//nsert Arc 7.17 ∥.节省篇幅,本题只给出较为复杂的 Delete vex算法.其余算法请自行写出 Status Delete Vex( OGRaph& G. char v∥在十字链表表示的图G上删除顶点v if((m=Locate Vex(G, v)0) return ERROR; n=G. vexnum for(i=0in;计+)/删除所有以v为头的边 if(G xlist[] firstin-> tailvex==m)∥如果待删除的边是头链上的第一个结点 FG. xlist]. firstin G xlist[ firstin=q->hlink free(q); Garcum else/否则 for(p=Gxlist[]. firstin p&&p-hlink->tailvexl=m p=p-hlink) qFE p->hlink=q->hlink free(q): G.arcnum-; i/else//为节省篇幅,本题只给出 Insert_Arc 算法.其余算法请自行写出. Status Insert_Arc(ALGraph &G,char v,char w)//在邻接表表示的图G上插入边(v,w) { if((i=LocateVex(G,v))<0) return ERROR; if((j=LocateVex(G,w))<0) return ERROR; p=(ArcNode*)malloc(sizeof(ArcNode)); p->adjvex=j;p->nextarc=NULL; if(!G.vertices[i].firstarc) G.vertices[i].firstarc=p; else { for(q=G.vertices[i].firstarc;q->q->nextarc;q=q->nextarc) if(q->adjvex==j) return ERROR; //边已经存在 q->nextarc=p; } G.arcnum++; return OK; }//Insert_Arc 7.17 //为节省篇幅,本题只给出较为复杂的 Delete_Vex 算法.其余算法请自行写出. Status Delete_Vex(OLGraph &G,char v)//在十字链表表示的图 G 上删除顶点 v { if((m=LocateVex(G,v))<0) return ERROR; n=G.vexnum; for(i=0;i<n;i++) //删除所有以 v 为头的边 { if(G.xlist[i].firstin->tailvex==m) //如果待删除的边是头链上的第一个结点 { q=G.xlist[i].firstin; G.xlist[i].firstin=q->hlink; free(q);G.arcnum--; } else //否则 { for(p=G.xlist[i].firstin;p&&p->hlink->tailvex!=m;p=p->hlink); if(p) { q=p->hlink; p->hlink=q->hlink; free(q);G.arcnum--; } }//else
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有