Witajcie
Tak się składa, że jestem samoukiem w programowaniu. Obecnie zapoznałem się z listami - to taka dynamiczna struktura danych. Moje pytanie dotyczące list. Czy istnieje możliwość zrobienia listy w liście i to dosłownie. Na przykład lista autorów i podlista książek.
Adam Mickiewicz
Pan Tadeusz
Dziady
Oda do młodości
Maria Konopnicka
Rota
Nasza szkapa
Przeszukałem internet i nie znalazłem odpowiedzi na powyższe pytanie. Najprościej to można byłoby to rozwiązać za pomocą tablic w poszczególnych węzłach. Pytam się dlatego, że lubię czasami drążyć tematy, które mnie interesują a na które nie znajduję nigdzie odpowiedzi.
Pozdrawiam
- Rejestracja:około 6 lat
- Ostatnio:około miesiąc
- Lokalizacja:Polska
- Postów:82
0

Delor
https://pl.wikipedia.org/wiki/Pytanie_retoryczne :)
Adept123
Lista w liście - język programowania pascal lub c
Adept123
Ciekawy jestem jak wygląda taki kod w pascalu lub w c.

- Rejestracja:ponad 13 lat
- Ostatnio:prawie 3 lata
1
W języku proceduralnym wykorzystujesz wskaźniki do struktur i nazwy metod z prefiksem określającym rodzaj struktury.
Np.
lista_wstaw(wskaznik_na_liste_ksiazek, wskaznik_na_ksiazke, wskaznik_na_nowy_element)
lista_znajdz(wskaznik_na_liste_ksiazek, tytul_ksiazki)
lista_skasuj(wskaznik_na_liste_ksiazek, tytul_ksiazki)
lista_skasuj(wskaznik_na_liste_ksiazek, wskaznik_na_ksiazke)
lista_rozmiar(wskaznik_na_liste_ksiazek)
...
edytowany 1x, ostatnio: vpiotr
- Rejestracja:ponad 6 lat
- Ostatnio:11 miesięcy
- Postów:12
0
@Adept123: Akurat w przypadku problemu przedstawionego przez Ciebie zdecydowanie lepszą kolekcją do zastosowania będzie mapa. Jako klucz możesz ustawić twórcę, a jako wartość - zbiór dzieł danego artysty. Dla przykładu, w Javie typ takiej mapy wyglądałby następująco: Map<Author, Set<Book>>
edytowany 2x, ostatnio: pitagoras3

- Rejestracja:ponad 6 lat
- Ostatnio:około 2 lata
3
Tu początek listy list w C: https://wandbox.org/permlink/k0x6ts5Nl0GxPPmD
Tyle że to wymyślanie koła na nowo. Spójrz na języki obiektowe. Tam takie struktury są standardowo zaimplementowane. Dużo szybciej zobaczysz efekty/zrozumiesz jak działają.
- Rejestracja:około 6 lat
- Ostatnio:około miesiąc
- Lokalizacja:Polska
- Postów:82
0
Kod :)
Program ListaAutorow;
{ i ich dzieł :) }
uses Crt;
type
wsk_nast = ^osoba;
lista_ksiazek = ^ksiazki;
ksiazki = record
tytul: string;
nastepny: lista_ksiazek
end;
ident = record
imie,
nazwisko: string
end;
osoba = record
nazw: ident;
listadziel: lista_ksiazek;
nast: wsk_nast
end;
var
perso,gl,lis: wsk_nast;
nr_autora: integer;
procedure WydrukKsiazek(lista: lista_ksiazek);
var
nr_ksiazki: integer;
begin
writeln('------------------LISTA KSIĄŻEK:---------- ');
nr_ksiazki := 1;
repeat
if lista <> nil then
writeln(' Tytuł ',nr_ksiazki,': ',lista^.tytul);
lista := lista^.nastepny;
nr_ksiazki := nr_ksiazki + 1
until lista = nil;
end;
procedure ListaKsiazek(var pocz_listy: lista_ksiazek; var li_obcych: lista_ksiazek);
var
GO: boolean;
NowyWezel,glowa_listy: lista_ksiazek;
nr_ksiazki: integer;
begin
GO := false; nr_ksiazki := 1;
repeat
New(NowyWezel);
write('Książka nr: ',nr_ksiazki,' ');
readln(NowyWezel^.tytul);
if NowyWezel^.tytul <> '' then
begin
if pocz_listy = li_obcych then
begin
glowa_listy := NowyWezel;
li_obcych := NowyWezel;
li_obcych^.nastepny := nil
end
else
begin
li_obcych^.nastepny := NowyWezel;
NowyWezel^.nastepny := nil
end;
li_obcych := NowyWezel;
GO := true;
nr_ksiazki := nr_ksiazki + 1
end
else begin GO := false; li_obcych := nil; dispose(NowyWezel); NowyWezel := nil end
until NOT GO;
WydrukKsiazek(glowa_listy);
pocz_listy := glowa_listy;
glowa_listy := nil
end;
procedure NowyRekord(persona: wsk_nast);
var
i: integer;
poczatek_listy,lista: lista_ksiazek;
begin
writeln('Pusty klawisz enter przerywa pętlę');
with persona^, nazw, listadziel^ do
begin
write('Podaj imię autora i naciśnij klawisz ENTER: ');
readln(imie);
if imie <> '' then
begin
write('Podaj nazwisko autora i naciśnij klawisz ENTER: ');
readln(nazwisko);
poczatek_listy := listadziel;
lista := poczatek_listy;
ListaKsiazek(poczatek_listy,lista);
listadziel := poczatek_listy;
poczatek_listy := nil;
end
end
end;
procedure WydrukRekordu(persona: wsk_nast);
begin
with persona^, nazw do
begin
writeln(imie:23,nazwisko:15);
WydrukKsiazek(listadziel);
end
end;
procedure DodajNowyDoListy(lista: wsk_nast);
begin
repeat
New(perso);
NowyRekord(perso);
if perso^.nazw.imie = '' then break
else
begin
if lista = nil then
begin
lista := perso;
lista^.nast := nil;
gl := lista;
end
else
begin
lista^.nast := perso;
perso^.nast := nil
end;
lista := perso;
end
until perso^.nazw.imie = ''
end;
begin
New(lis); gl := nil; lis := nil;
ClrScr;
DodajNowyDoListy(lis);
lis := gl; nr_autora := 1;
ClrScr;
repeat
writeln('Autor nr: ',nr_autora:2,'Imię':10,'Nazwisko':15);
WydrukRekordu(lis);
nr_autora := nr_autora + 1; lis := lis^.nast
until lis = nil;
readln; gl := nil
end.
edytowany 6x, ostatnio: Adept123

Możesz zamienić początkowe
```
na ```pascal
, wtedy będzie kolorowało składnię.