#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);
}
无向邻接表的创建与显示
最新推荐文章于 2022-04-21 23:32:16 发布