lemming473

Pascal LinkedList example

Jan 17th, 2013
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.53 KB | None | 0 0
  1. program LinkedLists;
  2.  
  3. type
  4.  
  5.   NodePointerType = ^NodeType;
  6.  
  7.   NodeType = record
  8.     Name: string[30];
  9.     NextPointer: NodePointerType;
  10.   end;
  11.  
  12. var
  13.   Head, Tail, Current: NodePointerType;
  14.    
  15.   procedure Add(Name: string);
  16.     begin
  17.        new(Current);
  18.        Current^.Name := Name;
  19.        Current^.NextPointer := nil;
  20.        if Head = nil then
  21.           Head := Current
  22.        else
  23.           Tail^.NextPointer := Current;
  24.        Tail := Current;
  25.     end;
  26.  
  27.   procedure ViewAll;
  28.     var
  29.       n: word;
  30.      
  31.     begin
  32.        Current := Head;
  33.        n := 0;
  34.        while Current <> nil do
  35.           begin
  36.              writeln(n, ': ', Current^.Name);
  37.              Current := Current^.NextPointer;
  38.              n := n + 1;
  39.           end;
  40.       writeln()
  41.     end;
  42.  
  43.   procedure DeleteAll;
  44.     begin
  45.        Current := Head;
  46.        while Current <> nil do
  47.           begin
  48.              Current := Current^.NextPointer;
  49.              dispose(Head);
  50.              Head := Current;
  51.           end;
  52.     end;
  53.    
  54.   procedure ViewByIndex(index: word);    
  55.     begin
  56.       var
  57.         n: word;
  58.        
  59.         Current := Head;
  60.         n := 0;
  61.         while Current <> nil do
  62.           begin
  63.             if index = n then
  64.               begin
  65.                 writeln(Current^.Name);
  66.                 break;
  67.               end;
  68.             n := n + 1;
  69.             Current := Current^.NextPointer;
  70.           end;
  71.     end;
  72.    
  73.   procedure DeleteByIndex(index: word);
  74.     var
  75.       PreviousNode: NodePointerType;
  76.       n: word;
  77.      
  78.     begin        
  79.         Current := Head;
  80.         if index = 0 then
  81.           begin
  82.             Current := Current^.NextPointer;
  83.             dispose(Head);
  84.             Head := Current;
  85.             Exit;
  86.           end;
  87.          
  88.         n := 0;
  89.         while Current <> nil do
  90.           begin            
  91.             if index = n then
  92.               begin                
  93.                 PreviousNode^.NextPointer := Current^.NextPointer;
  94.                 dispose(Current);
  95.                 Exit;
  96.               end;
  97.             n := n + 1;
  98.             PreviousNode := Current;
  99.             Current := Current^.NextPointer;
  100.           end;
  101.     end;
  102.  
  103.   procedure AddByIndex(index: word; Name: string);
  104.     var
  105.       NextNode, PreviousNode: NodePointerType;
  106.       n: word;
  107.      
  108.     begin
  109.         new(Current);
  110.         Current^.Name := Name;      
  111.         if index = 0 then
  112.           begin
  113.             Current^.NextPointer := Head;
  114.             Head := Current;
  115.             Exit;
  116.           end;
  117.          
  118.         n := 0;
  119.         NextNode := Head;
  120.         while NextNode <> nil do
  121.           begin            
  122.             if index = n then
  123.               begin
  124.                 Current^.NextPointer := PreviousNode^.NextPointer;
  125.                 PreviousNode^.NextPointer := Current;                
  126.                 Exit;
  127.               end;
  128.             n := n + 1;
  129.             PreviousNode := NextNode;
  130.             NextNode := NextNode^.NextPointer;
  131.           end;
  132.         if NextNode = nil then
  133.           Add(Name);
  134.     end;
  135.  
  136.   procedure ReplaceByIndexSlow(index: word; Name: string);
  137.     begin
  138.       DeleteByIndex(index);
  139.       AddByIndex(index, Name);
  140.     end;
  141.    
  142.   procedure ReplaceByIndexFast(index: word; Name: string);
  143.     //under construction
  144.     {var
  145.       NextNode, PreviousNode: NodePointerType;
  146.       n: word;
  147.      
  148.     begin      
  149.         if index = 0 then
  150.           begin
  151.             if Head = nil then
  152.               Add(Name)
  153.             else
  154.            
  155.             Current^.NextPointer := Head;
  156.             Head := Current;
  157.             Exit;
  158.           end;
  159.          
  160.         n := 0;
  161.         NextNode := Head;
  162.         while NextNode <> nil do
  163.           begin            
  164.             if index = n then
  165.               begin
  166.                 Current^.NextPointer := PreviousNode^.NextPointer;
  167.                 PreviousNode^.NextPointer := Current;                
  168.                 Exit;
  169.               end;
  170.             n := n + 1;
  171.             PreviousNode := NextNode;
  172.             NextNode := NextNode^.NextPointer;
  173.           end;
  174.         if NextNode = nil then
  175.           Add(Name);}
  176.     end;
  177.    
  178. begin
  179.   Head := nil;
  180.   Add('Kolya');
  181.   Add('Dasha');
  182.   Add('Klim');
  183.   Add('Longnamedmen');
  184.   Add('Sh');
  185.  
  186.   //ViewByIndex(2);
  187.  
  188.   ViewAll;
  189.  
  190.   ReplaceByIndexSlow(2, 'Replaced');
  191.   //AddByIndex(5, 'Addedbyindex');
  192.  
  193.   //DeleteByIndex(0);
  194.   //DeleteByIndex(4);
  195.   //DeleteByIndex(2);
  196.  
  197.   ViewAll;
  198.  
  199.   //DeleteAll;
  200. end.
Advertisement
Add Comment
Please, Sign In to add comment