日撸java_day37

news2024/12/23 10:34:45

第 37 天: 十字链表

package datastructures.graph;

/**
 * ClassName: OrthogonalList
 * Package: datastructures.graph
 * Description: Orthogonal List for directed graph.
 *
 * @Author: luv_x_c
 * @Create: 2023/5/28 14:53
 */
public class OrthogonalList {
    /**
     * An inner class for adjacent list.
     */
    static class OrthogonalNode {
        /**
         * The row index.
         */
        int row;

        /**
         * The column index.
         */
        int column;

        /**
         * The next out node.
         */
        OrthogonalNode nextOut;

        /**
         * The next in node.
         */
        OrthogonalNode nextIn;

        /**
         * The first constructor.
         *
         * @param paraRow    The row.
         * @param paraColumn The column.
         */
        public OrthogonalNode(int paraRow, int paraColumn) {
            row = paraRow;
            column = paraColumn;
            nextIn = null;
            nextOut = null;
        }// Of OrthogonalNode
    }// Of class OrthogonalNode

    /**
     * The number of nodes.
     */
    int numNodes;

    /**
     * The headers for each row.
     */
    OrthogonalNode[] headers;

    /**
     * The first constructor.
     *
     * @param paraMatrix The matrix indicting the graph.
     */
    public OrthogonalList(int[][] paraMatrix) {
        numNodes = paraMatrix.length;

        // Step1. Initialize. The data in the headers are not meaningful.
        OrthogonalNode tempPreciousNode, tempNode;

        headers = new OrthogonalNode[numNodes];

        // Step2. Link to its out nodes.
        for (int i = 0; i < numNodes; i++) {
            headers[i] = new OrthogonalNode(i, -1);
            tempPreciousNode = headers[i];
            for (int j = 0; j < numNodes; j++) {
                if (paraMatrix[i][j] == 0) {
                    continue;
                }// Of if

                // Create a new node.
                tempNode = new OrthogonalNode(i, j);

                // Link.
                tempPreciousNode.nextOut = tempNode;
                tempPreciousNode = tempNode;
            }// Of for j
        }// Of for i

        // Step3. Link to its in nodes.
        OrthogonalNode[] tempColumnNodes = new OrthogonalNode[numNodes];
        System.arraycopy(headers, 0, tempColumnNodes, 0, numNodes);

        for (int i = 0; i < numNodes; i++) {
            tempNode = headers[i].nextOut;
            while ((tempNode != null)) {
                tempColumnNodes[tempNode.column].nextIn = tempNode;
                tempColumnNodes[tempNode.column] = tempNode;

                tempNode = tempNode.nextOut;
            }// Of while
        }// Of for i
    }// Of the first constructor

    @Override
    public String toString() {
        String resultString = "Out arcs: ";

        OrthogonalNode tempNode;
        for (int i = 0; i < numNodes; i++) {
            tempNode = headers[i].nextOut;

            while (tempNode != null) {
                resultString += " (" + tempNode.row + ", " + tempNode.column + ")";
                tempNode = tempNode.nextOut;
            }// Of while
            resultString += "\r\n";
        }// Of for i

        resultString += "\r\nIn arcs: ";

        for (int i = 0; i < numNodes; i++) {
            tempNode = headers[i].nextIn;

            while (tempNode != null) {
                resultString += " (" + tempNode.row + ", " + tempNode.column + ")";
                tempNode = tempNode.nextIn;
            }// Of while
            resultString += "\r\n";
        }// Of for i
        return resultString;
    }// Of toString

    /**
     * The entrance of the program.
     *
     * @param args Not used now.
     */
    public static void main(String[] args) {
        int[][] tempMatrix = {{0, 1, 0, 0}, {0, 0, 0, 1}, {1, 0, 0, 0}, {0, 1, 1, 0}};
        OrthogonalList tempList = new OrthogonalList(tempMatrix);
        System.out.println("The data are:\r\n" + tempList);
    }// Of main
}// Of class OrthogonalList

解释一下构建入结点链表那块。

 

  for (int i = 0; i < numNodes; i++) {
            tempNode = headers[i].nextOut;
            while ((tempNode != null)) {
                tempColumnNodes[tempNode.column].nextIn = tempNode;
                tempColumnNodes[tempNode.column] = tempNode;

                tempNode = tempNode.nextOut;
            }// Of while
        }// Of for i

首先,使用一个循环遍历每个头节点 headers[i],其中 i 是节点的索引。

然后,通过 tempNode = headers[i].nextOuttempNode 初始化为当前头节点的第一个出节点。

接下来,进入一个循环 while (tempNode != null),该循环遍历当前头节点的出节点链表。

在循环中,首先执行 tempColumnNodes[tempNode.column].nextIn = tempNode,将当前出节点 tempNode 的引用赋值给对应列索引 tempNode.columntempColumnNodes 数组中的节点的 nextIn 指针,即将当前出节点链接到对应列的入节点链表中。

然后,执行 tempColumnNodes[tempNode.column] = tempNode,将 tempNode 赋值给 tempColumnNodes 数组中的对应列索引位置,以便下次循环时更新对应列的入节点链接位置。

最后,执行 tempNode = tempNode.nextOut,将 tempNode 移动到当前出节点的下一个出节点,继续下一轮循环,直到遍历完当前头节点的出节点链表。

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

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

相关文章

chatgpt赋能python:Python图像分割——了解图像分割技术和Python实现

Python图像分割——了解图像分割技术和Python实现 图像分割是一种图像处理技术&#xff0c;它将一幅图像分成若干个区域&#xff0c;每个区域有自己的特征和属性。在图像处理中&#xff0c;图像分割常被用来提高图像质量和辨识度&#xff0c;降低图像处理和分析的难度&#xf…

2023年第十五届四川赛区ACM真题及官方题解

给大家看真题前&#xff0c;先给大家看看现场氛围 入场前&#xff1a; 结束后&#xff1a; 还是有点壮观的。 今年四川的ACM在都江堰举办。因为比赛时间很紧张&#xff0c;所以没来得及去公费旅个游哈哈&#xff0c; 不过题目很棒&#xff0c;志愿者效率很高&#xff0c;比赛…

从零手写操作系统之RVOS硬件定时器-05

从零手写操作系统之RVOS硬件定时器-05 RISC-V 定时器中断RISC-V CLINT 介绍寄存器 (Timer 部分)总体框架流程硬件定时器的应用时间管理测试 本系列参考: 学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春 整理而来&#xff0c;主要作为xv6操作系统学习的一个前置基础。 RVOS是…

vm安装Ubuntu以及Ubuntu设置中文

vm安装Ubuntu以及Ubuntu设置中文 Ubuntu 介绍 Ubuntu&#xff08;友帮拓、优般图、乌班图&#xff09;是一个以桌面应用为主的开源GNU/Linux 操作系统&#xff0c;Ubuntu 是基于GNU/Linux&#xff0c;支持x86、amd64&#xff08;即x64&#xff09;和ppc 架构&#xff0c;由全…

基于DICOM标准的医院PACS系统源码

一、基于 DICOM 的 PACS是医学图像归档与通信系统&#xff0c;是实现医学图像自动获取、显示、图像 后处理、传输、存储、查询、检索、写诊断报告、查看成像设备运行状态等功能复合型医学 图像管理系统。 二、PACS可以为医院其他系统提供医学图像&#xff0c;并能够形成图文并茂…

Ansible进阶1——大项目清单管理

文章目录 一、playbook引用主机方式1.1 引用清单主机1.2 引用主机别名1.3 使用通配符引用 二、动态清单三、管理多个清单四、forks和serial五、包含与导入5.1 导入playbook5.2 导入任务文件5.3 包含任务文件5.4 结合变量 一、playbook引用主机方式 清单文件的使用方式很多&…

UNIX网络编程卷一 学习笔记 第十八章 路由套接字

内核中的Unix路由表传统上一直使用ioctl函数访问&#xff0c;但没有ioctl函数请求能获取整个路由表&#xff0c;而netstat等程序通过读取内核的内存获取路由表内容。诸如gated等路由守护进程需要监视由内核收取的ICMP重定向消息&#xff08;用于在IP网络中通知主机或路由器更优…

【网络】UDP网络服务器

代码的整体逻辑&#xff1a; UDP服务端&#xff1a;udpServer.cc&#xff08;服务端的调用&#xff09;,udpServer.hpp&#xff08;服务端的实现&#xff09; UDP客户端&#xff1a;udpClient.cc&#xff08;客户端的调用&#xff09;,udpClient.hpp(客户端的实现) 1.udp服务…

Flask中使用Flask-WTF验证JSON对象参数

Flask中使用Flask-WTF验证JSON对象参数 1 安装 Flask-WTF是对WTForms库的扩展&#xff0c;默认只对”form“标签下的表单进行验证。针对当前前后端分离的项目中&#xff0c;json传输参数需要进行二次封装才能使用。 # 安装Flask-WTF包 pip install Flask-WTF2 源代码 2.1 工…

一些忘了的东西(二)

Symbol出现的原因/作用 ①作为属性 避免属性冲突重复&#xff0c;就是使用它来表示唯一值; 问题是我们什么情况下 要保障属性一定不冲突重复 覆盖呢&#xff1f; 在vue里 有this.$ parent ,this.$ options ,this.$ set 这些&#xff0c;使用$命名开头就是想通过命名约定来减少…

BLIP使用教程

文章目录 准备测试示例一示例二&#xff1a; 结论源代码 原理篇&#xff1a; BLIP2-图像文本预训练论文解读 准备 如果无网络需提前下载相关模型 安装torch、transformers pip install torch trtransformers测试 测试blip基于图片生成文本描述能力&#xff08;Caption&…

《嵌入式系统》知识总结8:寄存器编程方式操纵GPIO

方式1&#xff1a; 查手册找到相关寄存器的地址&#xff0c;自行编写代码&#xff0c;定义指针指向该地址&#xff0c;并根据需要进行寄存器读写。 举例&#xff1a; //方式1举例&#xff1a;自定义GPIOB_ODR寄存器 #define GPIOB_ODR (*(volatile unsigned int *)0x40010C0…

Vivado时序约束基础

今天这篇博客&#xff0c;笔者向大家简单介绍Xilinx FPGA中的Vivado时序约束基础知识&#xff0c;也为后续的学习打好铺垫。 Xilinx Design Constraints (XDC) 概述 • XDC 在本质上就是Tcl 语言&#xff0c;但其仅支持基本的Tcl 语法&#xff0c;如变量、列表和运算符等等&a…

Go 语言基础

文章目录 Go 语言基础1. 程序基础2. 数据类型3. 字符串与复合数据类型4. 函数、方法、接口和反射5. 并发编程&#xff08;核心重点&#xff09;6. 包和代码测试7. 综合实战案例框架部分探索深度 Go 语言基础 1. 程序基础 了解常量和遍历【const var 关键词】 : 初始化以及赋值…

微服务如何治理

微服务远程调用可能有如下问题&#xff1a; 注册中心宕机&#xff1b; 服务提供者B有节点宕机&#xff1b; 服务消费者A和注册中心之间的网络不通&#xff1b; 服务提供者B和注册中心之间的网络不通&#xff1b; 服务消费者A和服务提供者B之间的网络不通&#xff1b; 服务提供者…

Redux And Redux Toolkit

笔记介绍了react_redux和redux_toolkit react_redux只介绍了原理图&#xff0c;为理解redux_toolkit做铺垫。 本笔记是对一下课程做的输出&#xff0c;若大家有不理解的地方&#xff0c;可看完课程后&#xff0c;再借助课程理解笔记内容&#xff0c;同时也鼓励大家对自己的听…

【环境搭建】40系一些奇奇怪怪的环境问题

【设备信息】我的设备是4070ti&#xff0c;支持cuda12.0,但是目前用的还是11.7 1&#xff09;fatal error: cusparse.h: No such file or directory 因为cuda版本和改名的原因&#xff0c;这个在cuda版本中比较有效的解决办法是&#xff1a; sudo apt search libcusparse得到…

matplotlib实操

matplotlib实操 问题1.分析离网用户的基本特征:包括但不限于地市、年龄、网龄、融合类型、套餐分布、用户价值等&#xff0c;年龄、网龄、用户价值(ARPU)、MOU、DOU;数据预处理处理异常值地市分布县级分布年龄分布网龄分布性别与年龄分布融合类型套餐分布用户价值(ARPU)MOU(每用…

vulnhub靶场之hackme2-DCHP

Burp联动xray 1.信息收集 探测存活主机&#xff0c;输入&#xff1a;netdiscover -r 192.168.239.0/24 &#xff0c;发现192.168.239.179存活。 对目标主机192.168.239.179进行端口扫描&#xff0c;发现存活22、80端口。 在浏览器上输入&#xff1a;http://192.168.239.179&a…

axios解决跨域问题

Vue3中使用axios访问聚合的天气API&#xff0c;出现跨域问题&#xff0c;需要在前端进行一些配置&#xff1a; 首先是修改vue.config.js&#xff1a; const { defineConfig } require(vue/cli-service) module.exports defineConfig({transpileDependencies: true,devServe…