liste c adreese vom vorigen knoten problem

Gast #7243730
Lesenswert?
• ▲
▼
einen schönen guten abend,

ich habe eine funktion, die einen knoten in einer Liste hinzufügt
1
static void appendNode(node** liste, uint8_t data_u16)
2
{
3
    node* newNode = NULL;
4
    node* temp = NULL;
5
    uint8_t counter_u8 = 0;
6

7
    while(*liste != NULL)
8
    {
9
        counter_u8++;
10
        liste = &(*liste)->next;
11
    }
12
    newNode = malloc(sizeof(*newNode));
13
    if(NULL != newNode)
14
    {
15
        newNode->number_u16 = counter_u8;
16
        newNode->data_u16 = data_u16;
17
        newNode->next = NULL;
18
    }
19

20
    *liste = newNode;
21
}

die Struktur node soll jetzt ein zusätzliches Element bekommen. Neben 
dem next (welches auf den nächsten Knoten zeigt), möchte ich ein prev 
hinzufügen, welches auf den vorigen knoten zeigt.

Aber ist das ohne größeren Umbau dieser funktion überhaupt möglich?
Beim debuggen sehe ich am Anfnagn die Elemente vom ersten Knoten. Nach 
der while-schleife ist das element schon der neue Knoten. Das heißt an 
den vorigen knoten komme ich gar nicht mehr ran?
Gast #7243738
Lesenswert?
• ▲
▼
Das entscheidende Stichwort, das Du in der Vorlesung offenbar nicht 
mitbekommen hast, lautet "doppelt verkettete Liste" bzw. "doubly linked 
list". Damit solltest Du Deine Hausaufgaben jetzt selber machen können, 
mit etwas nachsehen in Deinen Unterlagen bzw. bei Google.
Gast #7243764
Lesenswert?
• ▲
▼
1
static void appendNode(node** liste, uint8_t data_u16)
2
{
3
    node* newNode = NULL;
4
    node* temp = NULL;
5
    uint8_t counter_u8 = 0;
6
    while(*liste != NULL)
7
    {
8
        if(*&(*liste)->next == NULL)
9
        {
10
          /* hier ist der letzte knoten bevor die while verlassen wird */
11
        }
12
        counter_u8++;
13
        liste = &(*liste)->next;
14
    }
15
    ... ... ...
16
    ... ... ...
17
}

Jetzt noch ein bisschen Pointer lernen und verstehen was da passiert, 
dann dürfte das auch kein Problem mehr sein.
Gast #7244114
Lesenswert?
• ▲
▼
Nur mal so aus Interesse

Warum nennt man eine Variable, die 8 Bit breit ist, data_u16?
Also das hier:

uint8_t data_u16

Das führt doch nur zu Problemen, weil man evtl davon ausgeht, dass in 
data_u16 auch 16 Bit breite Werte gespeichert werden können?

Oder hat das einen Sinn?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.