我在C中陷入困境。如果有人能帮助我,我将不胜感激。这是我的代码:
头
typedef struct stackEl stackEl;
typedef struct Task Task;
struct stackEl{
struct Task *zad;
struct stackEl *last;
};
struct Task{
int x;
int y;
};
源
void add(stackEl *main, Task *adding)
{
stackEl tmp;
tmp.last= main;
tmp.zad = adding;
*main=tmp;
}
这个通过逐个指向彼此而不是将单个元素添加到堆栈来创建无限数量的元素。我不知道如何修复它。我试过这样做:
void add(stackEl *main, Task *adding )
{
stackEl *tmp;
tmp = (stackEl*)malloc(sizeof(stackEl));
tmp->last= main;
tmp->zad = adding;
main=tmp;
}
使用此方法元素添加在堆栈顶部,但它不会修改main函数中的堆栈。
答案 0 :(得分:1)
第二版更贴近事实。您需要为添加到堆栈的每个元素分配内存,就像您一样。仍然需要注意的是,在第二个版本中,您只需修改指针的本地副本,而不是实际更改此指针。您应该将指针传递给指针(即StackE1**
),然后执行*main = tmp
。