C语言中如何实现单向链表的增删查改操作
发表于:2024-09-21 作者:千家信息网编辑
千家信息网最后更新 2024年09月21日,这篇文章主要介绍了C语言中如何实现单向链表的增删查改操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言链表是线性表的链式存储结构,
千家信息网最后更新 2024年09月21日C语言中如何实现单向链表的增删查改操作
这篇文章主要介绍了C语言中如何实现单向链表的增删查改操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
前言
链表是线性表的链式存储结构,它可以以O(1)的时间复杂度进行插入或者删除,同时由于是链式结构相比顺序表而言,不会存在空间浪费的情况。而链表又分为带头单向链表,不带头单向链表,带头循环链表,不带头循环链表,带头双向循环链表,不带头双向循环链表,带头双向链表,不带头双向链表,总共有八种,其中结构最简单的是不带头单向链表,也是实现起来最容易出错的。并且我们在网上进行链表的oj时,题目基本也是不带头的单向链表,而且也是互联网大厂面试中最容易考的。
一、创建
typedef int SLTDadaType;//存放的数据类型struct SListNode{ SLTDadaType _data;//存放的数据 struct SListNode* _next;//指向下一个节点的指针};typedef struct SListNode SListNode;
二、单向链表的函数声明
SListNode* BuyListNode(SLTDadaType x);//创建一个节点SListNode* SListPushBack(SListNode* head, SLTDadaType x);//尾插SListNode* SListPopBack(SListNode* head);//头插SListNode* SListPushFornt(SListNode* head, SLTDadaType x);//尾删SListNode* SListPopFornt(SListNode* head);//头删SListNode* SListFind(SListNode* head, SLTDadaType x);//查找一个节点void SListModify(SListNode* head, SLTDadaType x,SLTDadaType y);//x修改
三、函数实现
1.创建节点
SListNode* BuyListNode(SLTDadaType x){ SListNode* newnode = (SListNode*)malloc(sizeof(SListNode)); newnode->_data = x; newnode->_next = NULL; return newnode;}
2.尾插节点
SListNode* SListPushBack(SListNode* head, SLTDadaType x){ SListNode* newnode = BuyListNode(x);//无论节点是否为空,都先进行创建一个节点 if (head == NULL) //头节点为空 { head = newnode; return head; } else //头节点不为空,直接遍历到链表结尾进行尾插 { SListNode* tail = head; while (tail->_next != NULL) { tail = tail->_next; } tail->_next = newnode; return head; }}
3.头插
SListNode* SListPushFornt(SListNode* head, SLTDadaType x){ SListNode* newnode = BuyListNode(x); newnode->_next = head; head = newnode; return head;}
4.尾删
SListNode* SListPopBack(SListNode* head){ //1.空 //2.只有一个节点 //3.有多个节点 if (head == NULL) { return head; } else if (head->_next== NULL) { free(head); head = NULL; return head; } else { SListNode* prev = NULL; SListNode* tail = head; while (tail->_next != NULL) //利用前指针来保存要删除的节点的前一个节点 { prev = tail; tail = tail->_next; } free(tail); if (prev != NULL) prev->_next = NULL; return head; }}
5.头删
SListNode* SListPopFornt(SListNode* head){ if (head == NULL) { return head; } else { SListNode* cur = head->_next; free(head); head = cur; return head; }}
6.查找节点
SListNode* SListFind(SListNode* head, SLTDadaType x){ SListNode* cur = head; while (cur) { if (cur->_data == x) { return cur; } else { cur = cur->_next; } } return NULL;}
7.修改
void SListModify(SListNode* head, SLTDadaType x, SLTDadaType y)//x修改{ SListNode* find = SListFind(head, x); if (find) { find->_data = y; } else { printf("对不起,您要修改的值不存在\n"); }}
感谢你能够认真阅读完这篇文章,希望小编分享的"C语言中如何实现单向链表的增删查改操作"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
节点
单向
双向
篇文章
环链
结构
语言
函数
同时
指针
数据
链式
复杂
互联网
价值
兴趣
前言
只有
复杂度
多个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
目前服务器有哪些配置
数据库有哪些常用的数据模型
网络安全重要性讨论
包头学网络技术在哪
国内服务器安全性排名
医药互联网科技
数据库 明细表
局域网访问不到服务器
和平区专业的软件开发哪家强
mac 微服务器
奉贤区品质软件开发电话多少
网易版mc生存服务器推荐
联想3650服务器进入raid
筷子代驾软件开发
怎样查询数据库所有的视图
多肽二级质谱分析数据库
数据库安全认证模式
网络安全有奖问答题
软件开发工具上的运行在哪里
互联网 政务服务网络安全
阿里云服务器购买三年有优惠吗
cb网络安全
和平精英服务器进不去什么情况
联想机架式刀片服务器专卖
计算机的网络安全的目标
计算机3级网络技术应用题
怎么管理服务器登录账户
网络安全性保障
没有数据库的源码怎么查后台密码
上海迈腾网络技术有限公司