我的任务需要创建一个包来创建异构(使用继承)双向链表。将节点插入列表很简单,但是当我必须找到包含某些信息的节点时,我的问题就出现了。
PACKAGE AbstList IS
TYPE AbstractList IS LIMITED PRIVATE;
TYPE Node IS TAGGED PRIVATE;
TYPE NodePtr IS ACCESS ALL Node'Class;
PROCEDURE Init_Head(List: ACCESS AbstractList);
PROCEDURE InsertFront(List: ACCESS AbstractList; Item: IN NodePtr; Success: OUT Boolean);
PROCEDURE InsertRear(List: ACCESS AbstractList; Item: IN NodePtr; Success: OUT Boolean);
FUNCTION ListSize(List: ACCESS AbstractList) RETURN Integer;
-- The following are commented out as they are not complete in the package body
--FUNCTION FindItem(List: ACCESS AbstractList; Value: NodePtr) RETURN NodePtr;
--PROCEDURE Delete(List: ACCESS AbstractList; Item: NodePtr);
--PROCEDURE Print(List: ACCESS AbstractList);
PRIVATE
TYPE Node IS TAGGED RECORD
Rlink, Llink: NodePtr;
END RECORD;
TYPE AbstractList IS LIMITED RECORD
Count: Integer := 0;
Head: NodePtr := NEW Node;
END RECORD;
END AbstList;
我用来插入列表的一条记录如下:
TYPE CarName IS (GMC, Chevy, Ford, RAM);
TYPE Car IS NEW AbstList.Node WITH RECORD
NumDoors: Integer;
Manufacturer: CarName := GMC; -- Default manu.
END RECORD;
例如,我如何在列表中找到包含指定“制造商”的节点?有人建议我重载“=”运算符,尽管鉴于我所拥有的,我不确定这将如何工作。任何建议,将不胜感激。