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

串链的表示法

基本介绍

  • 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值,目前用不到

<<:  【教练我想写 C#】建啦哪次不建 Web API # Get

>>:  【资料结构】DFS与BFS的追踪

Day18 用python写UI-聊聊Listbox与事件绑定

今天延续昨天的Listbox做一些更进阶的操作,加入删除、项目的排序和拖曳项目,这些都是平常常会用到...

Android Studio初学笔记-Day13-ScrollView

ScrollView 今天要介绍的元件,当介面的内容开始变多时就派上用场了,毕竟手机萤幕或着各类3c...

[FGL] 吸星大法 - IMPORT之 1: 使用extension扩展功能

转换为Genero後,FourJs’ 为了扩展整体程序语言,令他可以执行更多不一定与资料库相关的功能...

[Day20] Emmet 学习笔记 - 层级篇

预处理器可以透过加快撰写程序的速度,但是自己的打字速度提升有限(换了Mac之後还变慢不少),Emme...

D7 - 如何用 Google Apps Script 将 Google 表单的回应即时同步在多个行事历上?

来到了第七天。老样子,先讲推荐的速解,如果你很急着用,这些 Add-On 可以帮上忙,第一是 For...