gpt4 book ai didi

c - 从结构队列中删除所有节点

转载 作者:太空宇宙 更新时间:2023-11-03 23:32:55 25 4
gpt4 key购买 nike

我正在尝试从我的结构队列中删除所有节点。

结构:

struct element{

int id;
int sign;
int year;
int month;
double amount;

struct element *next;
};

struct queue{
struct element *head;

int size;
};

还有我写的函数:

void delete(struct queue *queue) {
if (queue->size == 0){
printf("Structure is empty\n");
}
else {
struct element* this;
struct element* other;

for(this=queue->head;this!=NULL;this=other)
{
other=this->next;
free(this);
}
free(queue);
}
}

这行不通,我没主意了。有什么建议吗?

最佳答案

在您的delete 例程中,如果大小为空,您不会释放queue,但如果大小不为空,您会释放它。对于这两种情况,您可能应该做同样的事情。也就是说,要么两个地方都不免费,要么两个地方都免费。

需要弄清楚该做什么是很麻烦的,因为delete 无法知道queue 是如何分配的。鉴于您当前的设计,解决方法可能是将标志传递给 delete 以指示它应该做什么:

void delete(struct queue *queue, int do_free) {
if (queue->size == 0){
printf("Structure is empty\n");
}
else {
struct element* this;
struct element* other;
for(this=queue->head;this!=NULL;this=other) {
other=this->next;
free(this);
}
queue->head = 0;
queue->size = 0;
}
if (do_free) free(queue);
}

struct queue new;
/* ... */
delete(&new, 0); /* don't free the queue */

struct queue *empty_new = malloc(sizeof(struct queue));
empty_new->size = 0;
delete(empty_new, 1); /* free the empty queue */

关于c - 从结构队列中删除所有节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11373770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com