数据结构之单链表

2023-11-05

前言

在前面我们了解了线性表中的顺序表优点,顺序表可以将数放到一片连续的内存里且存储效率高,但是增加和删除效率很低,不可以增加长度,而今天的链表刚好解决了这些问题,链表在增加和删除中有着很高的效率,而且不像顺序表那样每删一个要顺序的移动

定义

链表是数据储存单元中非连续数据结构,数据的储存结构是通过指针链接依次实现的,链表由一系列结点组成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

单链表的数据结构
typedef int datatyda;         //类型名字的转换
typedef sturuct  lian_       //类型名字的转换
{
	datatyda data;                //定义指针的储存数据
	struct lian_   *next;			//储存下一个地址的指针域
}w;
单链表头节点的创建
w link_creat ()
{
	w *l = (w*)malloc(sizeof (w));   //堆区内存的申请
	if (l == NULL ) return NULL;		// 指针为空的话返回
	l -> data =0								//节点初始化
	l ->next =	NULL;							
	return l;									// 返回地址
}
节点的添加之尾插法
int list_add_taill  (w *l,datatyda a)
{
	w *n = malloc (sizeof (w);   // 申请一个新的节点
	p ->data =a;							// 定义节点数据
	p -> next =NULL;					
	w *p =l;								//指针的定义
	if (p -> next !=NULL)
	{
		p = p -> next;					//指针的移动,直到最后一位
	}
	p ->next = n;						// 指向	NULL的指针指向n
	l ->data ++;						//	个数记录
	return 0;
}
节点添加之头插法
int list_add_head (w *l,datatype a)
{
	 w p* = l;       
	 p ->next = l ->next;						// l 指向的下一位变为p指向的下一位	
	  l ->next = n;			 					// l指向n
	 l ->data ++;									// 个数记录
}
链表的查看
int list_show (w *l)
{
	w *p =l ;
	while (p !=	NULL)
	{
				p = p ->next;	
				printf ("data=%d",p ->data);
	
    }	
  return 0;
}
链表的插入之按数值插入
int list_insert_var (w *l, datatype a,int b)
{
	w *n = malloc(sizeof(w));
	w *p = l ;
	n ->data =b;
	n ->next = NULL;
	while (p->next !=NULL)
	{
			p= p ->next;
			if (p ->data==a)
			{
				p ->next = n->next;
				p ->next =n;
			}
	}
	return 0;
}
链表的删除之按位置删除
int list_del_sit	(w *l,datatype a)
{
	w p1* = l ->next;
	w p2 = l;
	int b =0;
	while (p1 !=NULL)
	{
			
			b ++
			if (b ==a)
			{
					p1 ->next = p2 ->next;
					free (p2);
					p2  = p1 -next;
			}
			else 
			{
				p1 =p1 ->next;
				p2 = p2 -> next;
			}
	}
				return 0;
}

链表的按值修改
int list_change (w *l,datatype a,datatype b)
{
		w *p = l->next;
		while (p != NULL)
		{
				if (p ->data == a)
				{	
				p -> data =b;
				}
				p = p ->next;
		} 
		return 0;
}
链表的释放
int list_free (w *l)
{
		while (l ->next != NULL)
		{
			free (l )
			l = l ->next
		}
		free (l);
		return 0;
}

总结

这里只是一些链表的基础,其中没有包括的还有一些链表的按位置和按值查询的方法,在这里就不多写了,主要的思路的就是断开当前的链,连接到下一个节点,然后通过下一个指针不为空的条件循环下去,找到自己需要二点条件,同时写链表的时候主要要注意链表的指针的位置,注意表头和表尾的特殊情况就好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构之单链表 的相关文章

随机推荐

  • nginx日志中的各类耗时(time)

    背景 分析nginx日志时碰到了request time和upstream response time两种时间 一时没有反应过来有什么区别 于是上了度娘发现很多对这两组名词的解释 为了更好地理解又去看了看nginx的官方文档 发现原来除了这
  • 使用parted划分GPT分区(fdisk与parted区别)

    parted命令可以划分单个分区大于2T的GPT格式的分区 也可以划分普通的MBR分区 fdisk命令对于大于2T的分区无法划分 大于2 2TB的存储空间用fdisk不支持 需要采用parted来分区 所以用fdisk无法看到parted划
  • Z变换理论梳理

    自控笔记 6 3 Z变换理论 本文框架如下 一 Z变换定义 Z变换是研究离散系统的数学工具 与拉式变换在连续系统中的地位是一样的 Z变换只对离散信号而言 Z变换对连续信号无意义 它并不是一种新的数学变换 它只是在离散信号拉普拉斯变换中的 e
  • NSX-T 架构-(1)

    IT世界的变化以应用为导向 大抵可以分为Iphone出现和容器的大规模应用两次大的变革时间点 残喘十几年的物理机加各种功能性盒子组成的IT系统慢慢分崩离析 虚拟化 容器化和云化慢慢成为现代化应用新的栖身之所 而连通这一切的网络 也随之变化
  • 【华为OD机试真题2023B卷 JAVA&JS】跳格子游戏

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 跳格子游戏 知识点图 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 地上共有N个格子 你需要跳完地上所有的格子 但是格子间是有强依赖关系的 跳完前一个格子后 后续的格
  • AI中Deepfake的部分研究前沿与文献综述

    AI中Deepfake的部分研究前沿与文献综述 一 研究现状 二 典型算法 三 存在问题 四 未来的研究热点 参考文献 一 研究现状 由于Deepfake其潜在的安全威胁 它已经引起了学术界和工业界的研究兴趣 为了减轻这种风险 人们提出了许
  • JavaScript作用域与作用域链

    JavaScript作用域与作用域链 JavaScript的作用域和作用域链是理解这门语言的关键概念之一 作用域指的是变量和函数在程序中可被访问的范围 作用域链是由函数的嵌套关系决定的变量对象的链式结构 静态作用域与动态作用域 JavaSc
  • React + antd 树Tree实现树节点的增删改(自定义树节点插槽)

    效果 树Tree实现悬浮节点展示增删改的操作按钮 自定义树节点的展示 核心 使用titleRender 示例
  • “头腾大战”烽烟再起,飞书触犯了微信的隐私数据安全红线?

    数据猿报道 近期热点 市值掉了15亿 向商家赔付1 5亿元 微盟再发公告 数据恢复期延后至3月3日 微盟SAAS数据遭核心员工破坏 回应 远程办公忽视了对员工精神状态的关注 大数据产业创新服务媒体 聚焦数据 改变商业 头腾大战 再起硝烟 2
  • java 中int String类型转换

    int gt String int i 12345 String s 第一种方法 s i 第二种方法 s String valueOf i 这两种方法有什么区别呢 作用是不是一样的呢 是不是在任何下都能互换呢 String gt int s
  • 最好用的 8 款 React Datepicker 时间日期选择器测评推荐

    本文完整版 最好用的 8 款 React Datepicker 时间日期选择器测评推荐 React Date Time Picker 时间选择器 1 React Datepicker 经典中的经典 常规场景闭眼选它 2 Material U
  • keepalived启停脚本+配置文件

    keepalived启停脚本 bin bash keepalived 家目录 KP HOME xxx xxx keepalived keepalived 运行脚本路径 KP CMM HOME KP HOME sbin keepalived
  • MySQL运行SQL文件时(全面,改成time):check the manual that corresponds to your MySQL server version for the righ

    参考 Mysql错误 check the manual that corresponds to your MySQL server version for the right syntax 加 符号 修改有冲突的字段名 check the
  • Unity实现文本点击事件

    写在前面的一些碎碎念 好久没有来写文章了 主要是这一两年找了一份不错的工作 进入了舒适区 工作上的功能没有什么创新 都是以前做过的功能 这不 最近开发一款类似传奇的手游 需要实现聊天栏文字点击的效果 今天就来分享一下 直接上代码 组件用的是
  • 超详细

    Hello 大家好 我是starz 这是本系列的第二篇 概率基础 虽说是概率基础 但作为过渡 它开始以图为载体 这节的主要内容有 贝叶斯网络 三种结构 D 划分 贝叶斯球 马尔科夫毯 应用例子 总结 让我们开始吧 3 贝叶斯网络 概率图模型
  • React 从零开始学习(十四)—— 类组件 VS 函数式组件

    类组件 Class Components VS 函数式组件 Functional Components React 定义组件 类组件 Class Components 函数式组件 Functional Components React 定义
  • 铨顺宏RFID工具跟踪管理系统,快速完成工具查找

    一 应用背景 RFID工具管理系统 快速完成工具查找 在各行各业中工具其实是一项重要不可或缺的资产 相关作业人员每天都要与工具打交道 怎么快捷便利的领用 归还 查找和保护这些工具 对企业管理来说是非常重要的工作 基于RFID工具管理系统可以
  • LDAP--OpenLDAP

    首先说下标题LDAP OpenLDAP 他们并不是一个东西 LDAP Lightweight directory access protocol 轻量级目录访问协议 是美国密歇根大学推出的基于X 500标准的一种简化的目录访问协议 属于目录
  • Mac安装redis与后台启动

    使用 brew install redis Mac安装brew请参考 https blog csdn net weixin 35757704 article details 108880008 安装后的目录是 usr local Cella
  • 数据结构之单链表

    前言 在前面我们了解了线性表中的顺序表优点 顺序表可以将数放到一片连续的内存里且存储效率高 但是增加和删除效率很低 不可以增加长度 而今天的链表刚好解决了这些问题 链表在增加和删除中有着很高的效率 而且不像顺序表那样每删一个要顺序的移动 定