如何在C中显示链接列表

时间:2017-03-25 13:31:09

标签: c linked-list

我是 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结构中声明一个*头指针吗?

先谢谢。

3 个答案:

答案 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;
}