如何在fortran 2003-2008中实现链表

Dav*_* MZ 6 fortran linked-list fortran90 data-structures

我需要在fortran 2003/2008中为我的分子动力学代码实现链接列表数据结构我正在使用最新的fortran编译器(英特尔).

我如何以尽可能最好的方式实现链表,如果可能的话,我希望在Fortran中实现无锁无等待实现.

谢谢.

M. *_* B. 7

如果使用数据项和指向下一项的指针创建用户定义类型,则最简单.这是假设一个单链表.例如,

   type MyList_type
      integer :: FirstItem
      real :: SecondItem
      etc
      type (MyList_type), pointer :: next_ptr => null ()
   end type MyList_type
Run Code Online (Sandbox Code Playgroud)

然后使用"allocate"创建第一个成员.此后,您编写代码来遍历列表,使用next_ptr逐步执行列表.使用"关联"内在函数来测试next_ptr是否已定义,或者您已到达列表的末尾.

如果您正在编写一个普通的顺序Fortran程序,那么无锁/无等待不是问题.如果您正在编写多线程/并行程序,那么对变量的一致访问是一个问题.

以下是一些例子:http://fortranwiki.org/fortran/show/Linked+list.更好的是,Fortranf和Reid在"Fortran 90/95 Explained"一书中清楚地解释了Fortran中的链接列表.

  • Fortran本身不提供原子操作,这超出了语言标准.Fortran不提供链表,它提供指针以及类型内指针指向该类型的能力.通常你会编写自己的链表代码; 在提供的一些链接上有一些用户贡献的代码,可以使用或改编,但没有标准库.如果您有一个多线程程序,则使用线程库(OpenMP,MPI,...)的选项来保证对共享变量的一致访问,包括定义链接列表的变量. (4认同)