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

今天我们用c语言将下面的图用代码表示出来。
C语言实现图的十字链表(完整代码)_第1张图片
像下图那样先定义一些结构体
C语言实现图的十字链表(完整代码)_第2张图片

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
#include

#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;ipeak;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;ipeak;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;iedge;i++)
	{
	    fflush(stdin);
		printf("请输入,中间用英文逗号隔开:");
		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%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;
}

运行结果如下:
C语言实现图的十字链表(完整代码)_第3张图片

你可能感兴趣的:(数据结构)