2016-03-31 19 views
0

リストの最後の位置の後に要素を挿入しようとしています。その結果、関数によって作成された点がリストに含まれていますが、必要ではありません。リストの最後の要素として要素を挿入する

#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

答えて

0

問題は、あなたがその中に初期化されていない値で、リストにダミーノードを持っていることです:あなたはmain機能you initialize the "next" member URM to NULL , but you don't initialize the data member info`にlのためのメモリを割り当てた後。それが割り当てメモリを初期化しません

malloc機能は、それが割り当てデータは不定値を持ち、かつ初期化する以外、それはあなたのケースで何が起こるかである未定義の動作、につながることを使用します。

「ダミー」ノードの値を初期化するか、「ダミー」ノードが不要な別のデザインを考えてください。

+0

私は質問を更新しましたが、実行後も同じ結果になりました。 –

+0

@CatalinZambalicあなたは間違った条件で、間違った場所で初期化します。ダミー 'l'ノードを割り当てた直後に、' main'関数でそれを行う必要があります。 –

+0

私はメニューを使用しています。私はすべてのメニューに機能を使用しています。これはなぜ私がそれを行うための関数を使うのかということです。最初の要素は、ユーザーの好みによって選択されたかったのですが、私は最初の要素に対して関数が同じことをしたことを知っています。私は、if(l == NULL)の関数をinserare_in_fataとinserare_la_sfarsitのオプションに入れてメニューを作成しましたが、それでも同じ結果が出ません。 –

0

の問題は、私は以下を参照してください。

  1. はあなたがnewlinserare_la_sfarsit、およびinserare_in_fataそれらを使用する前に関数を宣言していない

    #include <stdio.h> 
    #include <stdlib.h> 
    
  2. を必要としています。以下の宣言を追加してください。

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

    mainの前に追加してください。

+0

私はそれも質問に書いていませんでした。関数は、プロジェクトに含まれるライブラリで既に初期化されています。 –

+0

@CatalinZambalic、それで私たちは[最小限の、完全で、証明可能な例](http://stackoverflow.com/help/mcve)を見たいのです。それは時間の無駄を避ける。 –

関連する問題