这篇文章主要介绍了C语言中如何实现单向链表的增删查改操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言链表是线性表的链式存储结构,它可以以O(1)的时间复杂度进行插入或者
这篇文章主要介绍了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修改
SListNode* BuyListNode(SLTDadaType x){SListNode* newnode = (SListNode*)malloc(sizeof(SListNode));newnode->_data = x;newnode->_next = NULL;return newnode;}
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;}}
SListNode* SListPushFornt(SListNode* head, SLTDadaType x){SListNode* newnode = BuyListNode(x);newnode->_next = head;head = newnode;return head;}
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;}}
SListNode* SListPopFornt(SListNode* head){ if (head == NULL){return head;}else{SListNode* cur = head->_next;free(head);head = cur;return head;}}
SListNode* SListFind(SListNode* head, SLTDadaType x){SListNode* cur = head;while (cur){if (cur->_data == x){return cur;}else{cur = cur->_next;}}return NULL;}
void SListModify(SListNode* head, SLTDadaType x, SLTDadaType y)//x修改{SListNode* find = SListFind(head, x);if (find){find->_data = y;}else{printf("对不起,您要修改的值不存在\n");}}
感谢你能够认真阅读完这篇文章,希望小编分享的“C语言中如何实现单向链表的增删查改操作”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网其他教程频道,更多相关知识等着你来学习!
--结束END--
本文标题: C语言中如何实现单向链表的增删查改操作
本文链接: https://www.lsjlt.com/news/305775.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0