考研真题数据结构

【2021山西大学考研真题】设计一个算法,统计一个采用邻接表存储的具有n个顶点的无向无权图

所有顶点的度。

(1)给出算法的基本思想;

(2)根据设计思想,给出描述的算法。

(3)求出所用算法的时间复杂度。


(1)算法的基本思想如下:

1. 遍历图中的所有顶点,统计每个顶点的度。
2. 对于每个顶点,遍历其邻接表,统计其邻接点的个数即为该顶点的度。

(2)下面是使用C语言描述这个算法的代码:

```c
#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int vertex;
    struct Node* next;
} Node;

typedef struct Graph {
    int numVertices;
    Node** adjacencyList;
} Graph;

// 创建图
Graph* createGraph(int numVertices) {
    Graph* graph = (Graph*)malloc(sizeof(Graph));
    graph->numVertices = numVertices;

    graph->adjacencyList = (Node**)malloc(numVertices * sizeof(Node*));
    for (int i = 0; i < numVertices; i++) {
        graph->adjacencyList[i] = NULL;
    }

    return graph;
}

// 添加边
void addEdge(Graph* graph, int src, int dest) {
    // 添加从src到dest的边
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->vertex = dest;
    newNode->next = graph->adjacencyList[src];
    graph->adjacencyList[src] = newNode;

    // 添加从dest到src的边(无向图)
    newNode = (Node*)malloc(sizeof(Node));
    newNode->vertex = src;
    newNode->next = graph->adjacencyList[dest];
    graph->adjacencyList[dest] = newNode;
}

// 统计图中所有顶点的度
void degreeOfVertices(Graph* graph) {
    for (int i = 0; i < graph->numVertices; i++) {
        int degree = 0;
        Node* current = graph->adjacencyList[i];
        
        while (current != NULL) {
            degree++;
            current = current->next;
        }
        
        printf("顶点 %d 的度为 %d\n", i, degree);
    }
}

// 测试代码
int main() {
    int numVertices = 6;
    Graph* graph = createGraph(numVertices);

    addEdge(graph, 0, 1);
    addEdge(graph, 0, 2);
    addEdge(graph, 0, 3);
    addEdge(graph, 1, 2);
    addEdge(graph, 2, 3);
    addEdge(graph, 2, 4);
    addEdge(graph, 3, 4);
    addEdge(graph, 4, 5);

    degreeOfVertices(graph);

    return 0;
}
```

在上述代码中,我们首先定义了一个 `Node` 结构体来表示邻接表中的节点,以及一个 `Graph` 结构体来表示图。然后,我们实现了创建图、添加边和统计图中所有顶点度的函数。在 `main` 函数中,我们创建了一个测试用例并进行度的统计。

(3)算法的时间复杂度是 O(V+E),其中 V 是顶点数,E 是边数。我们需要遍历每个顶点的邻接表,并统计度数。

 

相关推荐

  1. 数据结构

    2023-12-11 08:52:06       36 阅读
  2. 数据结构

    2023-12-11 08:52:06       32 阅读
  3. 数据结构

    2023-12-11 08:52:06       37 阅读
  4. 数据结构

    2023-12-11 08:52:06       33 阅读
  5. 数据结构

    2023-12-11 08:52:06       63 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-11 08:52:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-11 08:52:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-11 08:52:06       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-11 08:52:06       20 阅读

热门阅读

  1. 机器学习—混淆矩阵

    2023-12-11 08:52:06       41 阅读
  2. Ubuntu20 USB 权限配置

    2023-12-11 08:52:06       47 阅读
  3. postgresql & pgvector 安装间记

    2023-12-11 08:52:06       45 阅读
  4. lua脚本串口收发与CRC16校验及使用方法

    2023-12-11 08:52:06       31 阅读
  5. 基于curl 使用http多线程下载大文件

    2023-12-11 08:52:06       41 阅读
  6. 聊聊AsyncHttpClient的exception

    2023-12-11 08:52:06       31 阅读
  7. .__deepcopy__()函数-深拷贝

    2023-12-11 08:52:06       43 阅读