Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
100% found this document useful (1 vote)
521 views

Contoh Source Code Pascal Implementasi Linked List

The document defines a linked list program that stores student records. It includes procedures to initialize an empty linked list, add records to the end of the list, insert records by index or ID, delete nodes by ID, and print all records in the list. The main program assigns sample records, adds them to the linked list, inserts and deletes nodes, then prints out the final list.

Uploaded by

SchwarzgelbenDie
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
521 views

Contoh Source Code Pascal Implementasi Linked List

The document defines a linked list program that stores student records. It includes procedures to initialize an empty linked list, add records to the end of the list, insert records by index or ID, delete nodes by ID, and print all records in the list. The main program assigns sample records, adds them to the linked list, inserts and deletes nodes, then prints out the final list.

Uploaded by

SchwarzgelbenDie
Copyright
© Attribution Non-Commercial (BY-NC)
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

Program linkedlists; Uses Crt; Type TStudRec = Record Name, Surname : String; Id, Age : Integer; Gender : Char;

End; TNodePtr = ^TNode; TNode = Record StudRec : TStudRec; NodePtr : TNodePtr; End; Var Head, Tail : TNodePtr; SampRec : TStudRec; Procedure InitLL; Begin Head := nil; Tail := Head; End; Procedure AddRecord(StudRec : TStudRec); Var Node : TNode; Begin Node.StudRec := StudRec; New(Node.NodePtr); If Head = nil then Begin New(Head); New(Tail); Head^ := Node; End Else Begin Tail^.NodePtr^ := Node; End; Tail^ := Node; End; Procedure InsertRecordByIndex(Index : Integer; StudRec : TStudRec); Var i : Integer; TempPtr : TNodePtr; Node, TempNode : TNode; Done : Boolean; Begin Done := False; if Head = nil then Exit; i := 0; TempPtr := Head; Node.StudRec := StudRec; New(Node.NodePtr);

If (Index = 0) then Begin TempNode := Head^; Head^ := Node; Node.NodePtr^ := TempNode; Done := True; End; If not Done then While (i < Index-1) do Begin If (TempPtr^.NodePtr^.NodePtr = nil) then Begin Done := True; Break; End; i := i + 1; TempPtr := TempPtr^.NodePtr; End; If not Done then Begin TempNode := TempPtr^.NodePtr^; TempPtr^.NodePtr^ := Node; Node.NodePtr^ := TempNode; End; End; Procedure InsertRecordByID(ID : Integer; StudRec : TStudRec); Var TempPtr : TNodePtr; Node, TempNode : TNode; Done : Boolean; Begin Done := False; if Head = nil then Exit; TempPtr := Head; Node.StudRec := StudRec; New(Node.NodePtr); If (TempPtr^.StudRec.ID = ID) then Begin TempNode := Head^; Head^ := Node; Node.NodePtr^ := TempNode; Done := True; End; While not Done do Begin If (TempPtr^.StudRec.ID = ID) then Break; If (TempPtr^.NodePtr^.NodePtr = nil) then Begin Done := True; Break; End; TempPtr := TempPtr^.NodePtr; End; If not Done then Begin TempNode := TempPtr^.NodePtr^;

Node.NodePtr^ := TempNode; TempPtr^.NodePtr^ := Node; End; End; Procedure DeleteNodeWithID(ID : Integer); Var TempPtr, PrevPtr : TNodePtr; Done : Boolean; Begin Done := False; if Head = nil then Exit; PrevPtr := Head; TempPtr := Head; While True do Begin If (TempPtr^.StudRec.ID = ID) then Break; If (TempPtr^.NodePtr^.NodePtr = nil) then Begin Done := True; Break; End; PrevPtr := TempPtr; TempPtr := TempPtr^.NodePtr; End; If not Done then Begin If TempPtr = Head then Head := Head^.NodePtr Else Begin PrevPtr^.NodePtr := TempPtr^.NodePtr; End; End; End; Procedure PrintAll(Head : TNodePtr); Var Node : TNodePtr; Begin New(Node); Node := Head; While Node^.NodePtr <> nil do Begin Writeln('================='); Writeln(Node^.StudRec.Name); Writeln(Node^.StudRec.Surname); Writeln(Node^.StudRec.Id); Writeln(Node^.StudRec.Age); Writeln(Node^.StudRec.Gender); Writeln('================='); Node := Node^.NodePtr; End; Writeln('Done Printing.'); End;

Procedure AssignRecord(StudRec : TStudRec; Name, Surname : String; ID, Age : Int eger; Gender : Char); Begin SampRec.Name := Name; SampRec.Surname := Surname; SampRec.Age := Age; SampRec.Id := Id; SampRec.Gender := Gender; End; Begin ClrScr; InitLL; AssignRecord(SampRec, 'Victor', 'Saliba', 19, 12345, 'M'); AddRecord(SampRec); AssignRecord(SampRec, 'Mario', 'Petrack', 42, 00011, 'M'); AddRecord(SampRec); AssignRecord(SampRec, 'Mary', 'Kels', 22, 20211, 'F'); AddRecord(SampRec); AssignRecord(SampRec, 'Ken', 'Bolimpart', 19, 04148, 'M'); AddRecord(SampRec); AssignRecord(SampRec, 'Kelly', 'Becks', 16, 04148, 'F'); InsertRecordByID(00011, SampRec); DeleteNodeWithID(20211); Writeln('Done.'); PrintAll(Head); Readln; End.

You might also like