gpt4 book ai didi

c - 插入一个元素作为列表中的最后一个元素

转载 作者:行者123 更新时间:2023-11-30 17:02:57 25 4
gpt4 key购买 nike

我试图在列表中最后一个位置之后引入元素。结果是一个包含函数创建的点的列表,但不是我想要的。

#include <stdio.h>
#include <stdlib.h>

typedef int DATA;

struct lista {

DATA info;
struct lista *urm;
};

typedef struct lista Lista,*LISTA;

LISTA newl();
LISTA inserare_in_fata(LISTA l,DATA x);
LISTA inserare_la_sfarsit(LISTA l,DATA x);

int main()
{
int x;
FILE *f;
LISTA l;
l=newl();
l=(LISTA)malloc(sizeof(Lista));
l->urm=NULL;
scanf("%d",&x);
l=inserare_in_fata(l,x); //insert a element in front of list
scanf("%d",&x);
l=inserare_la_sfarsit(l,x); // the function for insert as last element
//THE list after Running the program
printf("\n");
while(l->urm!=NULL)
{
printf("%d->",l->info);
l=l->urm;
}
printf("NULL");

}

LISTA newl()
{
return NULL;
}

LISTA inserare_la_sfarsit(LISTA l,DATA x)
{
LISTA w;
LISTA t=(LISTA)malloc(sizeof(Lista));
t->info=x;
if(l==NULL)
{
l->info=x;
return l;
}
else {
w=l;
while(w->urm!=NULL)
{
w=w->urm;
}
w->urm=t;
t->urm=NULL;
return l;
}
}

LISTA inserare_in_fata(LISTA l,DATA x)
{
LISTA f;
f=(LISTA)malloc(sizeof(Lista));
f->info=x;
if(l==NULL)
{
l->info=x;
return l;
}
else{
f->urm=l;
return f;
}
}

插入的数字第一个是 30,最后一个是 10,插入有问题。

结果:http://uploadimage.ro/1PS0/Sper_ca_e_buna.jpg

最佳答案

问题在于列表中有一个虚拟节点,其中包含未初始化的值:在 main 函数中为 l 分配内存之后您将“下一个”成员urm初始化为NULL,但没有初始化数据成员info`。

malloc 函数不会初始化它分配的内存,它分配的数据将具有不确定值,并且使用该值来初始化它会导致>未定义的行为,这就是您的案例中发生的情况。

要么初始化“虚拟”节点值,要么考虑另一种不需要“虚拟”节点的设计。

关于c - 插入一个元素作为列表中的最后一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36342840/

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