当前位置: 首页 > news >正文

C语言链表的相关操作

本文实现了一个学生信息管理的单向链表系统。头文件定义了链表结构体(包含学号、姓名、成绩)和基本操作接口。源文件实现了创建/销毁链表、插入/删除/查找节点、判断空链表、获取链表长度等功能,并提供了两种格式的打印函数。测试程序演示了创建链表、添加3个学生节点、查找节点、删除节点及打印链表等操作。系统采用模块化设计,通过函数指针实现灵活的打印方式,内存管理严谨,包含错误处理机制。该链表实现可作为学生信息管理的基础数据结构。

#ifndef_LINKED_LIST_H_#define_LINKED_LIST_H_#defineMAX_NAME_LEN14typedefenumStatus{ERROR,OK,NO=0,YES}Status;typedefstructStu{intstu_id;charname[MAX_NAME_LEN];floatscore;}Stu,Data;typedefstructNode{Data data;structNode*next;}Node,*pNode,*link;//1创建一个链表linkcreate_list();//销毁一个链表voiddestroy_list(link*link);//插入一个节点Statusinsert_node(link link,Stu stu);//查找一个节点pNodefind_node(link link,intstuid);//删除一个节点Statusdelete_node(link link,intstuid);//链表是否为空Statusis_empty(link link);//链表一共有多少个节点intget_link_size(link link);//打印一个信息voidprint_one_stu1(Stu stu);voidprint_one_stu2(Stu stu);voidprint_Node(pNode node,voidprint(Stu stu));voidprint_link(link link,voidprint(Stu stu));#endif
#include"linked_list.h"#include<stdlib.h>#include<string.h>#include<stdio.h>linkcreate_list(){pNode p=(pNode)malloc(sizeof(Node)*1);if(!p){perror("malloc error~!\n");exit(-1);}p->data.stu_id=0;strcpy(p->data.name,"");p->data.score=0.0f;p->next=NULL;returnp;}//[] 1 2 3 4 5voiddestroy_list(link*link){if(*link==NULL){return;}Node*current=*link;while(current!=NULL){Node*tmp=current;current=current->next;free(tmp);}*link=NULL;return;}Statusinsert_node(link link,Stu stu){if(link==NULL){returnERROR;}pNode new_node=(pNode)malloc(sizeof(Node)*1);if(!new_node){perror("malloc error~!\n");exit(-1);}new_node->data=stu;new_node->next=NULL;pNode p=link;while(p->next!=NULL){p=p->next;}p->next=new_node;returnOK;}pNodefind_node(link link,intstuid){if(link==NULL||link->next==NULL){returnNULL;}pNode current=link->next;while(current!=NULL){if(current->data.stu_id==stuid){returncurrent;}current=current->next;}returnNULL;}Statusdelete_node(link link,intstuid){if(link==NULL&&link->next){returnERROR;}pNode current=link;while(current->next!=NULL&&current->next->data.stu_id!=stuid){current=current->next;}if(current->next==NULL){returnERROR;}Node*tmp=current->next;current->next=tmp->next;free(tmp);returnOK;}voidprint_one_stu1(Stu stu){printf("%d\t%s\t%.2f\n",stu.stu_id,stu.name,stu.score);}voidprint_one_stu2(Stu stu){printf("%d\n%s\n%.2f\n",stu.stu_id,stu.name,stu.score);}voidprint_Node(pNode node,voidprint(Stu stu)){print(node->data);}Statusis_empty(link link){if(link==NULL||link->next==NULL)returnOK;returnNO;}intget_link_size(link link){if(link==NULL||link->next==NULL)return0;size_t size=0;pNode current=link->next;while(current){size+=1;current=current->next;}returnsize;}voidprint_link(link link,voidprint(Stu stu)){if(link==NULL||link->next==NULL)return;pNode current=link->next;while(current){print(current->data);current=current->next;}return;}
#include"linked_list.h"#include<stdio.h>#include<stdlib.h>voidtest(){link link=create_list();Stu s1={1001,"libai",99.0f};//shift + alt + 下Stu s2={1002,"libai2",92.0f};Stu s3={1003,"libai3",99.0f};insert_node(link,s1);insert_node(link,s2);insert_node(link,s3);pNode p=find_node(link,1011);if(p)print_Node(p,print_one_stu2);if(p)print_Node(p,print_one_stu1);print_link(link,print_one_stu1);Status status=delete_node(link,1001);printf("%s\n",status?"成功删除":"没找到");print_link(link,print_one_stu1);destroy_list(&link);if(link!=NULL){free(link);link=NULL;}}intmain(){test();return0;}
http://www.cnnetsun.cn/news/8319.html

相关文章:

  • 6、网络服务枚举与安全防护全解析
  • 8、Windows系统认证攻击与防范全解析
  • Linux网络参数:现代内核的智能优化之道
  • C# 随机数添加数组对象和数组的查询方法
  • RouterOS 7.19 x86深度技术解析:网络协议优化与系统稳定性关键技术
  • 你还在盲调量子电路?这3个VSCode插件让你秒变QML调试高手
  • RAG知识库——怎么构建一个高质量的知识库
  • 以向善价值观构建数字信任,数美2025 AI风控大会重磅发布“AI风控新范式”
  • 终极嵌入式按键解决方案:MultiButton状态机库实战指南
  • ZyPlayer终极配置指南:3步打造专属影院级体验
  • gmhelper:5分钟快速掌握国密算法SM2/SM3/SM4的完整应用方案
  • 19、高级Shell编程与正则表达式过滤器
  • PHP兼容性检查工具完整指南
  • 基于元胞自动机交通模型的三车道Matlab代码:模拟车辆多车道行驶及可视化分析系统
  • 豆包手机二手价被炒到3.6万元;被曝开发“芯片定位”技术,英伟达:这不是后门;千问月活突破3000万 | 极客头条
  • Wan2.2-T2V-A14B适合哪些行业?五大垂直领域推荐
  • 基于西门子S7-200PLC的自动灌溉系统组态王组态 带解释的梯形图程序,接线图原理图图纸,io分配
  • 机器学习驱动的智能化电池管理技术与应用
  • 如何优化MinerU项目的PaddleOCR模型部署效率
  • SVG.js动画开发终极指南:从入门到精通
  • Python 对象序列化与存储库pickle详细介绍
  • 圣诞快乐!来自代码世界的祝福
  • 一致性的威力:AI如何在B/G端释放数据治理的真正生产力
  • 知行之桥三种接口详解:Webhook、Flow API 与 Admin API
  • CPFEM晶塑动态展示:VUMAT子程序高效率与多维度模型应用测试
  • 毕业设计实战:基于SpringBoot+MySQL的旅游网站设计与实现,从需求到测试全流程拆解,新手也能轻松通关!
  • 如何在没有电脑的情况下备份 iPhone
  • Python HTTPX性能优化实战:10个技巧解决90%的连接问题
  • 空调加热器MPC模型预测控制程序与修正Kalman滤波:附简洁文献与附图与运行指南
  • Spring Boot日志文件未生成问题排查