资讯详情

通用链表封装:高效管理多类型数据

📅 2026/10/11 6:26:54 | 华诺云谱 👁 阅读
通用链表封装:高效管理多类型数据
通用链表封装及文件结合链表封装学习目标01 通用链表的结构体设计02 通用链表的基本操作封装03 通用链表与文件结合的封装04 结合项目案例PART.01 通用链表数据结构设计关于链表的重复操作的思考思考当一个项目里要使用多种结构体类型的链表例如物流管理系统里有用户、货物、订单等结构体若要对这三种链表操作就需要编写3套链表操作代码对链表的操作有链表创建、添加节点、删除节点、获取链表节点个数、获取链表结点数据、释放链表等对于这3种业务对链表的操作是相同的那能不能编写一套通用的链表操作函数这3种应用只要调用相应的操作函数即可普通链表// 货物结构体typedefstruct{charid[12];charname[20];floatweight;// 单位:kgfloatvolume;// 单位:m3chardescription[200];}Goods;typedefstructNode{Goods data;//datastructNode*next;//next}LNode;普通链表操作分析//初始化链表(创建带有头结点的空链表)LNode*initList(){//创建头结点,不存储数据LNode*head(LNode*)malloc(sizeof(LNode));if(headNULL){printf(内存分配失败\n);exit(1);}head-priorNULL;head-nextNULL;//头结点的next初始化为NULLreturnhead;}//在链表尾部插入节点voidinsertAtTail(LNode*head,Goods data){LNode*phead;//创建新节点LNode*newNodecreateNode(data);//移动p,指向尾节点while(p-next!NULL){pp-next;}//增加p-nextnewNode;newNode-priorp;//循环链表newNode-nexthead;}通用链表设计// 货物结构体typedefstruct{charid[12];charname[20];floatweight;// 单位:kgfloatvolume;// 单位:m3chardescription[200];}Goods;//通用链表结点设计typedefstructNode{void*data;//存放数据的地址structNode*next;//next}LNode;图示说明head头结点每个链表节点内data为void*泛型指针指向外部的Goods结构体数据next指向下一个链表节点。PART.02 通用链表的基本操作封装货物链表的基本操作实操LNode*initList();// 初始化链表(创建带有头结点的空链表)LNode*createNode(void*data);// 创建新节点voidinsertAtTail(LNode*head,void*data);// 在链表尾部插入节点// 在指定位置插入节点(位置从0开始,不包括头结点)intinsertAtPosition(LNode*head,void*data,intposition);voiddeleteNode(LNode*head,intposition);// 删除指定位置的节点// 查找指定位置的节点,返回其数据地址(从0开始,不包括头结点)void*findNode(LNode*head,intposition);voidfreeList(LNode*head);// 释放链表内存(包括头结点)intgetListNodeCount(LNode*head);//获取链表结点个数PART.03 通用链表结合文件链表数据写入文件/* 函数名:list_write_file 函数功能:把链表数据写入文件 参数:fp:文件指针 size:每次写入大小 head:链表头结点 返回值:无 */voidlist_write_file(FILE*fp,intsize,LNode*head){LNode*phead;inti0;rewind(fp);while(p-next!NULL){pp-next;fwrite(p-data,size,1,fp);fflush(fp);}}读文件数据存入链表/* 函数名:file_read_list 函数功能:读文件存储链表 参数:fp:文件指针 size:每次读取大小 head:链表头结点 返回值:无 */voidfile_read_list(FILE*fp,intsize,LNode*head){intcount0;void*data;rewind(fp);datamalloc(size);memset(data,0,size);while(fread(data,size,1,fp)0){insertAtTail(head,data);datamalloc(size);memset(data,0,size);}free(data);}PART.04 动态顺序表封装优化动态顺序表优化旧版本typedefstruct{USER_T*data;// 指向存储数据的动态数组intlength;// 当前顺序表的长度intcapacity;// 当前顺序表的容量}DynamicSeqList;优化后(通用版void*泛型指针)// 定义动态顺序表结构体typedefstruct{void*data;// 指向存储数据的动态数组intlength;// 当前顺序表的长度intcapacity;// 当前顺序表的容量}DynamicSeqList;动态顺序表封装函数//初始化动态顺序表voidInitDynamicList(DynamicSeqList*list,intsize);// 扩容操作voidExpandDynamicList(DynamicSeqList*list,intsize);// 插入元素(在指定位置pos插入元素value)intInsertDynamicList(DynamicSeqList*list,intpos,void*value,intsize);// 删除指定位置的元素intDeleteDynamicList(DynamicSeqList*list,intpos,intsize);// 修改指定位置的元素值intUpdateDynamicList(DynamicSeqList*list,intpos,void*newValue,intsize);// 释放动态顺序表占用的内存voidDestroyDynamicList(DynamicSeqList*list);PART.05 通用链表结合项目实战货物查询物流管理系统货物查询界面欢迎:admin 2025年9月19日 ID 货物名 货物重量kg 货物体积 描述 1001 手机 1.10 2.00 苹果手机 1002 电视 10.00 20.00 小米电视 上页- 共2条 -下页
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑