Advertisement
arsel

linked list 2

Mar 27th, 2013
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.99 KB | None | 0 0
  1. Program linkedlists;
  2. Uses Crt;
  3.  
  4. Type
  5. TStudRec = Record
  6. Name, Surname : String;
  7. Id, Age : Integer;
  8. Gender : Char;
  9. End;
  10.  
  11. TNodePtr = ^TNode;
  12. TNode = Record
  13. StudRec : TStudRec;
  14. NodePtr : TNodePtr;
  15. End;
  16.  
  17. Var
  18. Head, Tail : TNodePtr;
  19. SampRec : TStudRec;
  20.  
  21. Procedure InitLL;
  22. Begin
  23. Head := nil;
  24. Tail := Head;
  25. End;
  26.  
  27. Procedure AddRecord(StudRec : TStudRec);
  28. Var
  29. Node : TNode;
  30.  
  31. Begin
  32. Node.StudRec := StudRec;
  33. New(Node.NodePtr);
  34. If Head = nil then
  35. Begin
  36. New(Head);
  37. New(Tail);
  38. Head^ := Node;
  39. End Else
  40. Begin
  41. Tail^.NodePtr^ := Node;
  42. End;
  43. Tail^ := Node;
  44. End;
  45.  
  46. Procedure InsertRecordByIndex(Index : Integer; StudRec : TStudRec);
  47. Var
  48. i : Integer;
  49. TempPtr : TNodePtr;
  50. Node, TempNode : TNode;
  51. Done : Boolean;
  52.  
  53. Begin
  54. Done := False;
  55. if Head = nil then
  56. Exit;
  57. i := 0;
  58. TempPtr := Head;
  59. Node.StudRec := StudRec;
  60. New(Node.NodePtr);
  61. If (Index = 0) then
  62. Begin
  63. TempNode := Head^;
  64. Head^ := Node;
  65. Node.NodePtr^ := TempNode;
  66. Done := True;
  67. End;
  68. If not Done then
  69. While (i < Index-1) do
  70. Begin
  71. If (TempPtr^.NodePtr^.NodePtr = nil) then
  72. Begin
  73. Done := True;
  74. Break;
  75. End;
  76. i := i + 1;
  77. TempPtr := TempPtr^.NodePtr;
  78. End;
  79. If not Done then
  80. Begin
  81. TempNode := TempPtr^.NodePtr^;
  82. TempPtr^.NodePtr^ := Node;
  83. Node.NodePtr^ := TempNode;
  84. End;
  85. End;
  86.  
  87. Procedure InsertRecordByID(ID : Integer; StudRec : TStudRec);
  88. Var
  89. TempPtr : TNodePtr;
  90. Node, TempNode : TNode;
  91. Done : Boolean;
  92.  
  93. Begin
  94. Done := False;
  95. if Head = nil then
  96. Exit;
  97. TempPtr := Head;
  98. Node.StudRec := StudRec;
  99. New(Node.NodePtr);
  100. If (TempPtr^.StudRec.ID = ID) then
  101. Begin
  102. TempNode := Head^;
  103. Head^ := Node;
  104. Node.NodePtr^ := TempNode;
  105. Done := True;
  106. End;
  107. While not Done do
  108. Begin
  109. If (TempPtr^.StudRec.ID = ID) then
  110. Break;
  111. If (TempPtr^.NodePtr^.NodePtr = nil) then
  112. Begin
  113. Done := True;
  114. Break;
  115. End;
  116. TempPtr := TempPtr^.NodePtr;
  117. End;
  118. If not Done then
  119. Begin
  120. TempNode := TempPtr^.NodePtr^;
  121. Node.NodePtr^ := TempNode;
  122. TempPtr^.NodePtr^ := Node;
  123. End;
  124. End;
  125.  
  126. Procedure DeleteNodeWithID(ID : Integer);
  127. Var
  128. TempPtr, PrevPtr : TNodePtr;
  129. Done : Boolean;
  130.  
  131. Begin
  132. Done := False;
  133. if Head = nil then
  134. Exit;
  135. PrevPtr := Head;
  136. TempPtr := Head;
  137. While True do
  138. Begin
  139. If (TempPtr^.StudRec.ID = ID) then
  140. Break;
  141. If (TempPtr^.NodePtr^.NodePtr = nil) then
  142. Begin
  143. Done := True;
  144. Break;
  145. End;
  146. PrevPtr := TempPtr;
  147. TempPtr := TempPtr^.NodePtr;
  148. End;
  149. If not Done then
  150. Begin
  151. If TempPtr = Head then
  152. Head := Head^.NodePtr
  153. Else
  154. Begin
  155. PrevPtr^.NodePtr := TempPtr^.NodePtr;
  156. End;
  157. End;
  158. End;
  159.  
  160. Procedure PrintAll(Head : TNodePtr);
  161. Var
  162. Node : TNodePtr;
  163.  
  164. Begin
  165. New(Node);
  166. Node := Head;
  167. While Node^.NodePtr <> nil do
  168. Begin
  169. Writeln('=================');
  170. Writeln(Node^.StudRec.Name);
  171. Writeln(Node^.StudRec.Surname);
  172. Writeln(Node^.StudRec.Id);
  173. Writeln(Node^.StudRec.Age);
  174. Writeln(Node^.StudRec.Gender);
  175. Writeln('=================');
  176. Node := Node^.NodePtr;
  177. End;
  178. Writeln('Done Printing.');
  179. End;
  180.  
  181. Procedure AssignRecord(StudRec : TStudRec; Name, Surname : String; ID, Age : Integer; Gender : Char);
  182. Begin
  183. SampRec.Name := Name;
  184. SampRec.Surname := Surname;
  185. SampRec.Age := Age;
  186. SampRec.Id := Id;
  187. SampRec.Gender := Gender;
  188. End;
  189.  
  190. Begin
  191. ClrScr;
  192. InitLL;
  193. AssignRecord(SampRec, 'Victor', 'Saliba', 19, 12345, 'M');
  194. AddRecord(SampRec);
  195. AssignRecord(SampRec, 'Mario', 'Petrack', 42, 00011, 'M');
  196. AddRecord(SampRec);
  197. AssignRecord(SampRec, 'Mary', 'Kels', 22, 20211, 'F');
  198. AddRecord(SampRec);
  199. AssignRecord(SampRec, 'Ken', 'Bolimpart', 19, 04148, 'M');
  200. AddRecord(SampRec);
  201. AssignRecord(SampRec, 'Kelly', 'Becks', 16, 04148, 'F');
  202. InsertRecordByID(00011, SampRec);
  203. DeleteNodeWithID(20211);
  204. Writeln('Done.');
  205. PrintAll(Head);
  206. Readln;
  207. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement