2017-12-06 7 views
1
typedef struct numbers{ 
int number_inserted; 
struct numbers *next; 
}NUMBERS; 


int main(){ 
NUMBERS * num=NULL 
int i=0; 

while(i<5){ 
    num=add_number(num); 
    i++; 
} 
} 

NUMBERS * add_number(NUMBERS *num){ 


if (num== NULL) { 
    num = (NUMBERS *) malloc(sizeof(NUMBERS)); 
    num->number_inserted=0; 
    num->next = NULL; 
} 

int gets; 
printf("Insira o numero"); 
scanf("%d",&gets); 
num->number_inserted=gets; 
num->next = ???????? 

return num; 
} 

私の変数NUMBERSに変数num - nextをリンクするにはどうすればいいですか?再び呼び出されると、以前に挿入した番号は失われません。手始めにリンクされたリスト構造

+1

です。標準的なCの機能ではありません。 –

+0

は既にその小さなエラーを修正しましたが、それは私の主な問題ではありません – MoonCoding

答えて

0

C規格に従ってパラメータなしでmain関数が

int main(void) 

のように宣言されなければならない。また、(あなたがメインのために閉じ括弧を省略しなかった場合)は、関数のメイン内部add_numberを定義しているようです。 C標準では、別の関数の中で関数を宣言することはできません。

通常、単一リンクの片面リストが宣言されている場合、リストのノードはその先頭に追加されます。

ここでは、単一リンクリストの先頭と末尾に新しいノードを追加する方法を示すデモンストレーションプログラムを示します。

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

typedef struct numbers 
{ 
    int number_inserted; 
    struct numbers *next; 
} NUMBERS; 


int add_number_front(NUMBERS **numbers, int x ) 
{ 
    NUMBERS *tmp = malloc(sizeof(NUMBERS)); 
    int success = tmp != NULL; 

    if (success) 
    { 
     tmp->number_inserted = x; 
     tmp->next = *numbers; 

     *numbers = tmp; 
    } 

    return success; 
} 

int add_number_back(NUMBERS **numbers, int x ) 
{ 
    NUMBERS *tmp = malloc(sizeof(NUMBERS)); 
    int success = tmp != NULL; 

    if (success) 
    { 
     tmp->number_inserted = x; 
     tmp->next = NULL; 

     while (*numbers != NULL) numbers = &(*numbers)->next; 

     *numbers = tmp; 
    } 

    return success; 
} 


void display_numbers(NUMBERS **numbers) 
{ 
    for (NUMBERS *current = *numbers; current != NULL; current = current->next) 
    { 
     printf("%d ", current->number_inserted); 
    } 
} 

int main(void) 
{ 
    NUMBERS *numbers = NULL; 

    for (int i = 0; i < 5; i++) add_number_back(&numbers, i); 

    display_numbers(&numbers); 
    putchar('\n'); 

    for (int i = 0; i < 5; i++) add_number_front(&numbers, i); 

    display_numbers(&numbers); 
    putchar('\n'); 

    return 0; 
} 

その出力はあなたがメインの内部関数add_numberを定義し

0 1 2 3 4 
4 3 2 1 0 0 1 2 3 4 
関連する問題