图的十字链表的创建

图的十字链表。
#include <stdio.h>
#include <malloc.h>
typedef struct EdgeNode 
{
 	int tailvex;      // 弧的起点下标 
	int headvex;      // 弧的终点下标 
 	struct EdgeNode *headlink,*taillink;    
}EdgeNode;
typedef struct VertexNode
{
 	int data;    /*顶点信息*/
 	EdgeNode *firstin,*firstout;   
}VertexNode;
typedef struct
{
 	VertexNode vertex[100];   
 	int vexnum,edgenum;   /*图的顶点数和弧数*/
}GraphAdjList;    
void  CrtOrthList(GraphAdjList *G)
{
 	int i,j,k;
 	EdgeNode *p;
 	printf("请输入图的顶点个数和弧的个数:");
 	scanf("%d%d",&G->vexnum,&G->edgenum);
 	for(i = 0; i<G->vexnum; i++) 
 	{ 	
  		printf("请输入下标为%d的顶点信息:",i);
  		scanf("%d",&G->vertex[i].data);
  		G->vertex[i].firstin = NULL;
  		G->vertex[i].firstout = NULL;
 	}
 	for(k=0;k<G->edgenum;k++) 
 	{
  		printf("请输入第%d条弧的两个顶点下标:",k+1);
  		scanf("%d%d",&i,&j);
  		
  		p = (EdgeNode*)malloc(sizeof(EdgeNode));
  		p->tailvex = i;
  		p->headvex = j;
  		
  		p->taillink = G->vertex[i].firstout;
  		G->vertex[i].firstout = p;
  		
  		p->headlink = G->vertex[j].firstin;
  		G->vertex[j].firstin = p;
    }
    printf("*****顶点的入度表示为******\n"); 
    for(i = 0;i < G->vexnum;i++)
    {
    	printf("以下标为%d的顶点为弧头的顶点下标有:",i);
    	while(G->vertex[i].firstin != NULL)
    	{
    		printf("< %d,%d > ",G->vertex[i].firstin->tailvex,i);
    		G->vertex[i].firstin = G->vertex[i].firstin->headlink;
		}
		printf("\n");
	}
	printf("******顶点的出度表示为******\n");
	for(i = 0;i < G->vexnum;i++)
    {
    	printf("以下标为%d的顶点为弧尾的顶点下标有:",i);
    	while(G->vertex[i].firstout != NULL)
    	{
    		printf("< %d,%d > ",i,G->vertex[i].firstout->headvex);
    		G->vertex[i].firstout = G->vertex[i].firstout->taillink;
		}
		printf("\n");
	}
	
}

int main()
{
 	GraphAdjList G;
 	CrtOrthList(&G);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值