Wypisanie listy dwukierunkowej od tyłu.

0

Tak jak w temacie, prosiłbym aby ktoś pokazał mi jak przerobić ten kod aby wypisać listę dwukierunkową od tyłu, nie potrafię do tego dojść, męczę się z tym i nic... :(

 type
  lista_zmiennych = ^zmienne;

  zmienne = record
    zm : string;
    nast, poprz : lista_zmiennych;
  end;

var
  glowa : lista_zmiennych;
  ogon : lista_zmiennych;
  wsk : lista_zmiennych;

begin

glowa := nil;
ogon := nil;

new(wsk);                // tworzenie nowego elementu listy
wsk^.zm := tablica_string[j];      
wsk^.nast := glowa;
glowa := wsk;

// wypisanie listy
wsk := glowa;
while (wsk <> nil) do
begin
    writeln(wsk^.zm);
    wsk := wsk^.nast;
end;

end.
0
wsk := ogon ;
while (wsk <> nil) do
begin
    writeln(wsk^.zm);
    wsk := wsk^.poprz ;
end;

Oczywiście musisz poprawić budowanie listy.

0

No dobra ale gdzie to mam wstawić, zamiast tamtego wypisania? To wtedy nic mi nie wypisuje właśnie, bo próbowałem już tak :/ I co rozumiesz poprzez poprawę budowania listy? Staram się właśnie zrozumieć w miarę tę strukturę, dlatego przyjmę każdą radę :)

0

dodałeś jeden element do listy zaś ogon masz nadal nil

0

tablica_string[j] to u mnie kolejne linie tekstu, które wpisuje właśnie do tablicy, a konkretniej wpisuje np procedure jakąś z cała zawartością czyli:
procedure
var ....
begin
{...}
end;
I jeżeli zrobię to na liście jednokierunkowej to wypisze mi to na odwrót, a chce właśnie na dwukierunkowej bo wiem, że tu można od tyłu czyli w poprawnej kolejności mi wypisze, ale ten kod co podałeś, jak wpiszę do siebie to nic nie wypisuje w ogóle... Nie rozumiem tego.

0

A nie prościej użyć pętli:
for J:=Length(tablica_string) downto 1 do Write(tablica_string[j]);
WriteLn;
?

0

Teoretycznie tak, ale to bym musiał stworzyć dodatkową tablicę, do której wczytuję tą procedurę kolejno, potem zrobić tą pętlę for ... downto żeby wypisać na odwrót i dopiero to zapisać do listy. A tak to od razu z poziomu listy bym to zrobił, chyba bardziej optymalne rozwiązanie tylko nie wiem jak to właśnie zrobić.

1 użytkowników online, w tym zalogowanych: 0, gości: 1