用C语言链表实现图书管理
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct ListNode {int val;//编号char title[50];//书名float price;//价格struct ListNode* next;
};// 在尾部插入节点
struct ListNode* insertAtTail(struct ListNode* head, int val,char mytitle[50],float price) {struct ListNode* new_node = (struct ListNode*)malloc(sizeof(struct ListNode));new_node->val = val;strcpy(new_node->title,mytitle);new_node->price=price;new_node->next = NULL;if (head == NULL) {return new_node;}struct ListNode* p = head;while (p->next != NULL) {p = p->next;}p->next = new_node;return head;
}
void listAll(struct ListNode* head){printf("编号\t书名\t价格\n");struct ListNode* p=head;while(p!=NULL){printf("%d\t%s\t%f", p->val, p->title, p->price);printf("\n");p=p->next;}
}
// 删除指定值的节点
struct ListNode* deleteNode(struct ListNode* head, int val) {struct ListNode* p = head;struct ListNode* prev = NULL;while (p != NULL && p->val != val) {prev = p;p = p->next;}if (p == NULL) {return head;}if (prev == NULL) {head = head->next;} else {prev->next = p->next;}free(p);return head;
}
// 修改指定值的节点的值
struct ListNode* modifyNode(struct ListNode* head, int old_val,char newTitle[50],float newPrice) {struct ListNode* p = head;while (p != NULL && p->val != old_val) {p = p->next;}if (p == NULL) {return head;}strcpy(p->title ,newTitle);p->price = newPrice;return head;
}
// 查找指定值的节点的位置
int getIndexByVal(struct ListNode* head, int val) {struct ListNode* p = head;int i = 0;while (p != NULL && p->val != val) {p = p->next;i++;}if (p == NULL) {return -1;}return i;
}
int main(){struct ListNode* p=NULL;for (int i = 0; i < 100; i++){printf("%s", "1.插入图书\n");printf("%s", "2.删除图书\n");printf("%s", "3.图书列表\n");printf("%s", "4.修改图书\n");printf("%s", "请输入1或2或3或4:\n");int select;scanf("%d", &select);if (select == 1){int myVal;printf( "请输入编号:\n");scanf("%d", &myVal);printf( "请输入书名:\n");char myTitle[50];scanf("%s", myTitle);printf( "请输入价格:\n");float myPrice;scanf("%f",&myPrice);if(p==NULL){p=insertAtTail(NULL,myVal,myTitle,myPrice);}else{p=insertAtTail(p,myVal,myTitle,myPrice);}}else if(select==3){listAll(p);}else if(select==2){int deleteVal;printf("请输入要删除的图书的编号:\n");scanf("%d",&deleteVal);p=deleteNode(p,deleteVal);}else if(select==4){int modifyVal;printf("请输入要修改的图书的编号:\n");scanf("%d",&modifyVal);if(getIndexByVal(p,modifyVal)==-1){printf("图书不存在");continue;}printf( "请输入书名:\n");char modifyTitle[50];scanf("%s", modifyTitle);printf( "请输入价格:\n");float modifyPrice;scanf("%f",&modifyPrice);p=modifyNode(p,modifyVal,modifyTitle,modifyPrice);}}return 0;
}
要改成班级管理,ListNode中val不变,其它属性变成学生姓名、成绩等等。
注意:c语言的编译不要用visual studio,因为它连scanf都会报错,会要求您使用scanf_s。建议用记事本或visual studio code编写,然后在命令行窗口输入gcc命令来编译。
相关文章:
用C语言链表实现图书管理
#include <stdio.h> #include <stdlib.h> #include <string.h> struct ListNode {int val;//编号char title[50];//书名float price;//价格struct ListNode* next; };// 在尾部插入节点 struct ListNode* insertAtTail(struct ListNode* head, int val,char …...
Hello,Spider!入门第一个爬虫程序
在各大编程语言中,初学者要学会编写的第一个简单程序一般就是“Hello, World!”,即通过程序来在屏幕上输出一行“Hello, World!”这样的文字,在Python中,只需一行代码就可以做到。我们把这第一个爬虫就称之为“HelloSpider”&…...
AI实景无人自动直播间怎么搭建?三步教你轻松使用
最近很多朋友看到AI自动直播带货玩法,也想开启自己的自动直播间,但还是有些问题比较担心,这种自动讲解、自动回复做带货的直播间是不是很麻烦? 实景无人自动直播 实际上这种直播间搭建相当简单便捷!今天跟着笔者&…...
wechaty微信机器人,当机器人被@时做出响应
https://wechaty.js.org/zh/docs/api/message?_highlightmessage if (await msg.mentionSelf()) {console.log(this message were mentioned me! [You were mentioned] tip ([有人我]的提示))await room.say(不要微信机器人)} 我开发的人工智能学习网站: https://…...
8.6 Springboot项目实战 Spring Cache注解方式使用Redis
文章目录 前言一、配置Spring Cache1. @EnableCaching2. 配置CacheManager3. application.properties配置二、使用注解缓存数据1. 使用**@Cacheable** 改造查询代码2. 使用**@CacheEvict** 改造更新代码前言 在上文中我们使用Redis缓存热点数据时,使用的是手写代码的方式,这…...
rust引用本地crate
我们可以动态引用crate,build时从crate.io下载,但可能因无法下载导致build失败。首次正常引用三方crate,build时自动下载的crate源码,我们将其拷贝到固定目录中; build后可在RustRover中按住Ctrl键,在crat…...
分布式(计算机算法)
目录 分布式计算 分布式编辑 分布式和集群 分布式和集群的应用场景 分布式应用场景 集群应用场景 哪种技术更优、更快、更好呢 性能 稳定性 以下概念来源于百度百科 分布式计算 分布式计算是近年提出的一种新的计算方式。所谓分布式计算就是在两个或多个软件互相共享信息…...
CSS概念及入门
文章目录 1. CSS 概念及入门1.1. 简介1.2. 组成1.2.1. 选择器1.2.2. 属性 1.3. 区别 2. CSS 引入方式2.1. 行内样式2.1.1. 语法2.1.2. 特点 2.2. 内部样式2.2.1. 语法2.2.2. 特点 2.3. 外部样式2.3.1. 特点 2.4. 三种引入优先级 1. CSS 概念及入门 1.1. 简介 CSS 的全称为&am…...
用 C 语言模拟 Rust 的 Result 类型
在 Rust 中,Result<T, E> 类型是一个枚举,它表示一个操作可能成功并返回一个值 T,或者失败并返回一个错误 E。在 C 语言中,没有直接对应的 Result 类型,但我们可以使用结构体和枚举来模拟它。 下面是一个用 C 语…...
git基础命令(四)之分支命令
目录 基础概念git branch-r-a-v-vv-avv重命名分支删除分支git branch -h git checkout创建新的分支追踪远程分支同时切换到该分支创建新的分支并切换到该分支撤销对文件的修改,恢复到最近的提交状态:丢弃本地所有修改git checkout -h git merge合并指定分…...
redis瘦身版
线程模型 纯内存操作/非阻塞io多路复用/单线程避免多线程频繁上下文切换 基于Reactor模式开发了网络事件处理器:文件事件处理器,单线程的 io多路监听多个socket,据socket事件类型选择对应的处理器,高性能网络通信模型,…...
使用ChatGPT高效完成简历制作[中篇]-有爱AI实战教程(五)
演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 导读:在使用 ChatGPT 时,当你给的指令越精确,它的回答会越到位,举例来说,假如你要请它帮忙写文案,如果没…...
论文阅读——SpectralGPT
SpectralGPT: Spectral Foundation Model SpectralGPT的通用RS基础模型,该模型专门用于使用新型3D生成预训练Transformer(GPT)处理光谱RS图像。 重建损失由两个部分组成:令牌到令牌和频谱到频谱 下游任务:...
Redis的过期键是如何处理的?过期键的删除策略有哪些?请解释Redis的内存淘汰策略是什么?有哪些可选的淘汰策略?
Redis的过期键是如何处理的?过期键的删除策略有哪些? Redis的过期键处理是一个重要的内存管理机制,它确保在键过期后能够释放相应的内存空间。Redis对过期键的处理主要依赖于其删除策略,这些策略包括被动删除(惰性删除…...
软件测试方法 -- 等价类边界值
测试用例的定义 测试用例是为了特定的目的而设计的一组测试输入、执行条件和预期的结果,以便测试是否满足某个特定需求。通过大量的测试用例来检验软件的运行效果,他是指导测试工作进行的依据。 下面我们介绍几种常用的黑盒测试方法 等价类划分法 定…...
LeetCode——贪心算法(Java)
贪心算法 简介[简单] 455. 分发饼干[中等] 376. 摆动序列[中等] 53. 最大子数组和[中等] 122. 买卖股票的最佳时机 II[中等] 55. 跳跃游戏 简介 记录一下自己刷题的历程以及代码。写题过程中参考了 代码随想录的刷题路线。会附上一些个人的思路,如果有错误…...
【MySQL】2. 数据库基础
1. 数据库基础(重点) 1.1 什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 文件保存数据有以下几个缺点: 文件的安全性问题 文件不利于数据查询和管理 文件不利于存储海量数据 文件在程序中控制不方便 数据库存储介…...
《如何使用C语言去下三子棋?》
目录 一、环境配置 二、功能模块 1.打印菜单 2.初始化并打印棋盘 3、行棋 3.1玩家行棋 3.2电脑行棋 4、判断是否和棋 5.判赢 三、代码实现 1、test.c文件 2、game.c文件 3、game.h文件 一、环境配置 本游戏用到三个文件,分别是两个源文件test.c game.c 和…...
Linux——线程(4)
在上一篇博客中,我讲述了在多执行流并发访问共享资源的情况下,如何 使用互斥的方式来保证线程的安全性,并且介绍了Linux中的互斥使用的是 互斥锁来实现互斥功能,以及它的原理,在文章的结尾我提出了一个问题 用来引出同…...
vite+vue3项目中svg图标组件封装
一、安装插件 npm i vite-plugin-svg-icons -D 二、插件配置 // vite.config.jsimport { createSvgIconsPlugin } from "vite-plugin-svg-icons"; import path from "path";export default defineConfig({plugins: [// svg图标配置项createSvgIconsPlug…...
SAP Basis实战:Client创建与数据迁移的完整流程与避坑指南
1. 理解SAP Client的基本概念 在SAP系统中,Client(客户端)是一个非常重要的概念。简单来说,它就像是系统中的一个独立工作空间,每个Client都有自己的配置和数据。想象一下,一家大型企业有多个子公司&#x…...
弯腰系鞋带:动作虽细微,脊柱 “被折得濒临损伤”!
频繁弯腰系鞋带、捡拾地面物品、整理鞋盒、照顾幼儿,颈腰椎损伤风险显著。弯腰时腰椎瞬间弯曲,椎间盘承受压力骤增;单腿站立弯腰时,身体平衡依赖腰部肌肉,受力不均易导致拉伤;反复弯腰起身动作,…...
DEFOM-Stereo vs RAFT-Stereo:双目匹配领域的新旧王者对比实测(附KITTI数据集结果)
DEFOM-Stereo与RAFT-Stereo:双目视觉技术的实战性能解析 在计算机视觉领域,双目立体匹配技术一直是实现三维场景重建和环境感知的核心方法之一。近年来,随着深度学习技术的快速发展,RAFT-Stereo等基于神经网络的双目匹配算法已经展…...
gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具
gitru 基于 Git 的 commit-msg Hook 实现,用于在提交阶段自动校验提交信息格式。 在团队协作开发中,规范的 Git 提交信息是代码追溯、版本管理、自动生成变更日志的基础。 但现实往往是: 人工约束容易遗漏手动配置 Hook 繁琐提交信息格式随心…...
Kronos金融AI预测模型实战指南:从零构建企业级量化交易系统
Kronos金融AI预测模型实战指南:从零构建企业级量化交易系统 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos 在金融市场这个充满不确定性的战场…...
WarcraftHelper:魔兽争霸3现代优化解决方案 - 突破兼容性壁垒,重焕经典游戏活力
WarcraftHelper:魔兽争霸3现代优化解决方案 - 突破兼容性壁垒,重焕经典游戏活力 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper …...
视频内容自动打标:基于Emotion2Vec+ Large的语音情绪分析方案
视频内容自动打标:基于Emotion2Vec Large的语音情绪分析方案 1. 引言:语音情绪分析在视频内容管理中的价值 在视频内容爆炸式增长的今天,如何高效管理和检索海量视频素材成为内容平台面临的重大挑战。传统的人工打标方式不仅效率低下&#…...
需求分析避坑指南:如何避免‘用户说要马实际要车’的经典陷阱?
需求分析避坑指南:如何避免‘用户说要马实际要车’的经典陷阱? 在软件开发领域,需求分析是项目成败的关键环节。据统计,约70%的项目失败源于需求不明确或理解偏差。当用户说"想要一匹更快的马"时,他们真正需…...
March7thAssistant智能自动化:星穹铁道游戏效率工具全解析
March7thAssistant智能自动化:星穹铁道游戏效率工具全解析 【免费下载链接】March7thAssistant 🎉 崩坏:星穹铁道全自动 Honkai Star Rail 🎉 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 在《崩坏&am…...
Nunchaku-FLUX.1-dev镜像安全加固:非root运行/最小权限/网络策略限制
Nunchaku-FLUX.1-dev镜像安全加固:非root运行/最小权限/网络策略限制 1. 为什么需要安全加固? 当你把Nunchaku-FLUX.1-dev这个强大的文生图模型部署在自己的服务器上时,可能更多关注的是它能生成多么精美的图片,或者处理中文提示…...
