您现在的位置是:群英 > 开发技术 > 编程语言
C语言中单向链表的增删改操作如何实现
Admin发表于 2022-08-22 17:58:55383 次浏览
这篇文章主要给大家介绍“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语言中单向链表的增删改操作如何实现已经有了进一步的了解。大家如果还想学习更多知识,欢迎关注群英网络,小编将为大家输出更多高质量的实用文章!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。

标签: 单向链表操作
相关信息推荐
2022-06-02 17:22:10 
摘要:方法:1、用array_intersect()比较数组,语法“array_intersect(数组1,数组2)”,会返回一个交集数组;2、用count()获取交集数组的长度,语法“count(数组)”,返回的数组长度就是值相同元素的个数。
2022-07-30 17:34:47 
摘要:在node中,全局包指的是在项目中用于安装本地包的工具包,例如nrm、yarn、cnpm等;软件包是包含在程序中的库,必须在使用软件包的每个项目中安装本地包,并且全局包只需要安装在一个位置,可以使用-g或--global选项命令npm安装全局包,也可以利用“npm ls -g”查看已经安装的全局包。
2022-07-22 17:44:56 
摘要:用python画星空源代码是【from turtle import * from random import random,randint screen = Screen() width ,height = 800,600】。
云活动
推荐内容
热门关键词
热门信息
群英网络助力开启安全的云计算之旅
立即注册,领取新人大礼包
  • 联系我们
  • 24小时售后:4006784567
  • 24小时TEL :0668-2555666
  • 售前咨询TEL:400-678-4567

  • 官方微信

    官方微信
Copyright  ©  QY  Network  Company  Ltd. All  Rights  Reserved. 2003-2019  群英网络  版权所有   茂名市群英网络有限公司
增值电信经营许可证 : B1.B2-20140078   粤ICP备09006778号
免费拨打  400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567 或 0668-2555555
微信公众号
返回顶部
返回顶部 返回顶部