通用型链表实现书籍信息管理

简介: 通用型链表实现书籍信息管理

此链表实现书籍信息管理

功能:创建链表、头插(尾插)、按条件删除(.c文件实现按书名删除节点)、删除指定节点、查找结点、销毁链表

list.h

#ifndef DATATYPE
#define DATATYPE int
#endif
typedef DATATYPE datatype;

typedef struct node
{
    //数据域
    datatype data;
    //指针域
    struct node *next; //后继指针,指向下一个与当前类型一致的成员
    struct node *prev; //前驱指针
} listnode, *linklist;

//通用型链表初始化
static linklist List_Init()
{
    linklist Head = malloc(sizeof(listnode));
    Head->next = Head;
    Head->prev = Head;
    return Head;
}

//通用型链表头插操作
static void HeadInsert(linklist Head, datatype info)
{
    linklist Newnode = malloc(sizeof(listnode));
    //数据域
    Newnode->data = info;
    //指针域
    Newnode->next = Head->next;
    Head->next = Newnode;
    Newnode->next->prev = Newnode;
    Newnode->prev = Head;
}
//通用型链表尾插操作
static void TailInsert(linklist Head, datatype info)
{
    linklist Newnode = malloc(sizeof(listnode));
    //数据域
    Newnode->data = info;
    //指针域
    Newnode->next = Head;
    Head->prev->next = Newnode;
    Newnode->prev = Head->prev;
    Head->prev = Newnode;
}

//通用型链表遍历操作
static void List_brow(linklist Head, void (*pfunction)(datatype))
{
    linklist temp = Head->prev;
    while (temp != Head)
    {
        pfunction(temp->data);
        temp = temp->prev;
    }
}

//通用型链表删除节点操作
static void List_Nulldelete(linklist Node)
{
    Node->next->prev = Node->prev;
    Node->prev->next = Node->next;
    free(Node);
}

//通用型链表按条件删除节点操作
static void List_Havedelete(linklist Head, linklist (*fun)(linklist))
{
    linklist temp = fun(Head);
    if (temp != NULL)
    {
        temp->prev->next = temp->next;
        temp->next->prev = temp->prev;
        free(temp);
        printf("删除成功!\n");
    }
    else
        printf("删除失败!\n");
}

//通用型链表查找节点操作
static void List_Search(linklist Head, linklist (*fun)(linklist))
{
    linklist temp = fun(Head);
    if (temp != NULL)
    {
        printf("查找成功!\n");
    }
    else
        printf("查找失败!\n");
}

//通用型链表销毁操作
static void List_Destroy(linklist Head)
{
    linklist p = Head;
    linklist q = p->next;
    int i = 0;
    while (q != Head)
    {
        p = q;
        free(p);
        i++;
        q = q->next;
    }
    free(Head);
    printf("成功释放%d个节点\n", i);
}

list.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct book
{
    char bookname[64];
    char Author[64];
    float price;
};
#define DATATYPE struct book

#include "double_list.h"

//打印节点内容
void pridata(datatype binfo)
{
    printf("%s\t%s\t%.1f\n", (binfo).bookname, (binfo).Author, (binfo).price);
}

//按书名查找节点
linklist Search(linklist Head)
{
    //查找
    char buf[32] = {0};
    printf("输入你想要查找(删除)的书名:");
    scanf("%s", buf);
    linklist temp = Head->next;
    int flag = 0;
    while (temp != Head)
    {
        if (strcmp(temp->data.bookname, buf) == 0)
        {
            return temp;
            flag = 1;
            break;
        }
        temp = temp->next;
    }
    if (flag == 0)
        return NULL;
}
int main()
{
    //创建空表
    struct node *head = List_Init();
    datatype binfo;
    //尾插
    for (int i = 0; i < 3; i++)
    {
        scanf("%s %s %f", binfo.bookname, binfo.Author, &binfo.price);
        while (getchar() != '\n')
            ; //清空\n
        TailInsert(head, binfo);
    }
    //按条件删除
    List_Havedelete(head, Search);

    //删除指定节点
    //List_Nulldelete(head->prev);

    //使用通用型的链表遍历函数,实现每找到一个节点  调用一次回调函数,处理找到的当前节点
    List_brow(head, pridata);

    //查找结点
    List_Search(head, Search);
    
    //销毁节点
    List_Destroy(head);

    return 0;
}
相关文章
|
10月前
|
编解码 弹性计算 应用服务中间件
阿里云服务器计算型c8y实例2核4G配置1545.63元1年测评
2023年阿里云的活动中有一款价格只要1545.63元1年的2核4G配置计算型c8y实例云服务器,要了解1545.63元一年的阿里云服务器是否值得购买,我们需要了解这个价格到底便宜了多少,用的是什么实例规格,带宽是多少,最重要的是要知道这款云服务器可以做什么用,可以放一些什么样的网站或者应用程序。
阿里云服务器计算型c8y实例2核4G配置1545.63元1年测评
|
2月前
|
存储 安全 网络协议
2024阿里云上云采购季活动,云服务器计算型c8a、通用型g8i/g8a/g8y实例区别及价格参考
在阿里云2024年的上云采购季活动中,除了以往活动中有的轻量应用服务器和经济型e、通用算力型u1、计算型c7、通用型g7实例之外,阿里云还新增了计算型c8a、通用型g8i/g8a和g8y实例规格,这些都是具有超高性能的AMD&Intel&倚天第八代云服务器,那么这几个云服务器实例规格的性能及适用场景是怎样的呢?本文为大家介绍阿里云计算型c8a、通用型g8i/g8a和g8y实例规格性能及适用场景。
388 0
2024阿里云上云采购季活动,云服务器计算型c8a、通用型g8i/g8a/g8y实例区别及价格参考
|
2月前
|
存储 弹性计算 人工智能
作为阿里云老用户买了一台99元服务器,香不香?
作为阿里云老用户买了一台99元服务器,香不香?阿里云服务器99元一年配置为云服务器ECS经济型e实例,2核2G配置、3M固定带宽和40G ESSD Entry系统盘,新用户和老用户均可买,续费也是99元一年,你还有什么想说的?
|
2月前
|
存储 机器学习/深度学习 人工智能
阿里云倚天云服务器计算型c8y、通用型g8y、内存型r8y实例性能介绍及活动价格参考
计算型c8y、通用型g8y、内存型r8y是阿里云推出的基于ARM架构的新一代阿里自研倚天实例,采用阿里自研倚天710处理器,基于最新一代CIPU架构,通过芯片快速路径加速手段实现计算、存储、网络性能的大幅提升。其中计算型c8y实例网站应用、各种类型和规模的企业级应用,通用型g8y实例适用于网站应用、各种类型和规模的企业级应用,内存型r8y实例适用于网站应用、各种类型和规模的企业级应用。本文为大家详细介绍倚天云服务器实例的主要性能和最新活动价格情况。
阿里云倚天云服务器计算型c8y、通用型g8y、内存型r8y实例性能介绍及活动价格参考
|
2月前
|
弹性计算
阿里云2核4G服务器优惠价格表_2024年最新整理报价
阿里云2核4G服务器多少钱一年?2核4G服务器1个月费用多少?2核4G服务器30元3个月、85元一年,轻量应用服务器2核4G4M带宽165元一年,企业用户2核4G5M带宽199元一年。本文阿里云服务器网整理的2核4G参加活动的主机是ECS经济型e实例和u1云服务器,阿里云百科整理官方活动链接
81 0
|
9天前
|
机器学习/深度学习 人工智能 NoSQL
MongoDB 和 AI 赋能行业应用:零售
在本系列的下一篇文章中,我们将讨论 MongoDB + AI 在金融服务行业的应用。
5377 3
|
2月前
|
存储 弹性计算 安全
阿里云七代云服务器计算型c7、通用型g7、内存型r7实例性能介绍及活动价格参考
阿里云第7代云服务器主要实例规格包括计算型c7、通用型g7、内存型r7,其中计算型c7实例适用于计算密集型业务,如Web服务器Apache、Nginx等场景,通用型g7实例适用于通用业务,如网站应用、各类企业级应用、中间件,内存型r7实例适用于内存密集型业务,如数据库系统、缓存、搜索集群。本文为大家详细介绍七代云服务器实例的主要性能和最新活动价格情况。
阿里云七代云服务器计算型c7、通用型g7、内存型r7实例性能介绍及活动价格参考
|
2月前
|
存储 编解码 弹性计算
阿里云目前活动中的经济型e、通用算力型u1与计算型c7和c8y实例选择参考
如果我们需要购买2核4G、4核8G、8核16G配置的阿里云服务器,在阿里云目前的活动中有经济型e、通用算力型u1、计算型c7和计算型c8y四种实例可选,虽然配置相同,但是价格却是不一样的,以2核4G配置为例,目前阿里云的活动中,经济型e实例2核4G配置只要57.94元/3个月、599.93元/1年起,而计算型c7则要1860.00元/1年起,因此,我们有必要弄清楚他们之间的差别,这样才能根据自己的需求选择最适合自己的实例。
阿里云目前活动中的经济型e、通用算力型u1与计算型c7和c8y实例选择参考
|
2月前
|
存储 缓存 资源调度
阿里云购买云服务器选择经济型、通用算力型、计算型、通用型、内存型实例参考
在我们通过阿里云的活动选购云服务器的时候会发现,相同配置的云服务器往往有多个不同的实例可选,而且价格差别也比较大,这会是因为不同实例规格的由于采用的处理器不同,底层架构也有所不同(例如X86 计算架构与Arm 计算架构),因此不同实例的云服务器其性能与适用场景是有所不同。本文为大家详细介绍阿里云的经济型、通用算力型、计算型、通用型和内存型实例的性能特点及适用场景,以供大家选择参考。
阿里云购买云服务器选择经济型、通用算力型、计算型、通用型、内存型实例参考
|
存储 Dragonfly 编解码
阿里云计算型c8y/通用型g8y/内存型r8y实例云服务器性能及价格参考
计算型c8y、通用型g8y、内存型r8y是阿里云的最新一代云服务器实例规格,采用阿里自研倚天710处理器,基于最新一代CIPU和Dragonfly ARM Hypervisor ,通过芯片快速路径加速手段实现计算、存储、网络性能的大幅提升。阿里云现在推出自研高性价比倚天实例云服务器特惠,新老用户同享7.2折特惠,最长可买五年,且不限制带宽容量,赶紧来看看吧。
519 3
阿里云计算型c8y/通用型g8y/内存型r8y实例云服务器性能及价格参考

热门文章

最新文章