Dodawanie wartości do grafu

Dodawanie wartości do grafu
lukashid
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

Witam
Próbuję napisać graf skierowany oparty na listach sąsiedztwa.

Kopiuj
 typedef struct adjacency_list {
  int size;
  int check;
  int max_size;
  int *memory;
}List; 

2 funkcje : inicjalizacja oraz dodawanie nowego elementu do grafu

Kopiuj
List *initGraph(List *l, int n)  {
  l = malloc(n);
  l->max_size = n;
  l->size = 0;
  return l;
}

void insertGraph(List * Graph, int row, int value) {
  if (Graph[row].check != 1) {
    Graph[row].memory = malloc(sizeof(int));
    Graph[row].memory[0] = value;
    Graph[row].check = 1;
    Graph[row].size = 1;
  }
  else {
    int newSize = (Graph[row].size * sizeof(int)) * 2;
    realloc(Graph[row].memory, newSize);
    Graph[row].memory[Graph[row].size] = value;
    ++Graph[row].size;
  }
}
 

Problem pojawia się przy dodawaniu elementów do struktury. Otóż po wywołaniu funkcji insertGraph za trzecim razem dla tego samego pierwszego argumentu po kompilacji wyskakuje błąd. Przyczyną błędu jest linijka w funkcji insertGraph odpowwiedzialna za "realloc" pamięci.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0
  1. Poczytaj jak się używa realloc
  2. initGraph(List *l - po kiego ci ten parametr przecież go nie potrzebujesz.
  3. insertGraph(List * Graph, int row po kiego przesyłasz cała tabele jak możesz przesłać wskaźnik na konkretny element, będzie prostsza funkcja.
  4. To co wyżej podano ma mało wspólnego z listą sąsiedztwa.
lukashid
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 93
0

To co wyżej podano ma mało wspólnego z listą sąsiedztwa.

Może mnie zatem ktoś naprowadzić jak ma wyglądać taka lista w języku ANSI C ?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.