Ich studiere sys/queue.h
von FreeBSD und habe eine Frage:
In sys/queue.h
ist LIST_ENTRY
wie folgt definiert:
Warum behält die Adresse des vorherigen nächsten Elements ( struct type **le_prev
) und nicht einfach vorhergehende Elemente wie struct type *le_prev
?
Wenn Sie die Datei queue.h von Anfang an gelesen hätten, könnten Sie das tun habe folgenden Kommentar:
%Vor%so Liste, die O (1) Insertion und Deletion bietet, aber nur Vorwärtsdurchlauf. Um dies zu erreichen, brauchen Sie nur die Verweis auf den zuvor nächsten Zeiger, der genau das ist implementiert.
Lass mich versuchen zu erklären.
Tatsächlich bietet die **le_prev*
die Möglichkeit, von sys / queue.h zu insert_before
definiert zu werden, was die forward-list nicht kann. Verglichen mit insert_before
kann insert_after
sowohl in der Weiterleitungsliste als auch in der Liste gut implementiert werden. Die Liste ist also funktionaler.
Tags und Links c queue struct doubly-linked-list bsd