单链表之头插法(C语言实现)

版权声明:博客注明来源即可。 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:个人的一些理解,如有错误,还请帮忙指出==、)

猜你喜欢

转载自blog.csdn.net/u014027680/article/details/82291949