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

时间:2016-03-31 20:11:59

标签: c

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

#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

2 个答案:

答案 0 :(得分:0)

问题是列表中有一个虚拟节点,其中包含未初始化的值:在l函数main urm {{you initialize the "next" member中分配to的内存后1}} {NULL {1}} info`。

, but you don't initialize the data member函数不会初始化它分配的内存,它分配的数据将具有 indeterminate 值,除了初始化它之外,还会导致未定义的行为,这就是你的情况。

初始化&#34;虚拟&#34;节点值,或想到另一个你不需要&#34;虚拟&#34;节点

答案 1 :(得分:0)

我看到的问题:

  1. 您需要

    #include <stdio.h>
    #include <stdlib.h>
    
  2. 在使用之前,您不会声明函数newlinserare_la_sfarsitinserare_in_fata。添加以下声明

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

    之前main