【C语言数据结构】单链表
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,LinkList.h#ifndef LINK_LIST_H#define LINK_LIST_H//链表节点typedef struct _LinkListNode{ struct _LinkL
千家信息网最后更新 2025年01月24日【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_H
LinkLink.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安全错误
数据库的锁怎样保障安全
雷霆万钧网络技术
wechat数据库
中免有做网络技术的吗
为什么完美老是连接服务器失败
常宁电信网DNS服务器
新疆网络安全管理条例
华为服务器 U盘启动
软件开发公司竞争优势
计算机网络技术发展背景
软件开发需要专利费吗
云服务器 域名
安卓软件开发要什么
代理第三方服务器
可进行文献传递的数据库有哪些
网络安全工管理岗位职责
对日软件开发基础书
辽阳软件开发费用
网络安全为人民短信
服务器如何添加别人的记录
呼市新华互联网科技
网络安全与刑侦科学哪个好
克州网络技术是什么
浙江少儿网络安全教育平台
空间模型软件开发
网络安全大赛是啥
网络技术服务市场前景
云计算下的网络安全技术实现路径
怀柔区软件开发反馈
网络技术部工作交接表
江苏服务器机柜质量好不好