无向邻接表的创建与显示

#include<stdio.h>
#include<stdlib.h>
#define Max 100
//邻接点的最大个数
typedef struct Edge{
	int adjPoint;//邻接点的元素下标
	Edge *next;
}Edge,*EdgeP;

typedef struct Point{
	char data;
	EdgeP frist;//定义每个点的头指针
}Point;

typedef struct AdjList{
	 EdgeP p;
	 int n,e;//定义邻接表的顶点个数和边数e
	 Point adjPoint[Max];
}AdjList;
//无向邻接表的创建
void CreateAdjList(AdjList &L){
	
	    EdgeP p;//bug1
		int i,j;
		printf("请输入邻接表的顶点个数n和边的个数e:");
		scanf("%d %d",&(L.n),&(L.e));//bug3 忘记加取地址符号&了
		fflush(stdin);
		for(i=0;i<L.n;i++){
			getchar();//bug5 必须用getchar()吃掉上次输入的换行符
			printf("请输入第%d的字符:",i);
			scanf("%c",&(L.adjPoint[i].data));
			L.adjPoint[i].frist=NULL;
		}
printf("*******************************************\n");
printf("下面请输入每条边相邻的两个字符\n");
fflush(stdin);

for(j=0;j<L.e;j++){
		getchar();
     printf("请输入第%d条边相邻的字符:",j);
	 char a,b;
	 scanf("%c %c",&a,&b);
	 int k;	 
	 for(k=0;k<L.n;k++){
         if(L.adjPoint[k].data==a)
			 break;
	 }
	  p=new Edge;
	 p->adjPoint=k;
	 int m;
     for(m=0;m<L.n;m++){
         if(L.adjPoint[m].data==b)
			 break;
	 }
	 p->next=L.adjPoint[m].frist;//BUG2
	 L.adjPoint[m].frist=p;

     p=new Edge;
	 p->adjPoint=m;
     p->next=L.adjPoint[k].frist;
	 L.adjPoint[k].frist=p;
}
}

void display(AdjList L){
   EdgeP p;
   int i;
   for(i=0;i<L.n;i++){
		printf("%2d [%c]",i,L.adjPoint[i].data);
		p=L.adjPoint[i].frist;
		while(p!=NULL){
			printf("-->[%d]",p->adjPoint);
			p=p->next;
		}
		printf("\n");
   }
}


void main(){
	system("color 07");
	AdjList L;
    CreateAdjList(L);
    display(L);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客-杀生丸

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值