Мне нужно разработать алгоритм с использованием связанного списка и структуры в C, но у меня возникла проблема с обнулением элементов массива. Для уточнения:Nullifying struct in array в C
На левой стороне щёток установки проблемы. С правой стороны - вероятный выход.
Что я сделал до сих пор:
struct cel {
int pos;
struct cel *prox;
};
typedef struct cel bloco;
...
bloco *blocos;
scanf("%d",&numBlocos);
blocos = malloc(sizeof(bloco) * numBlocos);
for(i = 0; i < numBlocos; i++) {
blocos[i].pos = i;
blocos[i].prox = NULL;
}
Ситуация: Допустим, например, пользователь хочет поставить второй «BLOCO» после четвертого (например, на img). Очевидно, что я хотел бы сделать:
blocos[4].prox = &blocos[2];
Но как я должен приступить к обнулить на blocos [2]? Я имею в виду, что-то вроде blocos [2] = NULL
Надеюсь, что это достаточно ясно! Благодаря
EDIT ---
Я получил две новые функции: теперь
bloco* busca(bloco *blocos,int pos, int numblocos)
{
int i;
for(i = 0; i < numblocos; i++) {
bloco *temp = &blocos[i];
while(temp != NULL && temp->pos != -1) {
if(temp->pos == pos) {
return temp;
}
//se nao vai pro proximo item linkado
temp = temp->prox;
}
}
return NULL;
}
А потом:
void moveOnto(bloco *blocos, int ori,int dest,int numblocos)
{
if(ori == dest)
return;
bloco *origem = busca(blocos,ori,numblocos);
retornaOrigem(blocos,origem);
bloco *destino = busca(blocos,dest,numblocos);
retornaOrigem(blocos,destino);
bloco *temp = malloc(sizeof(bloco));
*temp = *origem;
destino->prox = temp;
origem->pos = -1;
}
делает это до сих пор не представляется возможным свести на нет указатель Origem , или в этом случае блоки [2] равны нулю, не делая origem-> pos = -1 ?? Я имею в виду, что они указатели, поэтому, если я устанавливаю origem = null, это не сбрасывает bloco [2] (это тот же адрес, я думаю) ??
Есть ли проблема с использованием NULL? – Nit
@ Нить на то, что не указатель, возможно :) – Quentin
Установите 'pos' в -1? – indiv