У меня есть связанный список матричного типа, который структурирует строку указателя, строку nb и столбец nb, и каждая строка содержит значение узла связанного списка, не равное NULL, и позицию col.
У меня есть функция putValue, которая добавляет значение, если новое значение не существует в матрице, или удаляет старое значение, если новое значение равно 0, или которое меняет старшее значение, является новым значением.
Но моя функция не возвращает новый параметр после запуска. пожалуйста, помогите мне исправить мою ошибку
p.s: Как написать функцию с одним указателем вместо двойного указателя?
p.s 2: я вижу, если удалить, добавить или изменить 1-й узел строки, он не изменится на новый после возврата
1009 * структура *
typedef struct _element {
size_t col;
int val;
struct _element* suiv;
} element;
typedef element* liste_ligne;
typedef struct _matrice_creuse {
liste_ligne* liste;
size_t Nlignes;
size_t Ncolonnes;
} matrice_creuse;
функция putValue
void putValue(matrice_creuse *m, size_t i, size_t j, int val) {
if (m->liste[i] == NULL) {
if (val != 0) {
element *e = malloc(sizeof(element));
e->col = j;
e->val = val;
e->suiv = NULL;
m->liste[i] = e;
}
} else {
if (val == 0)
deleteAt(m->liste[i], j);
else {
remplaceAt(m->liste[i], j, val);
}
}
}
мои функции удаляют и заменяют значение, но имеет ошибку, когда не возвращает новое значение после запуска
//delete value if the new value is 0
void deleteAt(element *ligne, size_t col) {
element *p = ligne, *prev;
if ((col == 0 && ligne->col == 0) || (ligne->col == col)) {
ligne = ligne->suiv;
} else {
int k = 0;
while (p != NULL && k < col - 1) {
if (k == p->col) {
prev = p;
p = p->suiv;
}
k++;
}
if (p != NULL)
if (p->col == col) {
prev->suiv = p->suiv;
}
}
}
//replace by new value
void remplaceAt(element *ligne, size_t col, int val) {
if (ligne->col > col) { //if new value put into to col before 1st value's col
element *e = malloc(sizeof(element));
e->col = col;
e->val = val;
e->suiv = ligne;
ligne = e;
} else if (ligne->col == 0 && col == 0)
ligne->val = val; //replace new value of 1st ele
else {
int k = 0;
element *p = ligne, *prev;
while (p != NULL && k < col) { //find the position of value want to replace
if (k == p->col) {
prev = p;
p = p->suiv;
}
k++;
}
if (p != NULL) {
if (p->col == col)
p->val = val;
else if (col < p->col) { //insert value if new value's col < element's col in list
element *e = malloc(sizeof(element));
e->col = col;
e->val = val;
e->suiv = p;
prev->suiv = e;
}
} else{ //insert value into tail list
element *e = malloc(sizeof(element));
e->col = col;
e->val = val;
e->suiv = NULL;
prev->suiv = e;
}
}