我需要在fortran 2003/2008中为我的分子动力学代码实现一个链表数据结构。我使用的是最新的fortran编译器(英特尔)。
如何以最好的方式实现链表?如果可能的话,我更喜欢用Fortran实现无锁无等待的实现。
谢谢。
发布于 2011-12-28 04:50:29
如果使用数据项和指向下一项的指针创建用户定义的类型,这将是最简单的。这是假设一个单链表。例如,
type MyList_type
integer :: FirstItem
real :: SecondItem
etc
type (MyList_type), pointer :: next_ptr => null ()
end type MyList_type
然后用"allocate“创建第一个成员。然后编写遍历列表的代码,使用next_ptr遍历列表。使用"associated“内部函数来测试是否已经定义了next_ptr,或者您已经到达列表的末尾。
如果你正在写一个普通的顺序Fortran程序,那么无锁/无等待不是问题。如果您正在编写多线程/并行程序,那么对变量的一致访问是一个问题。
这里有一些更多的例子:http://fortranwiki.org/fortran/show/Linked+list。更好的是,Fortran中的链表在Metcalf和Reid的"Fortran 90/95解释“一书中有明确的解释。
https://stackoverflow.com/questions/8648779
复制相似问题