Delphi中链表怎么实现(100分,对大侠们应该很简单呵)(100分)

S

stenfu

Unregistered / Unconfirmed
GUEST, unregistred user!
Delphi中链表怎么实现(100分,对大侠们应该很简单呵)
 
用动态数组吧,很方便的.
 
type
LinkLabel = ^ TNodeLabel;
TNodeLabel = record
NodeData: TLabel;
Next: LinkLabel;
end;

//==============================表尾插入節點(Label)====================================
function InsNode(var nNode: LinkLabel
sInsData: TLabel) : LinkLabel;
var
TempNode,NewNode: LinkLabel;
begin
TempNode:=nNode;
New(NewNode);
NewNode^.NodeData:=sInsData;
NewNode.Next:=NIL;
if (nNode = NIL) then nNode:= NewNode
else
begin
while (TempNode.Next<>NIL) do TempNode:=TempNode.Next;
TempNode.Next:= NewNode;
end;
InsNode:= NewNOde;
end;

//================================查找節點(Label)======================================
function SerNode(var nNode: LinkLabel
sSerDataName: string) : LinkLabel;
var
tempNode: LinkLabel;
begin
tempNode:= nNode;
while (tempNode.NodeData.Name <> sSerDataName) and (tempNode <> NIL) do
tempNode:= tempNode.Next;
SerNode:= tempNode;
end;

//================================刪除節點(Label)======================================
procedure DelNode(var nNode: LinkLabel
sDelDataName: string);
var
pNode,qNode: LinkLabel;
begin
pNode:= nNode;
qNode:= nNode;
while (qNode.NodeData.Name <> sDelDataName) and (qNode.Next <> NIL)do
begin
pNode:= qNode;
qNode:= qNode.Next;
end;
if qNode = nNode then //刪除頭節點
begin
nNode:= nNode.Next;
qNode.Next:= NIL;
end
else if qNode.Next = NIL then pNode.next:= NIL //刪除尾節點
else begin
pNode.Next:= qNode.Next;
qNode.Next:= NIl;
end;
qNode.NodeData.Free;
Dispose(qNode)
//釋放空間
end;
 
我用记录型的,
 
同意leway。
to:stenfu
TNodeLabel = record
NodeData: TLabel;
Next: LinkLabel;
end;
就是定义一个记录啊。
 
再看看这个。
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1551973
 
既然用Delphi了,自己写链表就浪费了,用TList吧!
 
接受答案了.
 
顶部