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 № 1Ponieważ 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;
}