代码中是否有遗漏的部分?
我正在创建一个非空的链接列表和显示链表的内容。我哪里说错了?
#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
指针的风格不好。如果你这样做,你至少应该使用一个名称,清楚地告诉类型是一个指针。像list
和node
这样的名字会让人想到是而不是指针。
下面的代码显示了没有类型定义指针的情况。
#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;
}