Как я могу реализовать связанный список в Fortran 2003-2008 - PullRequest
6 голосов
/ 28 декабря 2011

Мне нужно реализовать структуру данных списка ссылок для моего кода молекулярной динамики в Фортране 2003/2008. Я использую новейшие компиляторы Фортрана (Intel).

Как лучше всего реализовать связанный список, я бы предпочел реализацию без ожидания без блокировки, если это возможно в Fortran.

Спасибо.

1 Ответ

7 голосов
/ 28 декабря 2011

Проще всего, если вы создадите пользовательский тип с вашими элементами данных и указателем на следующий элемент.Это предполагает односвязный список.Например,

   type MyList_type
      integer :: FirstItem
      real :: SecondItem
      etc
      type (MyList_type), pointer :: next_ptr => null ()
   end type MyList_type

Затем создайте первого члена с помощью «allocate».После этого вы пишете код для обхода списка, используя next_ptr для просмотра списка.Используйте «связанную» встроенную функцию, чтобы проверить, определено ли еще значение next_ptr, или вместо этого вы достигли конца списка.

Если вы пишете обычную последовательную программу на Фортране, то без блокировки / без ожиданияНе ошибка.Если вы пишете многопоточную / параллельную программу, то непротиворечивый доступ к переменным является проблемой.

Вот еще несколько примеров: http://fortranwiki.org/fortran/show/Linked+list. Еще лучше, связанные списки в Фортране четко объяснены в книге «Объяснение Фортрана 90/95» Меткалфа и Рейда.

...