dポイントプレゼントキャンペーン実施中!

通信大学の必修科目でパスカル言語を勉強し始めたのですが、

Tausch := ioZeigerEins;
ioZeigerEins := ioZeigerZwei;
ioZeigerZwei := Tausch;

のように、ioZeigerEins と ioZeigerZwei を交換するやり方は理解できたのですが、

procedure SortiereListe の中の、

Tausch := Element^.next;
Element^.next := Anfang;
Ende^.next := Tausch;
ZeigerTausch (Anfang, Element);

で、どうしてElement^.next が出てくるのかが良く理解出来ません。
長々と書いてしまいましたが、どうぞ宜しくお願い致します。

------------------------------------------------------
program TesteSortiereListe (input, output);
type
tNatZahl = 0..maxint;
tRefListe = ^tListe;
tListe = record
info : tNatZahl;
next : tRefListe;
end;
var
RefListe : tRefListe;

procedure SortiereListe (var ioRefListe : tRefListe);
{ sortiert eine lineare Liste aufsteigend }

var
Anfang,
Ende,
Tausch,
Suche,
Element : tRefListe;

function ZeigerTausch (var ioZeigerEins, ioZeigerZwei : tRefliste) : tRefListe;
begin
Tausch := ioZeigerEins;
ioZeigerEins := ioZeigerZwei;
ioZeigerZwei := Tausch;
end; { ZeigerTausch }

begin
if (ioRefListe <> nil) and (ioRefListe^.next <> nil) then
begin
Anfang := ioRefListe;
Ende := ioRefListe^.next;
if Ende^.info < Anfang^.info then
begin
Anfang^.next := Ende^.next;
Ende^.next := Anfang;
ZeigerTausch (Ende, Anfang);
end; { if-Schleife }

while Ende^.next <> nil do
begin
Element := Ende^.next;
if Element^.info > Ende^.info then
Ende := Ende^.next
else
if Element^.info < Anfang^.info then
begin
Tausch := Element^.next;
Element^.next := Anfang;
Ende^.next := Tausch;
ZeigerTausch (Anfang, Element);
end { then-Zweig }
else
begin
Suche := Anfang;
while Suche^.next^.info < Element^.info do
Suche := Suche^.next;
Tausch := Element^.next;
Element^.next := Suche^.next;
Suche^.next := Element;
Ende^.next := Tausch;
end; { else-Zweig }
end; { while-Schleife }
end; { if-Schleife }
ioRefListe := Anfang;
end; {SortiereListe }

procedure Anhaengen (var ioListe : tRefListe; inZahl : tNatZahl);
{ Haengt inZahl an ioListe an }

var Zeiger : tRefListe;

begin
Zeiger := ioListe;
if Zeiger = nil then
begin
new(ioListe);
ioListe^.info := inZahl;
ioListe^.next := nil;
end
else
begin
while Zeiger^.next <> nil do
Zeiger := Zeiger^.next;

new(Zeiger^.next);
Zeiger := Zeiger^.next;
Zeiger^.info := inZahl;
Zeiger^.next := nil;
end;
end;

procedure ListeEinlesen(var outListe : tRefListe);
{ liest eine durch Leerzeile abgeschlossene Folge von Integer-
Zahlen ein und speichert diese in der linearen Liste RefListe. }

var
Liste : tRefListe;
Zeile : string;
Zahl, Code : integer;

begin
writeln('Bitte geben Sie die zu sortierenden Zahlen ein.');
writeln('Beenden Sie Ihre Eingabe mit einer Leerzeile.');
Liste := nil;
readln(Zeile);
val(Zeile, Zahl, Code); { var konvertiert String nach Integer }
while Code=0 do
begin
Anhaengen (Liste, Zahl);
readln (Zeile);
val (Zeile, Zahl, Code);
end; { while}

outListe := Liste;
end; {ListeEinlesen}

procedure GibListeAus(inListe : tRefListe);
{ Gibt die Elemente von inListe aus }

var Zeiger : tRefListe;

begin
Zeiger := inListe;
while Zeiger <> nil do
begin
writeln(Zeiger^.info);
Zeiger := Zeiger^.next;
end; { while }
end; { GibListeAus }

begin
ListeEinlesen(RefListe);
SortiereListe(RefListe);
GibListeAus(RefListe);
end.

A 回答 (2件)

いわゆる「連結リスト」というデータ構造なので、ここらあたり参考にしてみては。



http://ja.wikipedia.org/wiki/%E9%80%A3%E7%B5%90% …
    • good
    • 0
この回答へのお礼

理解できました✿
参考リンクどうもありがとうございました!
また分からなくなった時には宜しくお願い致します。

お礼日時:2011/10/31 23:19

>どうしてElement^.next が出てくるのかが良く理解出来ません。



と言われても、「そこに必要な情報が入っているから」としか言えません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!