moin leute.
ich bin gerade dabei mich mit der realisierung der doppelt verketteten listen auseinanderzusetzen, weil sie scheinbar - zumindest steht es so in meinem buch - im kernel immer wieder verwendet wird. das konzept von listen kenne ich bereits, habe damit auch schon in java gearbeitet, aber das hier scheint dann doch "ein wenig" anders zu sein.
was ich bis jetzt gefunden habe ist die folgende seite: http://isis.poly.edu/kulesh/stuff/src/klist/.
da steht, dass eine etwas abgeändert version der headerdatei "list.h" benutzt werden muss (siehe link auf der seite). ich erwähne das deshalbt, weil mir der originaldatei sich das beispiel unten nicht kompilieren lässt. ich kann nur "ahnen", dass es vllt an gewissen funktionalitäten liegt, die im user-mode nicht benutzt werden können. wie dem auch sei.
ich will lediglich mal einen beispiel mit diesen listen machen und zwar das folgende:
das beispiel ist weitgehend aus der oben genannten seite übernommen und funktoniert soweit. wie mache ich das nun, wenn ich z.b. die werte aller elemente der liste in einer shleife durchgehen und ausgeben will?
genauer: wie erreiche ich vom aktuellen element aus das nächste? was ich im moment überhaupt nicht verstehe ist, dass beispielliste.liste.next vom typ list_head ist, ich aber eigetlich das "element" haben will um eben dann auf "wert" zugreifen zu können. ich hoffe es ist verständlich was ich meine. von anderen listen her kenne ich das so, dass jeweils next auf eine datenstruktur desselben typs - in diesem fall also das struct "element" - zeigt, was hier aber nicht der fall ist.
würde mich sehr freuen, wenn mir jemand hier helfen könnte
danke schon einmal.
grüße,
alpha.
ich bin gerade dabei mich mit der realisierung der doppelt verketteten listen auseinanderzusetzen, weil sie scheinbar - zumindest steht es so in meinem buch - im kernel immer wieder verwendet wird. das konzept von listen kenne ich bereits, habe damit auch schon in java gearbeitet, aber das hier scheint dann doch "ein wenig" anders zu sein.
was ich bis jetzt gefunden habe ist die folgende seite: http://isis.poly.edu/kulesh/stuff/src/klist/.
da steht, dass eine etwas abgeändert version der headerdatei "list.h" benutzt werden muss (siehe link auf der seite). ich erwähne das deshalbt, weil mir der originaldatei sich das beispiel unten nicht kompilieren lässt. ich kann nur "ahnen", dass es vllt an gewissen funktionalitäten liegt, die im user-mode nicht benutzt werden können. wie dem auch sei.
ich will lediglich mal einen beispiel mit diesen listen machen und zwar das folgende:
Code:
#include "list.h"
#include <stdio.h>
struct element {
int wert;
struct list_head liste;
};
int main(void)
{
struct element beispielliste;
INIT_LIST_HEAD(&beispielliste.liste);
struct element *tmp;
int i;
for (i=0; i<5; i++)
{
tmp= (struct element *)malloc(sizeof(struct element));
printf("gib wert ein: \n");
scanf("%d",&tmp->wert);
list_add(&(tmp->liste), &(beispielliste.liste)); // neues element in die liste einfügen
}
// HIER SOLEN DIE FÜNF WERTE WIEDER AUSGEGEBEN WERDEN
return 0;
}
das beispiel ist weitgehend aus der oben genannten seite übernommen und funktoniert soweit. wie mache ich das nun, wenn ich z.b. die werte aller elemente der liste in einer shleife durchgehen und ausgeben will?
genauer: wie erreiche ich vom aktuellen element aus das nächste? was ich im moment überhaupt nicht verstehe ist, dass beispielliste.liste.next vom typ list_head ist, ich aber eigetlich das "element" haben will um eben dann auf "wert" zugreifen zu können. ich hoffe es ist verständlich was ich meine. von anderen listen her kenne ich das so, dass jeweils next auf eine datenstruktur desselben typs - in diesem fall also das struct "element" - zeigt, was hier aber nicht der fall ist.
würde mich sehr freuen, wenn mir jemand hier helfen könnte
danke schon einmal.
grüße,
alpha.