千家信息网

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

发表于:2024-12-03 作者:千家信息网编辑
千家信息网最后更新 2024年12月03日,这篇文章主要介绍了C语言中如何实现单向链表的增删查改操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言链表是线性表的链式存储结构,
千家信息网最后更新 2024年12月03日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语言中如何实现单向链表的增删查改操作"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

0