【发布时间】:2010-01-14 22:40:08
【问题描述】:
我正在尝试在 Fotran 77 中工作,我发现需要基于树的数据结构。除了用数组实现树之外,还有什么方法可以按照大多数语言的标准实现来构建带有指向其他节点的指针节点的树?
关于这种野兽的文档很少,而且似乎没有任何标准结构类型可以使这成为可能。
想法?
【问题讨论】:
标签: fortran fortran77 abstract-data-type
我正在尝试在 Fotran 77 中工作,我发现需要基于树的数据结构。除了用数组实现树之外,还有什么方法可以按照大多数语言的标准实现来构建带有指向其他节点的指针节点的树?
关于这种野兽的文档很少,而且似乎没有任何标准结构类型可以使这成为可能。
想法?
【问题讨论】:
标签: fortran fortran77 abstract-data-type
我建议您迁移到 Fortran 90 或更高版本。 FORTRAN77 和更早的语言规范中没有指针,因此编译器编写者(和用户)想出了一大堆聪明*的方法来添加必要的功能来做你想做的事情。 Fortran 90 有适合动态数据结构的指针。
聪明*当然意味着需要高级编程技能和对内存、指针、引用和取消引用的理解(所有这些对于大多数 Fortran 程序员来说都是陌生的),这必然导致聪明*程序不能在编译器之间移植,也不能在硬件平台之间移植,也不能在程序员之间移植。
我不明白为什么你会被限制在 FORTRAN77 中工作——标准的 FORTRAN77 在语法上仍然是正确的,并且可以与 Fortran 90 编译器一起编译。当然,您必须将新的树处理代码与使用旧语言的现有代码库集成,但这并不意味着您必须使用旧语言编写新单元。
顺便说一句,FORTRAN77 比 FORTRANII 更现代。
【讨论】:
这在 Fortran 95/2003 中会容易得多,它具有用户定义的派生类型和指针类型。使用这些功能可以设置数据结构,例如链表和树。 (指针类型称为指针,但它们更像是别名,因为指针算术是不可能的)。 Fortran >=95 比 Fortran 77 有很多改进。我的建议是不要使用 Fortran 77,除非对 Fortran 77 中的遗留代码进行细微修改。一本好书是 Metcalf、Reid 和科恩。
【讨论】:
如果您真的不喜欢 Fortran-77,可以使用 Cray 指针:
http://gcc.gnu.org/onlinedocs/gfortran/Cray-pointers.html
Cray 指针是非标准的并且有一些缺点,但它们会给你一些类似于 C 指针的东西。 gfortran 和大多数商业编译器都支持它们。
话虽如此,您最好还是使用较新的 Fortran 功能,例如 Fortran-90 指针或 Fortran 2003 中的 C 互操作性功能。
【讨论】:
没有 Cray 指针或其他骇客,实现“数据类型”的唯一方法是使用并行数组,每个数组代表一个字段。因此,索引可以引用数据类型的实例化。
【讨论】: