0
我在寫鏈接列表。這裏是我的代碼:通用鏈接列表中的虛擬節點
Linked_List.ads
generic
type T is private;
package Linked_List is
type Node;
type NodeAccess is access Node;
type Node is record
Data : T;
Next : NodeAccess := null;
end record;
type List is record
Head : NodeAccess;
Has_Dummy_Head : Boolean;
Size : Integer;
end record;
type ListAccess is access List;
function Get_New_List(Has_Dummy_Head : Boolean) return ListAccess;
private
function Get_New_Node(Data : T; Next : NodeAccess) return NodeAccess;
end Linked_List;
Linked_List.adb
package body Linked_List is
function Get_New_Node(Data : T; Next : NodeAccess) return NodeAccess is
New_Node : NodeAccess := new Node;
begin
New_Node.all := (Data => Data, Next => Next);
return New_Node;
end Get_New_Node;
function Get_New_List(Has_Dummy_Head : Boolean) return ListAccess is
New_List : ListAccess := new List;
begin
if Has_Dummy_Head = True then
New_List.all := (Head => Get_New_Node(Data => null, Next => null), Has_Dummy_Head => True, Size => 0);
else
New_List.all := (Head => null, Has_Dummy_Head => False, Size => 0);
end if;
return New_List;
end Get_New_List;
end Linked_List;
我不知道如何添加頭時,列表與假人頭部(Has_Dummy_Head是真的)。我試着將節點中的數據字段設置爲空,但我沒有工作。我不知道怎麼去T類型
我不能讓它工作。如果我用Get_New_Node(Data =><>,Next => null)替換 Get_New_Node(Data => null,Next => null) I「丟失操作數」錯誤。 如果我添加() Get_New_Node(Data =>(<>),Next => null) 我得到「(Ada 2005)框只允許與命名符號」錯誤 順便說一句我正在這樣做的教育目的。 –
方框符號(「<>」)只能用於聚合中(正如我在調用'new Node'時所做的那樣)。您不能將此作爲子程序調用傳遞。正如我所提到的,如果您真的需要,您可以定義一個常量(使用聚合進行初始化)並將其傳遞給Get_New_Node。但是,如果你需要這個,它可能表明一個設計可能會有更好的不同。 – manuBriot