2017-12-06 26 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; 
} 

구조 번호에 대해 변수 num - next를 어떻게 연결합니까? 다시 호출 할 때 이전에 삽입 한 숫자를 잃어 버리지 마십시오. 는 C 표준에 매개 변수가없는 함수 주에 따라 우선 들어연결된 목록 구조

+1

입니다. 표준 C 기능이 아닙니다. –

+0

이미 작은 오류가 수정되었지만 내 주요 문제는 아닙니다. – MoonCoding

답변

0

은 (당신이 주요의 닫는 중괄호를 생략하지 않은 경우) 당신이 주요 내부 기능 add_number를 정의 것 또한

int main(void) 

같이 선언해야한다 . 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