图数据结构之邻接链表Adjacency List(Python版)

news2024/11/22 8:52:21

前面学过两种图的数据结构,有兴趣的可以查阅:图数据结构之字典实现(Python版)icon-default.png?t=M85Bhttps://blog.csdn.net/weixin_41896770/article/details/128125901

图数据结构之邻接矩阵Adjacency Matrix(Python版)icon-default.png?t=M85Bhttps://blog.csdn.net/weixin_41896770/article/details/128128667

实际上我们常用的邻接矩阵就是一种未离散化每个点的边集的邻接表,如果对于很多其他顶点没有相邻顶点的情况,将会浪费大量的存储空间,也就是说很多0的位置,这些都说明没有相邻边,那接下来这个邻接链表就是一种离散化的表示,有相邻节点才存储,这样就避免了空间的浪费,而且看起来特别直观。

代码如下:

class Node():
    '''
    实例化节点数据与链接指向
    '''

    def __init__(self, data):
        self.data = data
        self.next = None


class AdjacencyListGraph():
    def __init__(self) -> None:
        self.graph = []

    def addNode(self, node):
        '''
        节点添加到图中
        '''
        self.graph.append(node)
        return self.graph

    def AdjacencyList(self):
        '''
        添加节点到邻接链表
        '''
        nodeList = []
        for node in self.graph:
            nodeList.append(node.data)
        nodeList.append('#')

        for node in self.graph:
            curNode0 = node
            print("请输入%s的相邻点,以#结束:" % curNode0.data)
            while True:
                curNode = Node('none')
                end = input(">>>").strip()
                if curNode0.data == end:
                    print("相邻节点不能是自身")
                    continue
                if end not in nodeList:
                    print("图中没有此节点")
                    continue
                if end == '#':
                    break
                else:
                    curNode.data = end  # 新的邻接点
                    # 链接指向
                    curNode.next = curNode0.next
                    curNode0.next = curNode
                    curNode0 = curNode0.next

    def printGraph(self):
        for node in self.graph:
            print("%s的邻接链表:" % node.data, node.data, end="")
            while node.next != None:
                print("-->", node.next.data, end="")
                node = node.next
            print("\n")


if __name__ == "__main__":
    n = int(input("请输入节点个数:").strip())
    adjacencyListGraph = AdjacencyListGraph()
    for i in range(0, n):
        data = input("请输入节点:").strip()
        data = Node(data)
        adjacencyListGraph.addNode(data)
    print("所有节点如下:")
    for n in adjacencyListGraph.graph:
        print(n.data, end=" ")
    print("\n")

    adjacencyListGraph.AdjacencyList()
    adjacencyListGraph.printGraph()
'''
请输入节点个数:4
请输入节点:A
请输入节点:B
请输入节点:C
请输入节点:D
所有节点如下:
A B C D

请输入A的相邻点,以#结束:
>>>B
>>>C
>>>D
>>>#
请输入B的相邻点,以#结束:
>>>A
>>>C
>>>D
>>>#
请输入C的相邻点,以#结束:
>>>D
>>>#
请输入D的相邻点,以#结束:
>>>A
>>>#
A的邻接链表: A--> B--> C--> D

B的邻接链表: B--> A--> C--> D

C的邻接链表: C--> D

D的邻接链表: D--> A

'''

这种图的数据结构看起来就很直观了,A的相邻节点B,然后B的相邻节点C,这样形成一条链,所以这样的数据结构叫做邻接链表。

数据结构是一种现实的抽象,也就是说对于现实中的问题,我们要拿到计算机里面来存储,那需要一种抽象,比如列表、字典、矩阵、结构体等等,根据具体情况来组合成自己想要的数据结构。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/51509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中文Stable Diffusion模型太乙使用教程

中文Stable Diffusion模型太乙使用教程 太乙模型介绍 在线体验地址: Stable Diffusion 太乙模型,首个开源的中文Stable Diffusion模型,基于0.2亿筛选过的中文图文对训练。 生成内容一直被视为 AI 领域中最具有挑战性的能力,最近大火的 AI 绘…

文献管理软件Zotero的安装和使用

文章目录前言一、Zotero简介二、安装与使用1、账号注册2、软件安装3、插件安装4、关联账户设置5、坚果云扩充(WebDAV)6、保存路径设置7、与Connected Papers联动8、参考文献的引用前言 随着阅读文献数量的增加,感觉一个好用的文献管理工具必…

08【SpringMVC的放行规则】

文章目录二、SpringMVC的放行规则2.1 SpringMVC提供的拦截规则2.2 缺省Servlet放行2.3 resources放行2.4 Handler放行2.5 放行规则小结二、SpringMVC的放行规则 2.1 SpringMVC提供的拦截规则 *.form:代表以*.form结尾的后缀请求都会进入springmvc管/:代…

Vue2.0开发之——Vue基础用法-axios(29)

一 概述 axios-使用axios发起基本的Get请求axios-结合async和await调用axiosaxios-使用解构赋值axios-基于axios.get和axios.post发起请求 二 axios-使用axios发起基本的Get请求 2.1 axios介绍 axios(发音:艾克C奥斯)是前端圈最火的、专注于数据库请求的库 在后面…

Linux---awk

Linux三剑客之一awk 简单介绍一下awk的用法 再谈三剑客 grep awk sed 三个并称Linux的三剑客 awk:适合编辑,处理匹配到的文本内容 grep:擅长单纯的查找或匹配文本内容 链接: Linux—grep sed:适合格式化文本内容,对文本进行复杂处理 链接: Linux—sed 文章目录Lin…

如何选择合适的香港物理服务器?

所有企业在部署自己的网络业务时,要有目标,正确的技术,尤其是服务器,可以帮助他们实现这些目标。比如,国内站长开展大型外贸业务又想要国内访问速度快,可以选择合适的香港物理服务器来解决这个问题。那么&a…

天舟系列货运飞船介绍

天舟系列货运飞船是由中国空间技术研究院研制的一款货运飞船,其主要任务是在我国空间站建造及运营期间进行物资运输补给。 天舟系列货运飞船主要用于对中国空间站在轨运行期间,。天舟系列货运飞船包括天舟一号、天舟二号、天舟三号、天舟四号、天舟五号等…

Chatbot(五)

一、走进聊天机器人 目标 知道常见的bot的分类知道企业中常见的流程和方法 1.1 目前企业中的常见的聊天机器人 QA BOT (问答机器人) : 回答问题 1.代表:智能名服 2.比如: 提问和回答TASK BOT(任务机器人): 助人们做事情 1.代表: siri 2.比如:设五明天早上9点的闹钟CHAT BOT…

虹科方案|HK-ATTO 和西部数据为性能要求苛刻的应用构建存储解决方案

解决方案特点 科学、医疗、工程和其他高性能环境需要同样高性能的存储。该解决方案必须存储大量数据。它还必须提供突破当今固态驱动器设备极限的速度。同时,组织需要一个软件定义的组件,使他们能够构建满足其技术和预算要求的完整存储基础架构。 昂贵的…

[附源码]Python计算机毕业设计Django动漫电影网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

初学者学习JS很吃力怎么办?到底该如何学习JS?

前言 觉得吃力是很正常的,首先这证明你在某些知识点上没有理解透彻,JS挺多的知识点点其实是比较抽象的,比如闭包、原型和原型链等,其次便是不会变通运用,这主要是敲代码熟练度的问题,所以我针对你这种情况…

PCA主成分分析法浅理解

ML课刚学,发现更多是对线性代数的回顾。更进一步说,统计机器学习方法就是以高数、线代和概率论为基石构筑的“一栋大厦”。下面主要沿着老师ppt的思路讲讲对PCA方法的个人理解。 这里u1Tx(i)u_1^Tx^{(i)}u1T​x(i)是x(i)x^{(i)}x(i)在单位方向向量u1u_1u…

webpack常用配置(二)之拆分配置

在《webpack常用配置(一)》里面是把关于webpack的配置放在了根目录下的webpack.config.js中,但是我们知道在开发环境下和在真正打包上线运行的环境是不一样的,所有我们需要把对webpack的配置拆分成 1.通用配置:webpack…

8.跨域请求

目录 1 一些概念 1.1 同源 1.2 同源策略 1.3 跨域 2 JSONP 2.1 原理 2.2 jQuery中的JSONP 2.2.1 默认情况 2.2.2 自定义键与函数名称 2.2.3 淘宝搜索建议请求 1 一些概念 1.1 同源 两个页面的 协议,域名与端口都相同,则两个页面…

[附源码]Python计算机毕业设计Django高校实验室仪器设备管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

大数据(9h)FlinkSQL双流JOIN

文章目录1、环境2、Temporal Joins2.1、基于处理时间(重点)2.1.1、设置状态保留时间2.2、基于事件时间3、Lookup Join(重点)4、Interval Joins(基于间隔JOIN)重点是Lookup Join和Processing Time Temporal …

【Ubuntu】修改ubuntu和windows双系统启动顺序

目录一、问题描述二、背景知识1. GRUB是什么2. GRUB配置文件3./etc/default/grub 主配置文件二、问题分析三、解决方案1. 修改grub主配置文件2. 更新grub配置文件一、问题描述 UbuntuWindows双系统默认使用GRUB作为引导管理器,而且通常默认启动Ubuntu。这样过于死板…

用Python分析了30000+《独行月球》影评数据,看看观众们怎么说~

文章目录🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 数据大小2.3 查看索引、数据类型和内存信息🏳️‍🌈 3. Pyecharts数据可视化3.1 《独行月球》评分分布-13.2 《独行月球》评分分布…

TypeScript学习笔记

TypeScript学习笔记 TypeScript 与 JavaScript 的区别 TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法。TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译。TypeScript 文件的后缀名 .ts (.ts&am…

Milvus的索引方式

索引方式: FLAT:准确率高, 适合数据量小 暴力求解相似。 IVF-FLAT:量化操作, 准确率和速度的平衡 IVF:inverted file 先对空间的点进行聚类,查询时先比较聚类中心距离,再找到最近的N个点。 IV…