2014-06-26 39 views
0

我試圖用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

這是一個完整的錯誤的程序。首先閱讀關於鏈接列表。 – haccks

+0

看看:[斯坦福鏈接列表教程](http://cslibrary.stanford.edu/103/LinkedListBasics.pdf) –

+0

@ aeroxr1看到我的答案。 –

回答

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

非常感謝:D 我忘了基本知識-.-「 對不起:) – aeroxr1

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 
+2

請不要通過回答他們幫助吸血鬼問題,哥們! :-) –

+0

@LightnessRacesinOrbit對不起,但是如果我是初學者,我該如何迴應其他人的問題? – aeroxr1

+0

@ aeroxr1:我不明白這個問題嗎? –