Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program pointer (input, output);
- TYPE
- tRefListe = ^tListe;
- tListe = record
- Name : string[80];
- Next : tRefliste;
- end;
- VAR
- p,
- first,
- insert : tRefListe;
- i : integer;
- Element : integer;
- ElementName : string;
- N : string;
- BEGIN
- First := NIL; {Verkettungszeiger zeigt auf nichts}
- Writeln('Einlesen der Strings');
- for i := 1 to 10 do
- begin
- new (p); {Legt neuen Record des Typs tListe an und zeigt auf Speicheradresse}
- write ('Geben Sie den Namen ein: ');
- readln (N); {Liest eingegeben String ein und speichert Ihn in N}
- p^.Name := n; {Dem Record-Datentyp wird der String N zugewiesen}
- p^.Next := first; {Next soll auf den Verkettungszeiger (Vorherigen) Record zeigen}
- first := p; {Verkettungszeiger soll auf Speicheradresse dieses Recordszeigen}
- end;
- Writeln ('>>> Einfuegen eines Elementes <<<');
- repeat
- Write ('Geben Sie das Element an, an das was angehangen werden soll: ');
- readln (Element); {Lese Index ein}
- write ('Geben Sie den Namen des Einzufuegenden Element ein: ');
- readln (ElementName); {Speichert Eingegebenen String}
- until element IN [1..10]; {Prüfe ob Element im Bereich von 1 bis 10 ansonsten Wiederholen}
- i := 1; {Index inizialsieren - Wird in der While Schleife hochgezaehlt}
- p := first; {Fange mit dem ersten Pointer-Record an}
- 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}
- begin
- 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}
- i := i+1; {Erhoehe I um 1}
- end; {Ende While Schleife -> Pointer zeigt auf gesuchten Record}
- new (insert); {Lege Speicher fuer Recordtyp an und Zeige auf Speicheradressen anfang}
- 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}
- 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}
- insert^.name := ElementName; {Den Eingelesenen String dem eingefuegten Record zuweisen}
- Writeln ('>>> Ausgabe 2 mit eingefuegten Element <<<');
- p := first; {Pointer auf das Anfangselement setzten --> Auf das zuletzt eingegebene}
- WHILE (p <> nil) do
- begin
- writeln (p^.Name); {Gebe das alter vom aktuellen Record-Element aus}
- p := p^.next;{Pointer wird die Speicheradresse des nächsten Record-Elemts zugewiesen}
- end; {Ende While-schleife}
- END.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement