我必须用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]=空
希望足够清楚!
谢谢
编辑---
我现在有两个新功能:
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]为空,而不执行origem->pos=-1??我的意思是,它们是指针,所以,为什么如果我设置origem=null,它不会使bloco[2]无效(我猜这是同一个地址)??

最佳答案

你的电话,真的。您有一个带int和指针的struct类型。您需要为它决定一个空状态:也许int将是-1,也许指针将是NULL,无论您使用什么来识别这个结构的“空”实例。
如果所有其他操作都失败,则添加一个标记块是否处于空状态的布尔值(如果没有内置的布尔值类型,则可以使用achar)。

08-19 12:12