我是C语言的新手!如果我的问题很简单或其他什么的,请原谅我。而且,我也很感激我的问题能得到简单的解释,非常感谢。
我阅读到了C语言中的列表,基于这个示例代码,他们正在尝试创建一个列表函数:
typedef struct list{int data; struct list *next;} list;
list* creat_list(int d){
list* head = malloc(sizeof(list));
head ->data = d;
head ->next = NULL;
return head;
}
函数的工作方式对我来说很简单,但我不明白为什么他们用list*
作为函数的返回类型,这到底意味着什么?正如我目前所了解的,list*
意味着指向struct list
的指针,但是,使用来自结构体的指针作为函数的返回类型意味着什么?我怎么知道什么时候应该使用它?
如果其余的代码很重要,我将其写在下面
#include "stdio.h"
#include "stdlib.h"
#include "ctype.h"
typedef struct list{int data; struct list *next;} list;
int is_empty(const list *l){ return (l == NULL);}
list* creat_list(int d){
list* head = malloc(sizeof(list));
head ->data = d;
head ->next = NULL;
return head;
}
list* add_to_front(int d, list* h){
list* head = creat_list(d);
head ->next;
return head;
}
list* array_to_list(int d[], int size){
list* head = creat_list(d[0]);
int i;
for(i = 1; i < size ; i++){
head = add_to_front(d[i], head);
}
return head;
}
void print_list(list *h, char *title){
printf("%s\n", title);
while(h != NULL){ //checker!
printf("%d :", h->data);
h = h ->next;
}
}
int main(){
list list_of_int;
list* head = NULL;
int data[6]= {2, 3, 5, 7, 8, 9};
head = array_to_list(data, 6);
print_list(head, "multiple elements list");
printf("\n\n");
// Commented code is for single element list
/*
head = malloc(sizeof(list));
printf("sizeof(list) = %lu\n", sizeof(list)); //long long ??
head -> data = 5;
head -> next = NULL;
print_list(head, "single element list");
printf("\n\n");
*/
return 0;
}
1条答案
按热度按时间cunj1qz11#
creat_list()
为列表头(列表中的第一项)分配内存,并返回一个指向该列表的指针,以便将其传递给对该列表进行操作的其他函数。这里,
mylist
被传递给add_to_front
,这样它就知道它要添加到哪个列表。它允许你有多个列表:请注意,只有当
add_to_front()
的名字具有隐含的语义时,上面的语句才有意义。您的问题中给出的函数没有做到这一点。向单链表的 front 添加内容并不简单,它显然是为附加到 end 而设计的。