gpt4 book ai didi

c - 在 C 中打印队列时丢失元素

转载 作者:行者123 更新时间:2023-11-30 14:39:49 26 4
gpt4 key购买 nike

这是我的代码:

typedef struct noeud{
int x;
struct noeud* suivant;
} noeud;

typedef noeud* file;

file enfiler(file f, int val){
file nv = (file) malloc(sizeof(noeud));
nv->x = val; nv->suivant = NULL;

if (f == NULL)
f = nv;
else {
file tmp = f;
while(tmp->suivant != NULL) tmp = tmp->suivant;
tmp->suivant = nv;
}
return f;
}

file defiler(file f){//removing an element of the FIFO data structure
if (f == NULL)
return f;
else {
file tmp = f;
f = f->suivant;//receiving address of next node, the last one points to NULL
free(tmp);
return f;
}
}

int tete(file f){
return f->x;//getting the element of the head
}

void init(file * f) {
*f = NULL;
}

void affiche(file f){//print data structure's elements
if (f == NULL)
printf("File vide.\n");
else {//emptying the FIFO data structure into tmp to access elements
file tmp; init(&tmp);
while(f != NULL){
tmp = enfiler(tmp, tete(f));
f = defiler(f);
}
int i = 0;
while(tmp != NULL) {//emptying tmp to original f
printf("F[%d] = %d\n", ++i, tete(tmp));
f = enfiler(f, tete(tmp));
tmp = defiler(tmp);
}
}
}

这是我的输入:

file f; init(&f);//initializing f to NULL
f = enfiler(f, 6);//adding elements
f = enfiler(f, 45);
f = enfiler(f, 78);
f = enfiler(f, 5);
affiche(f);
affiche(f);
affiche(f);

这是输出:

F[1] = 6
F[2] = 45
F[3] = 78
F[4] = 5
F[1] = 78
F[2] = 5
F[1] = 2036736 //this is a random value

随着每个 void affiche(file f) 两个头丢失,我修改了函数 file defiler(file f) 但似乎找不到错误, file enfiler(file f, int x) 也可以。

感谢您的宝贵时间!

最佳答案

为了反转输出,您需要构造并重新构造队列。您的重建不会重新链接相同的节点。相反,您只需获取这些值并创建两个全新的列表。这意味着在进入afficher 和离开afficher 之前,afficher 中的局部变量f 通常会不同。您可以通过添加以下语句来测试:

void affiche(noeud *f)
{
printf("entree: %p\n", f);

// body of afficher function

printf("sortie: %p\n", f);
}

问题是调用函数中的 f 未更新。它可以指向最近释放的内存或另一个有效的节点。换句话说,您的列表可能会损坏。

解决该问题的最简单方法是返回新的头,如 enfilerdefiler 中所示。

关于c - 在 C 中打印队列时丢失元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883309/

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