Obecnie mam wdrożony pojedynczo połączonej listy, tak jak poniżej:Jak używać listy z sys/queue.h?
struct PeerNode {
struct Peer* cargo;
struct PeerNode* next;
};
... i mam struct, który zawiera parę tych połączonych listach, tak jak:
struct Torrent {
...
struct PeerNode* peer_list;
struct PeerNode* unchoked_peers;
...
}
I chciałby zastąpić to za pomocą makr dostarczonych przez sys/queue.h
. Wnoszę, że mogę wymienić mój kod z mniej więcej tak:
struct Torrent {
...
LIST_ENTRY(PeerNode, Peer) peer_list;
struct PeerNode* unchoked_peers;
...
}
Następnie, patrząc na man queue
wierzę, chciałbym zainicjować list robiąc coś takiego:
LIST_INIT(&peer_list);
LIST_INIT(unchoked_peers);
Jednak ja nie rozumiem, jak czynniki wpływają na korzystanie z listy. Ze strony man
jest napisane: "Makro LIST_ENTRY
deklaruje strukturę, która łączy elementy na liście", ale tak naprawdę nie rozumiem, co to oznacza.
Dlaczego chciałbym zadeklarować strukturę do łączenia elementów na liście? Czy każdy węzeł nie powinien być połączony z następnym węzłem za pomocą wskaźnika, tak jak moja początkowa implementacja listy powiązanej? Jak zastąpić moje połączone listy implementacją dostarczoną przez sys/queue.h
? Jak wstawić element do listy?
Cześć, szukam wszechstronnego użytkowania na przykład w oparciu o kolejce '' i wydaje się, że przykładowy link nie jest już prawidłowy. Może masz alternatywny link? –
osxUser