用链表和结构体实现对图书信息的储存,删除及显示功能

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct book
{
    char ID[10];
    char name[20];
    struct book* next;
}book;
book* buynode(char* id, char* na);
void weicha(book** phead, char* id, char* na);
void my_print(book* phead);
void shanchu(book** phead);
int main()
{
    book* plist = NULL;
    char a[20][20], b[20][20];
    int i = 0, j = 0;
    printf("输入图书的编号和书名\n");
    do
    {
        scanf("%s %s", a[i], b[i]);
        weicha(&plist, a[i], b[i]);
        i++;
    } while (strcmp(a[i - 1], "0") != 0);
    printf("创建的链表\n");
    my_print(plist);
    printf("请输入要删除的图书的编号\n");
    shanchu(&plist);
    printf("删除后的链表\n");
    my_print(plist);
    return 0;
}
book* buynode(char* id, char* na)
{
    book* newnode = (book*)malloc(sizeof(book));
    if (newnode == NULL)
    {
        perror("malloc fail");
        return NULL;
    }
    strcpy(newnode->ID, id);
    strcpy(newnode->name, na);
    newnode->next = NULL;
    return newnode;
}
void weicha(book** phead, char* id, char* na)
{
    book* newnode = buynode(id, na);
    if (*phead == NULL)
    {
        *phead = newnode;
    }
    else
    {
        book* tail = *phead;
        while (tail->next != NULL)
        {
            tail = tail->next;
        }
        tail->next = newnode;
    }
}
void my_print(book* phead)
{
    book* cur = phead;
    while (cur->next != NULL)
    {
        printf("%s %s\n", cur->ID, cur->name);
        cur = cur->next;
    }
    printf("\n");
}
void shanchu(book** phead)
{
    char c[10];
    scanf("%s", c);
    book* daishan = *phead;
    while (strcmp(daishan->ID, c) != 0)
    {
        daishan = daishan->next;
    }
    if (daishan == *phead)
    {
        book* del = *phead;
        *phead = del->next;
    }
    else
    {
        book* prev = *phead;
        while (prev->next != daishan)
        {
            prev = prev->next;
        }
        prev->next = daishan->next;
        free(daishan);
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值