版权声明:博客注明来源即可。 https://blog.csdn.net/u014027680/article/details/82291949
来源:我的博客站 OceanicKang |《单链表之头插法(C语言实现)》
1、初始化准备
#include <stdio.h>
#include <stdlib.h>
// 创建 Book 结构体
struct Book {
char title[128]; // 书名
char author[40]; // 作者
struct Book *next; // 下一个节点
};
/**
* 填写书籍信息
* @param pbook Book结构体指针
* @return void
* /
void getInput(struct Book *pbook);
/**
* 添加书籍
* @param head 头指针地址(用于修改头指针指向节点)
* @return void
* /
void addBook(struct Book **head);
/**
* 显示书籍
* @param head 头指针
* @return void
* /
void showBook(struct Book *head);
2、main()
int main(void)
{
struct Book *head = NULL; // 头指针
int num;
do {
printf("是否添加新书籍?(0否/1是):");
scanf("%d", &num);
if (num == 1) addBook(&head); // 单纯传入head无法对head的指向进行修改,传入head的地址才可修改head的值
} while(num == 1);
showBook(head);
return 0;
}
3、具体函数
void getInput(struct Book *pbook)
{
printf("请输入书名:");
scanf("%s", pbook -> title);
printf("请输入作者:");
scanf("%s", pbook -> author);
}
void addBook(struct Book **head)
{
struct Book *pbook = (struct Book *)malloc(sizeof(struct Book));
if (pbook == NULL) { printf("申请内存失败"); exit(1); }
getInput(pbook);
pbook -> next = *head;
*head = pbook;
}
void showBook(struct Book *head)
{
struct Book *library = head;
if (library == NULL) { printf("没有书籍"); exit(1); }
while (library != NULL) {
printf("书名:%s", library -> title);
printf("作者:%s", library -> author);
library = library -> next;
}
}
(PS:个人的一些理解,如有错误,还请帮忙指出==、)