# Adjazenzliste



## s-tandel (28. November 2005)

Hallo Forum!

Ich habe ein Problem: Ich muss eine Adjazenzliste bauen, habe aber keine richtige Ahnung wie ich das anstellen soll!

Wie ich eine einfach verkette Liste erstelle ist mir klar, auch wie ein Array erstellt wird. Aber wie kann ich die beide nun zusammen bringen?

Und wie kann ich dann noch irgendwelche Werte in die Liste eingeben? Hilfe :-( Bin schon langsam am verzweifeln.

Wenn jemand eine Ahnung hat, wäre ich ihm sehr verbunden und dankbar.


----------



## RedWing (28. November 2005)

Hallo,

das ist eigentlich nicht weiter schwer. Schau mal hier:


```
//Ein Array dessen Elemente aus Neighboulisten bestehen
    NeigbourList adjazenzliste[ANZAHL_KNOTEN];
    //in die Liste werden die Nachbarrn des aktuellen Knoten aufgenommen
    //wobei der Feldindex dem aktuellen Knoten entspricht
    adjazenzliste[0].push_back(2);
    adjazenzliste[0].push_back(5);
    
    //Zeige alle Nachbarrn des Knoten 1 an
    while(NeigbourList* next = adjazenzliste[0].getFirst(); next != NULL; next = next->getNext()){
        cout << "Nachbar des Knoten 1: " << next->getElement();
    }
```

Da ich natürlich nicht weiß wie deine Liste ausschaut hab ich mir 
die Operationen auf der Liste grad mal so hingeschrieben...
Was sich da anbieten würde wären zwei ineinandergeschachtelte
 std::vector, wenn du in C++ programmierst, die erlauben nämlich
wahlfreien Zugriff....

Gruß

RedWing


----------



## s-tandel (28. November 2005)

Naja das ist ja nicht schlecht!
Aber kann man nicht irgendwie ein Array anlegen mit 

int array[7];

und dann jedem einzelnen Feld des array halt "sagen" das der Inhaltstyp eine Liste ist und nicht wie in meinem Fall ein int-Wert.

So sieht meine Liste aus: 

struct Knoten
{
  int content;
  Knoten * next;
};

Knoten * wurzel = NULL;

Das muss irgendwie mit typedef gehen. Ich weiß das das evtl. umständlich ist, müsste aber so sein.


----------



## RedWing (28. November 2005)

> und dann jedem einzelnen Feld des array halt "sagen" das der Inhaltstyp eine Liste ist und nicht wie in meinem Fall ein int-Wert.



Also eine Möglichekeit ein Individuelles Array anzulegen wäre sowas


```
int main()
{
    void* test[10]; 
    test[0] = (char*)"test";  
}
```

Nur macht das für mich nicht grad viel Sinn, auch in deinem Fall nicht.
Das oben beschriebene sollte eigentlich schon ganz gut so Funktionieren.
Oder wo liegt konkret dein Problem?
Ein typdef macht da nicht viel Sinn, meiner Ansicht nach...

//Edit: Vielleicht kannst du auch noch die Operationen auf deine
Liste mit angeben.

Gruß

RedWing


----------

