在链接列表的头部插入新元素并打印元素值

时间:2014-06-26 08:47:29

标签: c list gcc

我正在尝试在C语言中创建一个列表,在头部插入新元素,之后我想打印元素的值。

这是我写的代码:

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

struct clients 
{ 
int stato; //stato del giocatore : 0 libero 1 occupato
struct clients *next; //puntatore all'elemento successivo della lista
};

typedef struct clients player;         /* per comodita' */


// funzione che inserisce elem in testa alla lista

void inserisci(player *elemento, player *lista)
{

elemento->next=lista;
lista=elemento;         
}

// funzione che visualizza la lista

void visualizza(player *lista)
{

player *p = lista; //creo puntatore alla lista passatagli
while ( p != 0)
{
    printf("valore %d \n",p->stato);
    p=p->next;
}

 }

// main principale
 int main(void)
 {
player *first = NULL;    /* puntatore al primo elemento della lista */
player *pippo = NULL;
int i;
printf("inizio inserimento \n");
for (i=1;i<=10;i++)
{
    pippo=malloc(sizeof(player));
    pippo->stato=i;
    pippo->next=NULL;
    inserisci(pippo,first);
    pippo = NULL;

}
printf("fine inserimento. Ora stampa !  \n");

visualizza(first);

return 0;
   }

但是当我运行代码时,它不会打印列表元素的值:/

2 个答案:

答案 0 :(得分:0)

您将在以下位置分配一个局部变量:

void inserisci(player *elemento, player *lista)
{
    elemento->next=lista;
    lista=elemento; /* Here, the local variable is affected */     
}

更改为:

void inserisci(player *elemento, player **lista)
{
    elemento->next=*lista;
    *lista=elemento; /* The passed variable is affected */     
}

main

inserisci(pippo,&first);

答案 1 :(得分:0)

尝试以下代码并进行调查

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

struct clients 
{ 
    int stato; //stato del giocatore : 0 libero 1 occupato
    struct clients *next; //puntatore all'elemento successivo della lista
};

typedef struct clients player;         /* per comodita' */


// funzione che inserisce elem in testa alla lista

player * inserisci( player *lista, int stato )
{
    player *pippo = malloc( sizeof( player ) );

    if ( pippo != NULL )
    {
        pippo->stato = stato;
        pippo->next = lista;
        lista = pippo;
    }

    return lista;         
}

// funzione che visualizza la lista

void visualizza( const player *lista )
{
    for ( ; lista != NULL; lista = lista->next ) 
    {
        printf( "valore %d \n", lista->stato );
    }
}

player * estrazione( player *lista )
{
    while ( lista != NULL )
    {
        player *tmp = lista;
        lista = lista->next;
        free( tmp );
    }

    return lista;
}

// main principale
int main( void )
{
    player *first = NULL;    /* puntatore al primo elemento della lista */
    int i;

    printf( "inizio inserimento \n" );

    for ( i = 0; i < 10; i++ )
    {
        first = inserisci( first, i + 1 );
    }

    printf( "fine inserimento. Ora stampa !  \n" );

    visualizza( first );

    first = estrazione( first );

    assert( first == NULL );

    return 0;
}

输出

inizio inserimento 
fine inserimento. Ora stampa !  
valore 10 
valore 9 
valore 8 
valore 7 
valore 6 
valore 5 
valore 4 
valore 3 
valore 2 
valore 1