C 十字链表

简介:

C 的十字链表实现


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


#define MAX 20/*顶点的个数*/


typedef struct ArcBox{
	int tailvex,headvex;/*弧的尾和头顶点位置*/
	struct ArcBox *hlink,*tlink;/*分别为弧头相同弧尾相同的弧的链域*/
}ArcBox;


typedef struct type{	
	char r[3];/*顶点值*/
}VertexType;


typedef struct VexNode{
	VertexType data;
	ArcBox *firstin,*firstout;/*分别指向该顶点第一条入弧和出弧*/
}VexNode;



typedef struct{
	VexNode xlist[MAX];/*表头向量*/
	int vexnum,arcnum;/*有向图的当前顶点数和弧数*/
}OLGraph;



int Locate(OLGraph G,VertexType v1)/*确定v1在图顶点中的位置*/
{ 
	int i;
	for(i=0;i<G.vexnum;i++)
		if(strcmp(v1.r,G.xlist[i].data.r)==0) return i;
		return -1;
}



int CreateDG(OLGraph *G)
{
	int i,k,j;
	VertexType v1,v2;
	ArcBox *p;
	printf("分别输入顶点和弧的个数:");
	scanf("%d%d",&G->vexnum,&G->arcnum);
	printf("输入顶点的值: ");
	
	
	for(i=0;i<G->vexnum;i++)/*构造表头向量*/
	{ 
		scanf("%s",&G->xlist[i].data);
		G->xlist[i].firstin=NULL;G->xlist[i].firstout=NULL;/*初始化指针*/
	}
	
	
	for(k=0;k<G->arcnum;++k)/*输入各弧并构造十字链表*/
	{
		printf("输入第 %d 的两个点(方向) :",k+1);
		scanf("%s%s",v1.r,v2.r);
		i=Locate(*G,v1);j=Locate(*G,v2);/* v1和v2 的位置*/
		p=(ArcBox *)malloc(sizeof(ArcBox));/*申请弧空间*/
		p->tailvex=i;p->headvex=j;/*对弧结点赋值*/
		p->hlink=G->xlist[j].firstin;
		p->tlink=G->xlist[i].firstout;
		G->xlist[j].firstin=G->xlist[i].firstout=p;/*完成在入弧和出弧链头的插入*/
	}
	return 1;
}
void main()
{ 
	OLGraph G;
	int i;
	ArcBox *q;
	CreateDG(&G);
	printf("十字邻接表为:\n");
	
	for(i=0;i<G.vexnum;i++)/*输出邻接表*/
	{
		printf(" *%s* ",G.xlist[i].data.r);
		q=G.xlist[i].firstout;
		
		while(q) 
		{
			printf(" *%s %s*",G.xlist[q->headvex].data.r,G.xlist[q->tailvex].data.r);
			q=q->tlink;
		}
		
		printf("\n     ");
		q=G.xlist[i].firstin;
		
		while(q)
		{
			printf(" *%s %s*",G.xlist[q->headvex].data.r,G.xlist[q->tailvex].data.r);
			q=q->hlink;
		}
		printf("\n");
	}
}
/*书第165页*/
/*可输入4 7
1 2 3 4
1 3
1 2
3 1
3 4
4 1
4 2
4 3*/


相关文章
|
23天前
|
机器学习/深度学习 SQL
环形链表详解
环形链表详解
|
2月前
|
索引
07_环形链表
07_环形链表
|
6月前
|
存储
环形链表题
环形链表题
35 0
|
索引
【链表OJ】相交链表 环形链表1
【链表OJ】相交链表 环形链表1
|
6月前
|
存储 算法 C语言
十字链表法,十字链表压缩存储稀疏矩阵详解
十字链表法,十字链表压缩存储稀疏矩阵详解
138 0
十字链表法,十字链表压缩存储稀疏矩阵详解
|
6月前
|
C++
相交链表(C++)
相交链表(C++)
42 0
|
6月前
|
C++ 索引
环形链表(C++)
环形链表(C++)
42 0
【链表】160. 相交链表
【链表】160. 相交链表
|
6月前
|
算法 程序员
【算法训练-链表 三】【特殊链表】环形链表、环形链表II、回文链表、相交链表
【算法训练-链表 三】【特殊链表】环形链表、环形链表II、回文链表、相交链表
52 0