![]() |
NiboRoboLib 3.6 - MThread Library
|
CDLL - Circular Double Linked List. Mehr ...
#include <stdbool.h>
gehe zum Quellcode dieser Datei
Datenstrukturen | |
struct | cdll_t |
Funktionen | |
void | cdll_reset (cdll_t *head) |
Listenkopf der CDLL initialisieren Die Liste ist nach dem Aufruf der Funktion leer und kann verwendet werden. Mehr ... | |
static bool | cdll_is_empty (cdll_t *head) |
Prüft ob die CDLL-Liste leer ist (also nur aus dem Kopf besteht) | |
void | cdll_push_front (cdll_t *head, cdll_t *entry) |
Ein Element dem Anfang der CDLL hinzufügen. Mehr ... | |
void | cdll_push_back (cdll_t *head, cdll_t *entry) |
Ein Element dem Ende der CDLL hinzufügen. Mehr ... | |
void | cdll_move_front (cdll_t *head, cdll_t *entry) |
Ein Element aus einer beliebigen CDLL entfernen und an den Anfang der übergebenen CDLL setzen. Mehr ... | |
void | cdll_move_back (cdll_t *head, cdll_t *entry) |
Ein Element aus einer beliebigen CDLL entfernen und an das Ende der übergebenen CDLL setzen. Mehr ... | |
cdll_t * | cdll_pop_front (cdll_t *head) |
Das erste Element der CDLL entfernen und zurückliefern Liefert 0 zurück wenn die Liste leer ist. | |
cdll_t * | cdll_pop_back (cdll_t *head) |
Das letzte Element der CDLL entfernen und zurückliefern Liefert 0 zurück wenn die Liste leer ist. | |
static cdll_t * | cdll_peek_front (cdll_t *head) |
Das erste Element der CDLL zurückliefern Liefert 0 zurück wenn die Liste leer ist. | |
static cdll_t * | cdll_peek_back (cdll_t *head) |
Das letzte Element der CDLL zurückliefern Liefert 0 zurück wenn die Liste leer ist. | |
void | cdll_remove (cdll_t *entry) |
Dieses Element aus seiner Liste entfernen. | |
bool | cdll_contains (cdll_t *head, cdll_t *entry) |
Prüfen ob dieses Element in der Liste enthalten ist. | |
CDLL - Circular Double Linked List.
Bei einer doppelt verketteten Liste gibt es bei jedem Element jeweils einen Zeiger auf den Nachfolger und auf den Vorgänger. Bei dieser Implementation wird aus Optimierungsgründen ein zusätzliches Element, der Listenkopf, in die Liste aufgenommen. Dieses Kopfelement wird jedoch bei der Zählung und der Abarbeitung der Liste ignoriert. Die leere Liste enthält nur das Kopfelement. Durch diesen Trick entfallen alle Sonderfälle beim Löschen und Einfügen von Elementen.
sec. last last HEAD first second +--------+ +--------+ +--------+ +--------+ +--------+ ... -->| next |-->| next |-->| next |-->| next |-->| next |--> ... ... <--| prev |<--| prev |<--| prev |<--| prev |<--| prev |<-- ... +--------+ +--------+ +--------+ +--------+ +--------+ | | | | | | | | | DATA | | DATA | | DATA | | DATA | | | | | | | | | +-- -- --+ +-- -- --+ +-- -- --+ +-- -- --+
Bei der leeren Liste zeigen sowohl der next, wie auch der prev Zeiger des Head Elements wiederum auf das Head Element.
Ein Element aus einer beliebigen CDLL entfernen und an das Ende der übergebenen CDLL setzen.
Ein Element aus einer beliebigen CDLL entfernen und an den Anfang der übergebenen CDLL setzen.
Ein Element dem Ende der CDLL hinzufügen.
Ein Element dem Anfang der CDLL hinzufügen.
void cdll_reset | ( | cdll_t * | head | ) |
Listenkopf der CDLL initialisieren Die Liste ist nach dem Aufruf der Funktion leer und kann verwendet werden.
Muss vor der ersten Verwendung einer CDLL-Liste aufgerufen werden!