【资料结构】串链的表示法

串链的表示法

基本介绍

1.矩阵表示法:
若G(V,E)是含n个顶点的图,表示图G的矩阵为mat[n][n]

  存在边的矩阵为mat[i][j]=1  不存在边的矩阵为mat[i][j]=0

无向图

  无向图的相邻矩阵为对称

有向图

  有向图的相邻矩阵为非对称

2.串链表示法:

无向图

有向图

程式範例

利用矩阵表示法转换成串链表示法

印出矩阵表示法

void show(int arr[], int count) {  for (int i = 0; i < count; i++) {    for (int j = 0; j < count; j++) {      printf("%d ", arr[i * count + j]);    }    printf("\n");  }}

设定初始化初值

void initialization(head_p point[], int visited[]) {  for (int n = 0; n < count; n++) {    visited[n] = FALSE;    //visited[n]为判定追蹤时是否输出过,此案例中用不到    point[n] = (head_p)malloc(sizeof(head));    point[n]->num = vi;    point[n]->next = NULL;  }}

矩阵转换为串链

有点冗长,有机会再把这段函式弄简洁
void make_list(int count, int arr[], head_p point[]) {  printf("\nAdjacency List\n");  head_p soure[MAX];  //sourse为储存point初始位置,当point不断存到next时,最后要有办法回到初位  for (int i = 0; i < count; i++) {    soure[i] = point[i];    root[i] = point[i];    point[i]->num = i;    point[i]->next = (head_p)malloc(sizeof(head));    point[i] = point[i]->next;    printf("\n%d", i);    for (int j = 0; j < count; j++) {      if (arr[i * count + j] == 1) {        printf("->%d", j);        point[i]->next = (head_p)malloc(sizeof(head));        point[i]->num = j;        point[i] = point[i]->next;        point[i]->next = NULL;      }    }    printf("\n");    point[i] = soure[i];  }}

印出串链表示

void show_allData(int count, head_p point[], int visited[]) {  for (int i = 0; i < count; i++) {    printf("\n----------%d----------\n", i);    printf("index=%d\tans=%d\n\n", i, visited[i]);    while (point[i]->next != NULL) {      printf("list[%d]->num=%d(%p)\n", i, point[i]->num, point[i]);      point[i] = point[i]->next;    }  }}

ans为visited值,目前用不到

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章