在C中对数组中的结构进行无效化

时间:2014-11-09 23:25:46

标签: c arrays pointers struct

我必须在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;
    }

情况: 比方说,例如,用户想要放置第二个&#39; bloco&#39;第四次之后(就像在img上)。 我显然是这样做的:

blocos[4].prox = &blocos[2];

但是我应该如何在blocos [2]中取消?我的意思是,像blocos [2] = NULL

希望它足够清楚! 感谢

编辑---

我现在有两个新功能:

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指针无效,或者就此而言blocos [2]为null,而不是origem-&gt; pos = -1 ??我的意思是,它们是指针,所以,为什么如果我设置origem = null它不会使bloco [2]无效(我想这是相同的地址)??

2 个答案:

答案 0 :(得分:2)

你的电话,真的。你有一个带有int和指针的struct类型。你需要为它确定一个空状态:也许int将是-1,也许指针将是NULL,无论你用什么来识别&#34; null&# 34;这个结构的实例。

如果所有其他方法都失败了,添加一个布尔值(如果您没有内置布尔类型,则会char执行),标记该块是否处于空状态。

答案 1 :(得分:1)

从您向我们展示的图片中,我觉得您应该使用一个指针数组,以便您可以为数组中的任何元素设置NULL

blocos = malloc(sizeof(bloco *) * numBlocos);
for(i = 0; i < numBlocos; i++) {
    blocos[i] = malloc( sizeof(bloco ) );
    *(blocos[i]).pos  = i;
    *(blocos[i]).prox = NULL;
}