C 带字符**val的结构
我正在实现一种bucket堆栈,它使用以下结构作为节点C 带字符**val的结构,c,pointers,stack,C,Pointers,Stack,我正在实现一种bucket堆栈,它使用以下结构作为节点 struct NodeBucket { char** val; struct NodeBucket* next; }; 它的工作方式是,当一个新节点bucket被创建并链接到上一个节点,然后被填充时,每个bucket可以容纳指定数量的值,依此类推。 我在尝试向第一个bucket添加第二个值时遇到了困惑。当我添加第一个值并创建第一个bucket时,使用temp->value=&val将该值设置为输入。现在我不确定如何添加其余
struct NodeBucket {
char** val;
struct NodeBucket* next;
};
它的工作方式是,当一个新节点bucket被创建并链接到上一个节点,然后被填充时,每个bucket可以容纳指定数量的值,依此类推。
我在尝试向第一个bucket添加第二个值时遇到了困惑。当我添加第一个值并创建第一个bucket时,使用temp->value=&val
将该值设置为输入。现在我不确定如何添加其余的输入。我尝试过使用索引(firstBucket->val[1]=val),但这似乎不是正确的方法。我将感谢任何帮助。是的,这是家庭作业,我是C语言的相对初学者,来自Python
编辑
它的工作原理是,每个桶可以容纳指定数量的值
因此,您的bucket必须有足够的存储空间来存储stack->bucketSize
值,这些值是字符串,因此属于char*
类型。您没有这样做,事实上,您实际上是在创建一个指向char*
的指针,并在val
堆栈上为其分配地址,该地址将在函数返回时消失
struct NodeBucket需要知道它存储了多少项
struct NodeBucket {
size_t numValues;
struct NodeBucket* next;
char** val;
};
您还需要为VAL数组分配空间。按如下方式初始化:
struct NodeBucket* temp = malloc(sizeof *temp);
temp->val = malloc(sizeof(char*) * stack->bucketSize);
temp->numValues = 0;
temp->next = NULL;
按相反的顺序释放所有东西
请注意,我将val
放在末尾,因为您可以利用将mallocs(和frees)减少为一
然后要添加新字符串,您可以查看
numValues
是否小于stack->bucketSize
。如果是,则将字符串添加到数组的末尾(stack->firstBucket->val[numValues]=val
)并递增numValues
)。如果没有,您将创建一个新的节点bucket
并将其添加到那里。您需要向我们展示一些代码,并指出它在哪里损坏/您被添加了我的推送功能。谢谢<代码>临时->val=&val代码>??存储临时变量的地址肯定不是要做的事情。我在那里做的是创建一个bucket,在其中存储val,然后将其附加到堆栈。我可能错了,但那部分似乎运作良好。谢谢你给出了一个非常明确的答案。初始化内存肯定是我忘了的东西。现在,吹毛求疵的部分,我的支柱定义只允许以我最初发布的方式,只有两个值按顺序排列。在我的堆栈结构中,我有一个int-topElt,它与我相信的numvalue基本相同
struct NodeBucket* temp = malloc(sizeof *temp);
temp->val = malloc(sizeof(char*) * stack->bucketSize);
temp->numValues = 0;
temp->next = NULL;