?? 習題-30.c
字號:
//本程序只給出了算法思想
//讀者可以自己完善本程序
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
}//for
for(i=0;i<n;i++) //刪除所有以v為尾的邊
{
if(G.xlist[i].firstout->headvex==m) //如果待刪除的邊是尾鏈上的第一個結點
{
q=G.xlist[i].firstout;
G.xlist[i].firstout=q->tlink;
free(q);G.arcnum--;
}
else //否則
{
for(p=G.xlist[i].firstout;p&&p->tlink->headvex!=m;p=p->tlink);
if(p)
{
q=p->tlink;
p->tlink=q->tlink;
free(q);G.arcnum--;
}
}//else
}//for
for(i=m;i<n;i++) //順次用結點m之后的頂點取代前一個頂點
{
G.xlist[i]=G.xlist[i+1]; //修改表頭向量
for(p=G.xlist[i].firstin;p;p=p->hlink)
p->headvex--;
for(p=G.xlist[i].firstout;p;p=p->tlink)
p->tailvex--; //修改各鏈中的頂點序號
}
G.vexnum--;
return OK;
}//Delete_Vex
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -