Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program LinkedLists;
- type
- NodePointerType = ^NodeType;
- NodeType = record
- Name: string[30];
- NextPointer: NodePointerType;
- end;
- var
- Head, Tail, Current: NodePointerType;
- procedure Add(Name: string);
- begin
- new(Current);
- Current^.Name := Name;
- Current^.NextPointer := nil;
- if Head = nil then
- Head := Current
- else
- Tail^.NextPointer := Current;
- Tail := Current;
- end;
- procedure ViewAll;
- var
- n: word;
- begin
- Current := Head;
- n := 0;
- while Current <> nil do
- begin
- writeln(n, ': ', Current^.Name);
- Current := Current^.NextPointer;
- n := n + 1;
- end;
- writeln()
- end;
- procedure DeleteAll;
- begin
- Current := Head;
- while Current <> nil do
- begin
- Current := Current^.NextPointer;
- dispose(Head);
- Head := Current;
- end;
- end;
- procedure ViewByIndex(index: word);
- begin
- var
- n: word;
- Current := Head;
- n := 0;
- while Current <> nil do
- begin
- if index = n then
- begin
- writeln(Current^.Name);
- break;
- end;
- n := n + 1;
- Current := Current^.NextPointer;
- end;
- end;
- procedure DeleteByIndex(index: word);
- var
- PreviousNode: NodePointerType;
- n: word;
- begin
- Current := Head;
- if index = 0 then
- begin
- Current := Current^.NextPointer;
- dispose(Head);
- Head := Current;
- Exit;
- end;
- n := 0;
- while Current <> nil do
- begin
- if index = n then
- begin
- PreviousNode^.NextPointer := Current^.NextPointer;
- dispose(Current);
- Exit;
- end;
- n := n + 1;
- PreviousNode := Current;
- Current := Current^.NextPointer;
- end;
- end;
- procedure AddByIndex(index: word; Name: string);
- var
- NextNode, PreviousNode: NodePointerType;
- n: word;
- begin
- new(Current);
- Current^.Name := Name;
- if index = 0 then
- begin
- Current^.NextPointer := Head;
- Head := Current;
- Exit;
- end;
- n := 0;
- NextNode := Head;
- while NextNode <> nil do
- begin
- if index = n then
- begin
- Current^.NextPointer := PreviousNode^.NextPointer;
- PreviousNode^.NextPointer := Current;
- Exit;
- end;
- n := n + 1;
- PreviousNode := NextNode;
- NextNode := NextNode^.NextPointer;
- end;
- if NextNode = nil then
- Add(Name);
- end;
- procedure ReplaceByIndexSlow(index: word; Name: string);
- begin
- DeleteByIndex(index);
- AddByIndex(index, Name);
- end;
- procedure ReplaceByIndexFast(index: word; Name: string);
- //under construction
- {var
- NextNode, PreviousNode: NodePointerType;
- n: word;
- begin
- if index = 0 then
- begin
- if Head = nil then
- Add(Name)
- else
- Current^.NextPointer := Head;
- Head := Current;
- Exit;
- end;
- n := 0;
- NextNode := Head;
- while NextNode <> nil do
- begin
- if index = n then
- begin
- Current^.NextPointer := PreviousNode^.NextPointer;
- PreviousNode^.NextPointer := Current;
- Exit;
- end;
- n := n + 1;
- PreviousNode := NextNode;
- NextNode := NextNode^.NextPointer;
- end;
- if NextNode = nil then
- Add(Name);}
- end;
- begin
- Head := nil;
- Add('Kolya');
- Add('Dasha');
- Add('Klim');
- Add('Longnamedmen');
- Add('Sh');
- //ViewByIndex(2);
- ViewAll;
- ReplaceByIndexSlow(2, 'Replaced');
- //AddByIndex(5, 'Addedbyindex');
- //DeleteByIndex(0);
- //DeleteByIndex(4);
- //DeleteByIndex(2);
- ViewAll;
- //DeleteAll;
- end.
Advertisement
Add Comment
Please, Sign In to add comment