2016-04-25 14 views
-3

stelle ich die Definition von Adjazenzliste Knoten wie folgt aus:Die Definition der Graph in C

typedef struct node_type{ 
int data; 
struct node_type *link; 
}node; 

Die Definition von Adjazenzliste:

typedef node *list; 

Die Definition der Graph :(Ein Graph ist eine Array von Adjazenzlisten)

typedef struct graph_type{ 
int no_of_vertex; 
list *array; 
}graph; 

War es trotzdem eine korrekte Definition?

+0

** Nicht ** 'typedef' einen Zeiger! Dies wird schließlich zu Verwirrung führen. – Olaf

+0

Dies sieht wie eine einfach verknüpfte Liste aus. Was ich denke, zählt als Graph, aber es ist irgendwie degeneriert. – EOF

+2

Es ist nicht klar, was Sie fragen. Es gibt mehr als eine Möglichkeit, ein Diagramm in C zu definieren (wie bei jeder anderen Sprache). Ohne zu wissen, was Ihre Absicht war, ist es unmöglich zu sagen, ob Sie erfolgreich waren oder nicht. – trentcl

Antwort

0

Es ist nicht klar aus Ihrer Frage, aber ich gehe davon aus, dass Sie nach einer Adjazenzlisten-Darstellung eines ungerichteten Graphen gefragt haben.

Der Versuch, so nah wie Ihre ursprüngliche Idee zu sein -

Zuerst definieren eine Struktur, die eine Adjazenzliste Knoten zu repräsentieren -

struct AdjListNode 
{ 
    int dest; 
    struct AdjListNode* next; 
}; 

Dann eine Struktur, die eine Adjazenzliste darzustellen -

struct AdjList 
{ 
    struct AdjListNode *head; // pointer to head node of list 
}; 

Dann eine Struktur, um ein Diagramm darzustellen. Hier ist ein Graph eine Reihe von Adjazenzlisten. Die Größe des Arrays ist V (Anzahl der Scheitelpunkte im Diagramm).

struct Graph 
{ 
    int V; 
    struct AdjList* array; 
}; 

Zum besseren Verständnis der verschiedenen Graphdarstellungen gibt es eine Reihe von nützlichen Ressourcen, die Sie googlen können. Hier sind einige -

https://www.khanacademy.org/computing/computer-science/algorithms/graph-representation/a/representing-graphs

http://www.geeksforgeeks.org/graph-and-its-representations/

+0

Ja. U richtig angenommen .. Danke für den Link –

0

Sie entweder speichern Sie eine Liste von adjacencies und eine Liste von Knoten,

typedef struct node_type{ 
    int data; 
} node; 

typedef struct adj_type { 
    node * n1; 
    node * n2; 
} adj; 

typedef struct graph_type{ 
    int n_nodes; 
    int n_adjs; 
    node ** node_list; 
    adj ** adj_list; 
}graph; 

oder einen Knoten mit seinen adjacencies speichern:

typedef struct node_type{ 
    int data; 
    int n_links; 
    sturct node_type ** links; 
} node; 

typedef struct node_type{ 
    int n_nodes; 
    node ** node_list; 
} 

Wenn Sie Liste Container verknüpft verwenden, den Knoten speichern/Nachbarschaften statt Zeigerarrays trennen Sie die Graphiklogik von der Speicherallokationslogik.