我必须用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
)。