链表之前要有一定的C语言基础,如指针,结构体,分配内存malloc等,切勿操之过急。
第一次接触可能有点难度,我是把书上的代码反复敲,反复看注释,搞了好几天,才渐渐懂了。
闲话少说,上代码。
#include<stdio.h>
#include<stdlib.h>//要用到malloc
struct llist
{
int num;
char name[20];
struct llist *next; // 指向下一标签
};
int main()
{
int i;
struct llist *head; //创建头指针
struct llist *ptr, *ptr1; //ptr代表链表尾部的结点,ptr1代表新开辟的结点
//为头指针分配内存空间
head = (struct llist *)malloc(sizeof(struct llist));
printf("联系人\n");
printf("输入学号\n");
scanf("%d", &head->num);//注意别忘了取地址符&
printf("输入学号%d的姓名\n", head->num);
scanf("%s", &head->name);
head->next = NULL; //设置指针初值,使head为链表的开头
ptr = head; //将ptr指向链表的开始
for (i = 0; i<2; i++)
{
ptr1 = (struct llist *)malloc(sizeof(struct llist));//为新结点分配空间
//赋值操作
printf("输入学号\n");
scanf("%d", &ptr1->num);//注意别忘了取地址符&
printf("输入学号%d的姓名\n", ptr1->num);
scanf("%s", &ptr1->name);
//结点的连接,so important
ptr1->next = NULL; //使ptr1末尾为NULL
ptr->next = ptr1; //把ptr1连接到ptr->next上,完成两个结点的连接
ptr = ptr->next; //指向下一结点,就是把ptr向前走一步
/*要好好理解上面3个式子是怎么连接的 */
}
printf("联系人\n");
ptr = head; //使ptr指向链表的开始,所以要用到head,否则链表头不好找
for (i = 0; i<3; i++) //注意i的数目,别忘了for循环前也输入了
{
printf("学号%d 姓名-%s\n", ptr->num, ptr->name);
ptr = ptr->next; //指向下一结点
}
return 0;
}
欢迎各位大神来提问,指正。