struct list_of_vertexes;
/* Вершина графа: данные + список соседей */
struct vertex {
    /* список вершин, соседних с данной */
    struct list_of_vertexes * list_of_neighbors;
    /* данные, связанные с вершиной */
};
/* Список вершин.
 * Поле next указывает на следующую вершину в списке.
 * Последняя вершина в списке в указателе next содержит NULL. */
struct list_of_vertexes {
    struct list_of_vertexes * next;
    struct vertex * vertex;
};
/* Граф задаётся списком своих вершин.
 */
struct graph {
    struct list_of_vertexes * vertexes;
};
В предложенном примере окрестность узла графа задаётся в самом узле. У такого решения есть как плюсы, так и минусы.