【发布时间】:2021-12-01 06:59:50
【问题描述】:
我可以用这种方式创建一个没有指针的 Fortran 链表吗:
列表:
TYPE Allocation_List
PRIVATE
CLASS(*), ALLOCATABLE :: Item
CLASS(Allocation_List), ALLOCATABLE :: Next
CONTAINS
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: IsItem => IsItem_AllocationList
PROCEDURE, PASS(self), PUBLIC :: SetItem => SetItem_AllocationList
PROCEDURE, PASS(self), PUBLIC :: GetItem => GetItem_AllocationList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: FreeItem => FreeItem_AllocationList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: IsNext => IsNext_AllocationList
PROCEDURE, PASS(self), PUBLIC :: SetNext => SetNext_AllocationList
PROCEDURE, PASS(self), PUBLIC :: GetNext => GetNext_AllocationList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: FreeNext => FreeNext_AllocationList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: Reset => Reset_AllocationList
PROCEDURE, PASS(self), PUBLIC :: Display => Display_AllocationListItem
END TYPE Allocation_List
链接列表:
TYPE Allocation_LinkedList
PRIVATE
CLASS(Allocation_List), ALLOCATABLE :: HeadList
CLASS(Allocation_List), ALLOCATABLE :: CurrList
CLASS(Allocation_List), ALLOCATABLE :: TailList
CONTAINS
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: IsSet => IsSet_AllocationLinkedList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: Initiate => Initiate_AllocationLinkedList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: Connect => Connect_AllocationLinkedList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: GetCurr => GetCurrent_AllocationLinkedList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: ForCurr => ForwardCurrent_AllocationLinkedList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: DispCurr => DisplayCurrent_AllocationLinkedList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: ResetCurr => ResetCurrent_AllocationLinkedList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: Reset => Reset_AllocationLinkedList
PROCEDURE, PASS(self), PUBLIC, NON_OVERRIDABLE :: Display => Display_AllocationLinkedList
END TYPE Allocation_LinkedList
此列表在用于创建链接列表时是否有效?什么可能出错,有什么缺点吗?指针相对于可分配对象的优势是什么?
【问题讨论】:
-
Fortran 2008 允许我使用,但进入编译器需要很长时间。深拷贝存在问题。
-
这个链表会工作吗?是否比使用指针更好?
-
我说是允许的(递归可分配)。什么是“更好”可能是相当主观的。这是一个相对较新的东西,很少有人会在多个编译器方面有实践经验。编译它,你会看到它的效果如何。
-
我将测试这个 Linked List 的实现并上传到 Git。谢谢你帮助我@VladimirF
-
我不认为这个实现可以处理在列表中插入新元素而不产生
O(N)成本?这会比由指针组成的链表更糟糕。
标签: linked-list fortran fortran2008