furious programming nawet w kompendium na 4 programmers lista jest porównywana do tablicy, moim błędem było założenie, że są bardziej podobne.
Poczytałem trochę więcej (jeszcze sporo przede mną), znalazłem nawet kod do aplikacji konsolowej dotyczący listy jednokierunkowej. Trochę się zacząłem nim bawić co trochę bardziej mi bardziej przybliżyło listę. Zetknąłem się jednak z problemem, który nie wiem jak ugryźć. Mam taki kod (ten, który znalazłem, ale po moich "próbach"):
type // typ elementu listy jednokierunkowej
PslistEl = ^slistEl;
slistEl = record
next : PslistEl;
data : integer;
lol : integer;
end;
var
L : PslistEl; // wskaźnik początku listy
e,f,p,r : PslistEl; // wskaźniki elementów listy
n : integer; // liczba elementów do posortowania
v : integer; // wartość elementu 1
w : integer; // wartość elementu 2
i : integer; // licznik elementów
begin
new(L); // tworzymy pierwszego strażnika
new(L^.next); // tworzymy drugiego strażnika
L^.next^.next := nil; // drugi strażnik jest ostatni na liście
L^.next^.data := MAXINT; // wartość drugiego strażnika
read(n); // odczytujemy liczbę elementów
for i := 1 to n do
begin
read(v); // czytamy element
read(w); // czytamy element 2
p := L; // p ustawiamy na pierwszego strażnika
while v > p^.next^.data do // szukamy miejsca wstawienia
p := p^.next;
new(e); // tworzymy nowy element
new(f);
e^.data := v; // inicjujemy element
f^.lol := w;
e^.next := p^.next;
f^.next := p^.next;
p^.next := e; // element wstawiamy do listy L
end;
p := L^.next; // listę przesyłamy na wyjście
while p^.next <> nil do
begin
write(p^.data,' ');
write(p^.lol,' ');
p := p^.next;
end;
writeln;
while L <> nil do // usuwamy listę z pamięci
begin
e := L;
L := L^.next;
dispose(e);
end;
ReadLn;
end.
Teraz jeśli dobrze rozumiem record może zawierać ile danych chce (np. mógłbym wpisać całą obsadę filmu i to każde nazwisko jako osobny element)?
Idąc dalej spróbowałem dołożyć element do recordu (w).
W pierwsze części nic nie dopisywałem bo jeśli dobrze rozumiem L odnosi się do PslistEl a to do mojego rekordu, w którym już jest w.
Dalej wczytujemy v i w.
I teraz dochodzimy do pętli sortującej i tu sie pojawiają schody.
Pierwotnie było new(e) czyli stworzenie nowego elementu; e się odnosi do w dalszej części do v. Czy żeby uwzględnić w musze stworzyć nowy osobny element? (stworzyłem f)
Potem jest wstawienie elementu do listy i znowu powinienem wstawić je osobno czy jako "pakiet"?
dodanie znacznika <code class="delphi">
- @furious programming