//此代码是数据结构的原始模板,可以刚接触或考研时借鉴下,不适于刷题
#include<stdio.h>
#include<malloc.h>
#define max 20
typedef struct arcnod
{
int tailvex,headvex;
struct arcnod *hlink,*tlink;
}*arcnode,arcnode1;
typedef struct vertexnode
{
int data,x1,x2;
arcnode1 *firstin,*firstout;
}vertexnode;
typedef struct
{
vertexnode vertex[max];
int vexnum,arcnum;
}*orthlist,orthlist1;
int find(orthlist &g,int x)
{
int x1;
for(int i=0;i<g->vexnum;i++)
{
if(g->vertex[i].data==x)
{
x1=i;
break;
}
}
return x1;
}
void crtorthlist(orthlist &g)
{
int x1,x2;
arcnode p;
printf("请输入最大顶点个数和弧的最大条数: ");
scanf("%d%d",&g->vexnum,&g->arcnum);
printf("请输入各顶点的值: ");
for(int i=0;i<g->vexnum;i++)
{
scanf("%d",&g->vertex[i].data);
g->vertex[i].firstin=NULL;
g->vertex[i].firstout=NULL;
}
for(int k=0;k<g->arcnum;k++)
{
printf("请输入两个顶点1,2,表示顶点1指向2: ");
scanf("%d%d",&x1,&x2);
x1=find(g,x1);
x2=find(g,x2);
p=(arcnode)malloc(sizeof(arcnode1));
p->tailvex=x1;
p->headvex=x2;
p->tlink=g->vertex[x1].firstout;
g->vertex[x1].firstout=p;
p->hlink=g->vertex[x2].firstin;
g->vertex[x2].firstin=p;
}
}
void finding(orthlist &g,int n)
{
int t1=0,t2=0;
int n1=n;
n=find(g,n);
arcnode q,q1;
q=g->vertex[n].firstin;
while(q!=NULL)
{
t1++;
q=q->hlink;
}
q1=g->vertex[n].firstout;
while(q1!=NULL)
{
t2++;
q1=q1->tlink;
}
printf("结点%d的入度为%d,出度为%d,度为%d\n",n1,t1,t2,t1+t2);
}
int main()
{
orthlist g;
g=(orthlist)malloc(sizeof(orthlist1));
crtorthlist(g);
printf("请输入结点的值,求出其的入度,出度,和度: ");
int n;
scanf("%d",&n);
finding(g,n);
return 0;
}
十字链表求顶点的度(有向图)
最新推荐文章于 2024-09-15 14:54:59 发布