C语言实现图的十字链表(完整代码)

今天我们用c语言将下面的图用代码表示出来。

像下图那样先定义一些结构体
在这里插入图片描述

typedef struct  Bow			//定义弧
{
	char head,tail;

	struct Bow *hlink,*tlink;
}Bow;

typedef struct FirstNode		//定义头结点
{
	char data;

	Bow *firIn;
	Bow *firOut;
}FirstNode;

typedef struct			//记录顶点的数量和弧的数量,先定义100顶点
{
	FirstNode list[100];

	int peak,edge;
}total;

完整代码如下:

#include<stdio.h>
#include<stdlib.h>

#define ERROR 0

typedef struct  Bow
{
	char head,tail;

	struct Bow *hlink,*tlink;
}Bow;

typedef struct FirstNode
{
	char data;

	Bow *firIn;
	Bow *firOut;
}FirstNode;

typedef struct
{
	FirstNode list[100];

	int peak,edge;
}total;

int LocalBow(char data,total *G)				//查询顶点的位置
{
	int i;
	for(i=0;i<G->peak;i++)
	{
		if(G->list[i].data==data)
		{
			return i;
		}
	}
	return ERROR;
}

void create(total *G)							//创建十字链表
{
	char x,y;int k,j,i;
	printf("请输入图的顶点和弧的数量:");
	scanf("%d %d",&G->peak,&G->edge);
	for(i=0;i<G->peak;i++)
	{
		fflush(stdin);
		printf("请输入第%d个顶点的值:",i+1);
		scanf("%c",&G->list[i].data);
		G->list[i].firIn=G->list[i].firOut=NULL;
	}
	for(i=0;i<G->edge;i++)
	{
	    fflush(stdin);
		printf("请输入<vi,vj>,中间用英文逗号隔开:");
		scanf("%c,%c",&x,&y);

		Bow *R=(Bow *)malloc(sizeof(Bow));
		k=LocalBow(x,G);
		j=LocalBow(y,G);
		R->head=x;
		R->tail=y;
		R->hlink=G->list[j].firIn;
		R->tlink=G->list[k].firOut;
		G->list[j].firIn=R;
		G->list[k].firOut=R;
	}
}
int main()
{
	total G;
	Bow *t;
	create(&G);
	int i;
	for(i=0;i<G.peak;i++)
	{
		printf("%c顶点出度情况为:\n",G.list[i].data);
		t=G.list[i].firOut;
		if(!t)	printf("无");
		while(t)
		{
			printf("%c->%c ",t->head,t->tail);
			t=t->tlink;
		}
		printf("\n");
		t=G.list[i].firIn;
		printf("%c顶点入度情况为:\n",G.list[i].data);
		if(!t)		printf("无");
		while(t)
		{
			printf("%c->%c ",t->head,t->tail);
			t=t->hlink;
		 }
		 printf("\n");
	}
	return 0;
}

运行结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值