C语言中单向链表的增删改操作如何实现
导读:这篇文章主要给大家介绍“C语言中单向链表的增删改操作如何实现”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“C语言中单向链表的增删改操作如何实现”文章能对大家有所帮助。...
这篇文章主要给大家介绍“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语言中单向链表的增删改操作如何实现”的内容就介绍到这,感谢各位的阅读,相信大家对C语言中单向链表的增删改操作如何实现已经有了进一步的了解。大家如果还想学习更多知识,欢迎关注网络,小编将为大家输出更多高质量的实用文章!
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: C语言中单向链表的增删改操作如何实现
本文地址: https://pptw.com/jishu/653161.html
