1,头插法/前插法:
通过将新结点逐个插入链表的头部(头结点之后)来创建链表,每次申请一个新结点,读入相应的数据元素值,然后将新结点插入到头结点之后。
需要注意的是:头插法是逆序的,先插入的反而在后面。
代码如下:
#include<stdio.h>
#include<stdlib.h>
//书的数据结构
struct Book
{
char title[128];
char author[40];
struct Book *next; //指针域
};
//头插法添加一本书
void addBook(struct Book **Library)//两个**是定义指向指针的指针,详情见笔记
{
struct Book *book, *temp; //定义一个新结点的指针
book = (struct Book *)malloc(sizeof(struct Book));
if (book == NULL)
{
printf("内存分配失败!\n");
exit(1);
}
printf("请输入书名:");
scanf("%s", book->title);
printf("请输入作者:");
scanf("%s", book->author);
if (*Library != NULL) //这个条件必须有,要不然下面让一个空指针去找next就会空指针异常!!!!
{
temp = *Library;
*Library = book;
book->next = temp;