我正在尝试在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;
}
但是当我运行代码时,它不会打印列表元素的值:/
答案 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