博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于java中指针的概念
阅读量:5881 次
发布时间:2019-06-19

本文共 1449 字,大约阅读时间需要 4 分钟。

今天寡人遇到一个问题,扫描非关系数据库中的图(由node和rel组成),将其转化成由寡人自定义的gnode和gedge组成的图。

gnode类包含结点的id,label和包含此gnode的gedge的链表;gedge类包含gnode类型的startnode和endnode。

寡人伏案敲打键盘,不到一盏灯的时间里便写出了一个递归的深度优先遍历算法,心中不免感到被自己的才智深深的折服。

但寡人发觉有哪里不太对,寡人在纸上画一例以试之,发现果然有问题:

为避免重复扫描相同的node,在处理此node之前必先探测其是否存在于转化完成的gnode链表中,若存在则直接return此gnode,不存在才进行后续处理;

如前所述,gnode包含一个gedge链表,在生成其中每个gedge时,必先有其startnode和endnode。显然,此gnode是其中一个,另一个我们要对这个rel连接的node调用本算法得到,谓之递归。

于是,为了探测此node可曾被扫描,我们需要有当前已生成的gnode列表;在将此gnode添加到生成的gnode列表前,我们需要对其连接的node调用此算法得到它的gedge的链表。

鸡生蛋?蛋生鸡?

寡人陷入了沉思。

寡人C语言学识尚可,这种情况下,如果使用C(C++)语言,寡人定采用指针链表实现gnode列表:

在得到当前node的id和label后,生成对应的gnode,其gedge链表置为null。将此gnode列表的下一元素指向此gnode,即添加到转化完成的gnode链表。实则,我们此时还未得到此gnode的gedge链表,但我们有了id和label——探测一个node可曾被扫描的完备条件。在我们得到gedges后,更新此gnode的属性,gnode列表中的它自然也就更新了。

java中如何实现指针数组?

寡人开始搜goo罗gle天下百姓的建议

以上都是废话


孤看了这个博客,豁然开朗:孤不懂对象。

孤编了个小程序试之,爱卿们且看:

package a2;import java.util.LinkedList;public class Test {    public static void main(String[] args) {        // TODO Auto-generated method stub        LinkedList
c=new LinkedList
(); Shit d=new Shit(); d.a=0;d.b="oh,shit!"; c.add(d); d.a=1;d.b="omg!"; for(Shit a:c){ System.out.println(a.a+" "+a.b); } }}class Shit{ public int a; public String b;}

输出结果是: 1 omg

只有new才会分配一个新的地址空间,List的add,只是添加了一个对被add对象的引用。修改这个对象,List中的它当然会改变,因为“它”就是“它”啊……

孤被自己蠢哭了。

孤要搞懂对象。

 

转载于:https://www.cnblogs.com/metalcrash/p/3666462.html

你可能感兴趣的文章
moto 917 不想使用TD网人方法
查看>>
软件版本号编写规范及说明
查看>>
Crontab 定时任务设置
查看>>
nginx安装配置+清缓存模块安装
查看>>
大规模并行查询引擎 BlinkDB
查看>>
红帽7系linux破解root密码的三种办法
查看>>
Apache自动优化前端页面的模块mod_pagespeed应用(二)
查看>>
ThinkingInJava_5
查看>>
自由思想十诫
查看>>
vrrp协议详解
查看>>
Spring之AOP
查看>>
Json用法
查看>>
Linux下查看源码编译的常用应用服务的信息
查看>>
java安装jdk环境配置
查看>>
解决svn working copy locked问题
查看>>
kubectl 命令记录
查看>>
H3C交换机中 LI、SI、EI、HI 各型号的区别
查看>>
mmJ:Linux强制更新Ip地址,解决Ip冲突无法访问问题
查看>>
nginx多站设置
查看>>
(二)数据库基础——属性分类
查看>>