方法一:用邻接表的方法存储,
先开辟一块大小为n的存储空间,每一块存储空间为一个链表的开头,一次将数据增加到相应的链表里。
#include<stdio.h>
#include<stdlib.h>
typedef struct Node
{
int data;
Node *next;
}Node;
void show(Node &LJB,int number);
int main()
{
printf("输入顶点数量\n");
int number;
scanf("%d",&number);
printf("请输入连着的顶点a.b,ab同时为0时输入结束\n");
int a,b;
scanf("%d %d",&a,&b);
//创建邻接表
Node LJB;
LJB.next=(Node *)malloc((number+1)*sizeof(Node));
Node *p[number];
p[1]=LJB.next;
for(int i=1;i<=number;i++)
{
p[i]=LJB.next+i;
p[i]->next=NULL;
p[i]->data=i;
}
while(!(a==0&&b==0))
{
p[a]->next=(Node *)malloc(sizeof(Node));
p[a]=p[a]->next;
p[a]->data=b;
p[a]->next=NULL;
scanf("%d %d",&a,&b);
}
for(int i=1;i<=number;i++)
{
p[i]=LJB.next+i;
}
int j=1;
printf("打印邻接表\n");
for(j=1;j<=number;j++)
{
while(p[j])
{
printf("%d->",p[j]->data);
p[j]=p[j]->next;
}
printf("\n");
}
return 0;
}
方法二:用邻接矩阵的方法存储,
开辟一个矩阵,在相接的两个点对应的序号的位置存储为1,其余为0,例如:矩阵a[100][100],1和2相连,则a[1][2]=0
#include<stdio.h>
#define size 100 //矩阵大小
void jz(int m[size][size],int a,int b);
void show(int m[size][size],int number);
int main()
{
int m[size][size];
printf("输入顶点数量\n");
int number;
scanf("%d",&number);
int a,b;
printf("请输入连着的顶点a.b,ab同时为0时输入结束\n");
scanf("%d %d",&a,&b);
while(!(a==0&&b==0))
{
jz(m,a,b);
scanf("%d %d",&a,&b);
}
show(m,number);
return 0;
}
void jz(int m[size][size],int a,int b)
{
m[a][b]=1;
}
void show(int m[size][size],int number)
{
int i,j;
for(i=1;i<number;i++)
{
for(j=1;j<number;j++)
{
printf("%d ",m[i][j]);
}
printf("\n");
}
}