文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言中如何实现单向链表的增删查改操作

2023-06-25 15:39

关注

这篇文章主要介绍了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语言中如何实现单向链表的增删查改操作”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯