0

我被困在 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;
}

使用此方法元素被添加到堆栈顶部,但它不会修改主函数中的堆栈。

4

1 回答 1

1

第二个版本更接近真相。您需要像您一样为添加到堆栈中的每个元素分配内存。仍然请注意,在第二个版本中,您只修改指针的本地副本,而不是实际更改此指针。您应该将指针传递给指针(即StackE1**),然后执行*main = tmp.

于 2013-01-10T20:27:51.547 回答