/ / Jak wyświetlić połączoną listę w C-c, lista-połączona

Jak wyświetlić połączoną listę w C - c, połączonej liście

Jestem początkującym w połączona lista w do. Po pierwsze, aby zrozumieć koncepcję, staram się stworzyć prostą listę połączoną.
Oto kod:

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


typedef struct Element ELEMENT;
struct Element
{
float price;
int nb_products;
ELEMENT *next=NULL;
};

ELEMENT* add_list ( ELEMENT * p_head)
{

ELEMENT* my_new=NULL;

if (!( my_new = (ELEMENT*) malloc (sizeof(ELEMENT))))
{
printf ("Pb d"allocation dans %sn",__func__);
exit (EXIT_FAILURE);
}
my_new->next = p_head;
return my_new;
}

void liste_display(ELEMENT *p_head)
{
while(p_head != NULL)
{
printf("%d",p_head->nb_products);
p_head = p_head->next;
}
}
int main()
{
ELEMENT *head = NULL;
ELEMENT *elem;

elem = add_list(head);

elem->nb_products = 34;
elem->price       = 10.95;

liste_display ( head );

return 0;
}

Mogę stworzyć nowy element na mojej liście ELEMENTU, ale nie wiem, jak go wyświetlić (w kodzie jest tylko jeden element do wyświetlenia).

Jak widać, mam błąd EXC_BAD_ACCESS, więc chyba nie rozumiałem, jak manipulować połączoną listą.

Później w moim projekcie będę potrzebował (jeśli tak jestmożliwe), aby utworzyć połączoną listę połączonych list (jak rodzaj 2d tablicy, ale na liście) i nie dowiedziałem się, jak to zrobić. Na przykład, jeśli element mojej listy ELEMENT musi mieć listę innego rodzaju struktury, czy powinienem zadeklarować wskaźnik * head w strukturze ELEMENT?

Dzięki z góry.

Odpowiedzi:

0 dla odpowiedzi № 1

Ponieważ lista połączona jest strukturą danych, która maelementy połączone jeden po drugim, aby wydrukować całą listę, musisz przejść całą listę i wydrukować elementy jeden po drugim, aż dojdziesz do wskaźnika NULL.

to powinno być

while(head!=NULL)
{
printf("%d",head->data);
head=head->next;
}

0 dla odpowiedzi nr 2

Spróbuj użyć tymczasowego ELEMENT zmienna i przypisywanie p_head do temp

        void liste_display(ELEMENT **p_head)
{
temp = (ELEMENT*) malloc (sizeof(ELEMENT));
temp = *p_head;
while(temp != NULL)
{
printf("%d",temp->nb_products);
temp= temp->next;
}
}

-1 dla odpowiedzi nr 3

Edytować:

while(p_tete != NULL){
printf("%d",p_tete->produit_nb);
p_tete = p_tete->suivant;
}