我是 c 中链接列表的初学者。首先要理解我想要制作一个简单链表的概念 这是代码:
#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 %s\n",__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;
}
我可以设法在ELEMENT列表中创建一个新元素,但我不知道如何显示它(在代码中只显示一个元素)。
正如您所看到的,我有一个错误EXC_BAD_ACCESS,所以我想我不明白如何操纵链表。
稍后在我的项目中,我将需要(如果可能的话)制作链表的链表(如某种二维数组但在列表中)并且我没有找到如何制作它。例如,如果我的ELEMENT列表中的元素必须有另一种结构的列表,那么我应该在ELEMENT结构中声明一个*头指针吗?
先谢谢。
答案 0 :(得分:0)
由于链表是一个接一个链接的元素的数据结构,为了打印整个列表,你必须遍历整个列表并逐个打印元素,直到你到达NULL指针。
它应该像
while(head!=NULL)
{
printf("%d",head->data);
head=head->next;
}
答案 1 :(得分:0)
尝试使用临时ELEMENT
变量并将p_head
分配给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;
}
}
答案 2 :(得分:-1)
编辑:
while(p_tete != NULL){
printf("%d",p_tete->produit_nb);
p_tete = p_tete->suivant;
}