【问题标题】:Linked Lists Structures链表结构
【发布时间】:2018-05-20 22:44:05
【问题描述】:
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,这样当再次调用它时,我不会丢失之前插入的数字。

【问题讨论】:

  • 您在 main 中定义了函数 add_number。它不是标准的 C 功能。
  • 已经修复了那个小错误,但这不是我的主要问题

标签: c struct linked-list insert singly-linked-list


【解决方案1】:

对于根据 C 标准的初学者,不带参数的函数 main 应声明为

int main( void )

您似乎在 main 中定义了函数 add_number(如果您没有省略 main 的右大括号)。 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;
}

它的输出是

0 1 2 3 4 
4 3 2 1 0 0 1 2 3 4 

【讨论】:

    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多