C链表显示内容



代码中是否有遗漏的部分?

我正在创建一个非空的链接列表和显示链表的内容。我哪里说错了?

#include <stdbool.h>
#include <stdlib.h>
struct node_int
{
    void *data;
    node next;
};
typedef struct node_int *node;
typedef struct list_int { node first; } *list;
void init_list(list *lp, void *o)
{
    *lp = (list) malloc(sizeof(struct list_int));
    (*lp)->first = NULL;
    (*lp)->first->data = o;
    (*lp)->first->next = NULL;
}
void print(list ell, void (*print_data)(void *d))
{
    list c;
    c = ell;
    while (c!NULL)
    {
        print_data(c->data);
        c = ell;
    }
}

你的代码有几个问题。

首先我想说的是,我发现typedef指针的风格不好。如果你这样做,你至少应该使用一个名称,清楚地告诉类型是一个指针。像listnode这样的名字会让人想到是而不是指针。

下面的代码显示了没有类型定义指针的情况。

#include <stdio.h>
#include <stdlib.h>
struct node_int
{
    void *data;
    struct node_int* next;
};
typedef struct node_int node;
typedef struct list_int { node* first; } list;

void init_list(list** lp, void *o)
{
    // Allocate the list
    *lp = malloc(sizeof(list));
    if (*lp == NULL) return;
    // Allocate the first node
    (*lp)->first = malloc(sizeof(node));
    if ((*lp)->first == NULL)
    {
        free(*lp);
        *lp = NULL;
        return;
    }
    // Initialize first element
    (*lp)->first->data = o;
    (*lp)->first->next = NULL;
}
void print(list* ell, void (*print_data)(void *d))
{
    if (ell == NULL) return;
    node* p = ell->first;
    while (p != NULL)
    {
        print_data(p->data);
        p = p->next;
    }
}
void myPrint(void* d)
{
  int* p = (int*)d;
  printf("%dn", *p);
}
void free_list(list* ell)
{
    // Add code here ...
}
int main(void)
{
    int a = 1;
    list* myList;
    init_list(&myList, &a);
    if (myList == NULL) return 0;
    // Use the list.....
    print(myList, myPrint);
    free_list(myList);
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新