Advertisement
apfel2kuchen

Pointer - Element in Lineare Liste einfügen

Nov 17th, 2014
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. program pointer (input, output);
  2.  
  3. TYPE
  4. tRefListe = ^tListe;
  5. tListe = record
  6. Name : string[80];
  7. Next : tRefliste;
  8. end;
  9.  
  10. VAR
  11. p,
  12. first,
  13. insert : tRefListe;
  14. i : integer;
  15. Element : integer;
  16. ElementName : string;
  17. N : string;
  18.  
  19. BEGIN
  20. First := NIL; {Verkettungszeiger zeigt auf nichts}
  21. Writeln('Einlesen der Strings');
  22. for i := 1 to 10 do
  23. begin
  24. new (p); {Legt neuen Record des Typs tListe an und zeigt auf Speicheradresse}
  25. write ('Geben Sie den Namen ein: ');
  26. readln (N); {Liest eingegeben String ein und speichert Ihn in N}
  27. p^.Name := n; {Dem Record-Datentyp wird der String N zugewiesen}
  28. p^.Next := first; {Next soll auf den Verkettungszeiger (Vorherigen) Record zeigen}
  29. first := p; {Verkettungszeiger soll auf Speicheradresse dieses Recordszeigen}
  30. end;
  31.  
  32.  
  33. Writeln ('>>> Einfuegen eines Elementes <<<');
  34. repeat
  35. Write ('Geben Sie das Element an, an das was angehangen werden soll: ');
  36. readln (Element); {Lese Index ein}
  37. write ('Geben Sie den Namen des Einzufuegenden Element ein: ');
  38. readln (ElementName); {Speichert Eingegebenen String}
  39. until element IN [1..10]; {Prüfe ob Element im Bereich von 1 bis 10 ansonsten Wiederholen}
  40.  
  41. i := 1; {Index inizialsieren - Wird in der While Schleife hochgezaehlt}
  42. p := first; {Fange mit dem ersten Pointer-Record an}
  43. while (p <> NIL) and (i < element) do {Pointer darf nicht NIL sein && i < eingelesenes Element ---> Am ende ist Pointer somit auf Gesuchtem Record, an diesen soll was angehangen werden}
  44. begin
  45. p := p^.next; {Pointer erhaelt schon die Speicheradresse vom naechsten Verkettungselement ---> BEACHTE i < Element --> i steht auf 2 wenn 3 gesuchtes Element ist! Somit wird kein >= benoetigt}
  46. i := i+1; {Erhoehe I um 1}
  47. end; {Ende While Schleife -> Pointer zeigt auf gesuchten Record}
  48. new (insert); {Lege Speicher fuer Recordtyp an und Zeige auf Speicheradressen anfang}
  49. insert^.next := p^.next; {Insert.Next soll auf den naechsten Pointer/Record vom Aktuellen Pointer zeigen --> Da Insert ja hinter dem Aktuellen pointer eingefuegt werden soll}
  50. p^.next := insert; {Der Verkettungszeiger muss nun auf den Neuen/Record zeigen, somit wird dieser eingefuegt --> Der Eingefugte Record zeigt ja auf den eigentlich folgenden Record}
  51. insert^.name := ElementName; {Den Eingelesenen String dem eingefuegten Record zuweisen}
  52.  
  53.  
  54.  
  55. Writeln ('>>> Ausgabe 2 mit eingefuegten Element <<<');
  56. p := first; {Pointer auf das Anfangselement setzten --> Auf das zuletzt eingegebene}
  57. WHILE (p <> nil) do
  58. begin
  59. writeln (p^.Name); {Gebe das alter vom aktuellen Record-Element aus}
  60. p := p^.next;{Pointer wird die Speicheradresse des nächsten Record-Elemts zugewiesen}
  61. end; {Ende While-schleife}
  62.  
  63. END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement