【C语言数据结构】单链表
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,LinkList.h#ifndef LINK_LIST_H#define LINK_LIST_H//链表节点typedef struct _LinkListNode{ struct _LinkL
千家信息网最后更新 2025年12月02日【C语言数据结构】单链表
LinkList.h
#ifndef LINK_LIST_H#define LINK_LIST_H//链表节点typedef struct _LinkListNode{ struct _LinkListNode *next;}LinkListNode;//单链表typedef void LinkList;/* * 创建单链表 * @return 返回单链表的指针 */LinkList* LinkList_Create();/* * 销毁单链表 * @param list 单链表的指针 */void LinkList_Destroy(LinkList *list);/* * 清空单链表 * @param list 单链表的指针 */void LinkList_Clear(LinkList *list);/* * 向单链表pos位置处插入元素 * @param list 单链表指针 * @param node 元素指针 * @param pos 插入的索引 */int LinkList_Insert(LinkList *list,LinkListNode *node,int pos);/* * 获取单链表中索引位置处的元素 * @param list 单链表指针 * @param pos 单链表索引值 * @param return 元素指针 */LinkListNode* LinkList_Get(LinkList *list,int pos);/* * 删除单链表中索引位置处的值 * @param list 单链表的指针 * @param pos 单链表索引 * @param return 非0表示删除成功 */int LinkList_Remove(LinkList *list,int pos);/* * 获取单链表当前已存储元素的个数 * @param list 单链表的指针 * @return 单链表中已存储元素的个数 */int LinkList_Length(LinkList *list);#endif // LINKLIST_HLinkLink.c
#include "Linklist.h"#include//单链表typedef struct _LinkList{ LinkListNode header;//链表头节点 int length;//链表长度}TLinkList;/* * 创建单链表 * @return 返回单链表的指针 */LinkList* LinkList_Create(){ TLinkList * list = (TLinkList *)malloc(sizeof(LinkList)); if(list != 0) { list->header.next = 0; //初始化头结点的后继指针为空 list->length = 0; } return list;}/* * 销毁单链表 * @param list 单链表的指针 */void LinkList_Destroy(LinkList *list){ free(list);}/* * 清空单链表 * @param list 单链表的指针 */void LinkList_Clear(LinkList *list){ if(list != 0) { TLinkList* l_list = (TLinkList *)list; l_list->header.next = 0; l_list->length = 0; }}/* * 向单链表pos位置处插入元素 * @param list 单链表指针 * @param node 元素指针 * @param pos 插入的索引 */int LinkList_Insert(LinkList *list,LinkListNode *node,int pos){ //类型转换 TLinkList* l_list = (TLinkList *)list; //判断链表指针和节点指针不能为空,当前插入的位置是否合法 int ret = ((list != 0) && (node != 0) && (pos >= 0) && (pos <= l_list->length)); if(ret) { LinkListNode* current = (LinkList *)l_list; int i; //移动到需要插入的位置的前驱 for(i = 0; i < pos;i++) { current = current->next; } node->next = current->next; //被插入节点的后继指针指向前驱节点的后继指针 current->next = node; //前驱节点的后继指针指向被插入节点 l_list->length++; } return ret;}/* * 获取单链表中索引位置处的元素 * @param list 单链表指针 * @param pos 单链表索引值 * @param return 元素指针 */LinkListNode* LinkList_Get(LinkList *list,int pos){ LinkListNode* node = 0; TLinkList * l_list = (TLinkList *)list; //判断链表指针不为空,且获取的索引合法 if( (l_list != 0) && (pos >= 0) && (pos < l_list->length) ) { LinkListNode* current = (LinkList *)l_list; int i; for(i = 0; i < pos; i++) { current = current->next; } node = current->next; } return node;}/* * 删除单链表中索引位置处的值 * @param list 单链表的指针 * @param pos 单链表索引 * @param return 非0表示删除成功 */int LinkList_Remove(LinkList *list,int pos){ TLinkList * l_list = (TLinkList *)list; int ret = ((l_list != 0) && (pos >= 0) && (pos < l_list->length)); if(ret) { LinkListNode* current = (LinkList *)l_list; int i; for(i = 0; i < pos; i++) { current = current->next; } //被删除元素的前驱元素的后继指针,指向被删除元素的后继指针 current->next = current->next->next; l_list->length--; } return ret;}/* * 获取单链表当前已存储元素的个数 * @param list 单链表的指针 * @return 单链表中已存储元素的个数 */int LinkList_Length(LinkList *list){ int ret = -1; if(list != 0) { TLinkList * l_list = (TLinkList *)list; ret = l_list->length; } return ret;}
测试代码
#include#include "Linklist.h"typedef struct _node{ LinkListNode node; int v;}Node;int main(void){ int i; Node n[5]; Node *node; for(i = 0;i < 5;i++) { n[i].v = i; } LinkList *list = LinkList_Create(); for(i = 0; i < 5;i++) { LinkList_Insert(list,(LinkListNode *)&(n[i]),0); } LinkList_Remove(list,2); for(i = 0; i < LinkList_Length(list);i++) { node = (Node *)LinkList_Get(list,i); printf("%d\n",node->v); } return 0;}
指针
元素
索引
位置
节点
后继
个数
前驱
存储
指向
合法
成功
代码
类型
结点
表头
长度
测试
移动
数据
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
公司服务器怎么管理员密码
网络安全年终考核通知
交大网络安全研究生就业情况
贺州市网络安全支队
电脑数据库文件是什么原因
旅游景区信息网络技术员
数据库事务的4种级别
大学里的网络安全员
青浦区信息软件开发管理方法
java写数据库系统
铜陵市网络安全专家公示
关系数据库中最基础的对象是
某书店图书数据库包含
本届互联网大会的黑科技
中国版我的世界有32k的服务器
深圳网络技术学院怎么样
甘肃高校党建软件开发公司
广东嵌入式软件开发服务费
高科技网络技术代理品牌
处置来自国外网络安全
sql每天每个部门的数据库
不沉迷网络安全课件
上位机软件开发 流程
网络安全法依法给予
数据库提取图片坐标
服务器奇偶一致性校验卡住
网络安全知识内容500字
建设人员和特殊行业数据库
万方数据库怎么下载
数据库nb3文件怎么用