单向链表的应用

单向链表的应用

  • 链表的概念,基本操作
    • 创建节点
    • 插入节点
  • 表尾插入
  • 链表遍历
    • 为什么静态链表很少用
    • 传统链表的思考

链表的概念,基本操作

链表是一种物理存储单元上非连续的存储结构,由一系列节点(链表中每一个元素称为节点)组成,结点可以在运行时动态生成,节点与节点之间通过指针链接。每个节点包括两个部分 :一部分是存储数据元素的数据域,另一部分是存储下一个节点地址的指针域。

在这里插入图片描述

  1. 链表是一种常用的数据结构,它通过指针将一些列数据节点,连接成一个数据链。相对于数组,链表具有良好的动态性。
  2. 数据域用来存储数据,指针域用来建立与下一个节点的联系。
  3. 建立链表时无需预先知道数据总量的,可以随机的分配空间,可以高效的在链表中的任意位置实时插入或删除数据。
  4. 链表的开销,主要是访问顺序性和组织链的空间损失。

单向链表:
在这里插入图片描述
双向链表:
在这里插入图片描述
在这里插入图片描述

创建节点

在创建节点之前,我们已经创建好了结构体和表头

//创建结构体
struct Node
{int data;struct Node* next;
};
//创建表头
struct Node* createlist()
{struct Node* head = (struct Node*)malloc(sizeof(struct Node));head->next = NULL;//头节点指向空return head;
}
//创建节点
struct Node* createNode(int num)
{struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));newNode->data = num;newNode->next = NULL;return newNode;//返回节点的地址
}

插入节点

表头插入:

//表头法插入
struct Node* insertByHead(struct Node*head,int num)
{struct Node* newNode = createNode(num);//指向新节点的指针newNode->next = head->next;head->next = newNode;return newNode;
}

表尾插入

//表尾法插入
struct Node* insertByEnd(struct Node* head, int num)
{struct Node* newNode = createNode(num);//指向新节点的指针while (head->next != NULL)   //从头到位一直往后,直到找到最后一个节点{head = head->next;}head->next = newNode;      //将新节点接在原最后一个节点后面return newNode;            //返回一个地址
}

链表遍历

//链表的遍历
void printlist(struct Node* head)
{head = head->next;        //头节点一般不存放数据while (head != NULL)      //当节点不为空时即执行循环{printf("%d ", head->data);head = head->next;    //输出后移向下一节点}printf("\n");
}

为什么静态链表很少用

  1. 需要提前申请内存,不能动态增长;
  2. 操作麻烦,需要维护两条链表,一条保存未使用的节点,一条保存已使用的节点。

传统链表的思考

传统链表的缺点:

  1. 和具体结构绑定,不通用
  2. 链表逻辑试图包含业务逻辑(业务数据)
  3. 业务数据和链表逻辑耦合性太高

非传统链表
业务逻辑结构,包含链表结构
通用链表
业务逻辑结构,包含链表结构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3018206.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

网络基础-默认网关

默认网关,又称缺省网关,缺省路由器;它是指在一个连接两个不同网络的设备,为网关设备;当主机需要发送数据包到另一个子网或者另一个网络时,它会首先检查目标地址是否在本地子网内;如果不在本地子…

【intro】图注意力网络(GAT)

论文阅读 https://arxiv.org/pdf/1710.10903 abstract GAT,作用于图结构数据,采用masked self-attention layers来弥补之前图卷积或类似图卷积方法的缺点。通过堆叠layers,让节点可以添加其邻居的特征,我们就可以给不同的邻居节…

创建SpringBoot3.X项目(使用IDEA2022创建SpringBoot3.X项目)

创建项目 1.点击New Project(新建项目) 项目基本信息 项目依赖 修改项目基本信息 1.修改配置文件类型(按需调整) 一版创建完成的项目都是application.properties配置文件,如果喜欢使用yml的可以直接修改配置文件后…

Spring-Cloud-OpenFeign源码解析-01-OpenFeign简介

OpenFeign简介 OpenFeign是一种声明式、模板化的HTTP客户端(仅在Application Client中使用)。声明式调用是指,就像调用本地方法一样调用远程方法,无需感知操作远程http请求。 OpenFeign和Feign的区别 Feign是Spring Cloud组件中一个轻量级RESTful的HT…

2024爆火的AI设备Rabbit R1到底是什么?有人说它是AI的iPhone时刻,有人说它是套壳的安卓

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识…

OpenHarmony usb打开报错“usb fail error code = -3, error msg = LIBUSB_ERROR_ACCESS”

一、前言:最近公司项目需求,定位要求使用国产系统,国产系统无非就是 统信os ,麒麟OS, 还有这两年比较热的 OpenHarmony。于是,老板要求公司产品适配OpenHarmony , 跟上时代步伐。 二、在开发中使用 usb 通讯时&#x…

CH32V 系列 MCU IAP 使用函数形式通过传参形式灵活指定APP跳转地址

参考: CH32V 系列 MCU IAP 升级跳转方法 CH32V103 的 IAP 问题(跳转及中断向量表重定位) 1. 沁恒的RISC-V内核MCU的IAP跳转示例程序简要分析 沁恒的RISC-V内核的MCU比如CH32V203、CH32V307等系列的EVT包中IAP升级的示例程序中都是通过使能软件中断之后&…

SSM【Spring SpringMVC Mybatis】——Maven

目录 1、为什么使用Maven 1️⃣获取jar包 2️⃣添加jar包 3️⃣使用Maven便于解决jar包冲突及依赖问题 2、什么是Maven 3、Maven基本使用 3.1 Maven准备 3.2 Maven基本配置 3.3 Maven之Helloworld 4、Maven及Idea的相关应用 4.1 将Maven整合到IDEA中 4.2 在IDEA中新建…

odoo实施之各种导航设计

odoo各种基础能力:活动、讨论 玩转odoo,真有玩的体验 odoo消息提醒能力 odoo 讨论模块 odoo 通过new message触发任务 安装odoo studio进行拖拉拽设计 查阅官方文档,向官方提issue 欧洲和美国,虽然都是英语,但日期格式…

市场营销的酒店营销策略研究意义

在市场经济条件下,市场营销策略已成为企业经营管理中最重要的组成部分,其在企业管理中的地位日益显现出来。 然而,由于酒店营销环境的特殊性,酒店营销策略研究一直是咱们从业者研究的热点之一。 对于酒店营销策略的研究&#xf…

PHPStudy Apache或者MySQL启动以后自动停止

问题 phpstudy小皮面板中的Apache或MySQL启动以后自动停止 正在启动——已启动——已停止 总结:最主要的原因:端口冲突 端口冲突了,已经有其他程序占用了80、3306端口。 也就是说你的电脑上已经有了一个Apache、MySQL并且正在运行。 解决方案…

04.2.配置应用集

配置应用集 应用集的意思就是:将多个监控项添加到一个应用集里面便于管理。 创建应用集 填写名称并添加 在监控项里面找到对应的自定义监控项更新到应用集里面 选择对应的监控项于应用集

Verilog中4位数值比较器电路

某4位数值比较器的功能表如下。 请用Verilog语言采用门级描述方式,实现此4位数值比较器 参考代码如下: (CSDN代码块不支持Verilog,代码复制到notepad编辑器中,语言选择Verilog,看得更清楚) t…

Linux命名管道的创建及应用

目录 一、命名管道的定义即功能 1.1创建命名管道 1.2匿名管道和命名管道的区别 1.3命名管道的打开规则 1.4系统调用unlink 二、进程间命名管道的创建及使用 2.1Comm.hhp 2.2PipeServer.cc 2.3PipeClient.cc 一、命名管道的定义即功能 管道应用的一个限制就是只能在具有…

【小迪安全2023】第61天:服务攻防-中间件安全CVE复现K8sDockeruettyWebsphere

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收…

美国站群服务器的CN2线路在国际互联网通信中的优势?

美国站群服务器的CN2线路在国际互联网通信中的优势? CN2线路,或称中国电信国际二类线路,是中国电信在全球范围内建设的高速骨干网络。这条线路通过海底光缆系统将中国与全球连接起来,为用户提供高速、低延迟的网络服务。CN2线路在国际互联网…

hadoop学习---基于Hive的数据仓库相关函数机制及其优化方案

Hive相关函数&#xff08;部分&#xff09;&#xff1a; if函数: 作用: 用于进行逻辑判断操作 语法: if(条件, true返回信息,false返回信息) 注意: if函数支持嵌套使用 select if(aa,’bbbb’,111) fromlxw_dual; bbbb select if(1<2,100,200) fromlxw_dual; 200nvl函数:…

每日OJ题_贪心算法三③_力扣45. 跳跃游戏 II(dp解法+贪心解法)

目录 力扣45. 跳跃游戏 II 解析代码1_动态规划 解析代码2_贪心 力扣45. 跳跃游戏 II 45. 跳跃游戏 II 难度 中等 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 num…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-14-主频和时钟配置

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

基于Django框架课堂投票系统的设计与实现

基于Django框架课堂投票系统的设计与实现 开发语言:Python 数据库&#xff1a;MySQL所用到的知识&#xff1a;Django框架工具&#xff1a;pycharm、Navicat、Maven 学生角色功能实现 注册登录界面 此处输入账号并设置登录密码&#xff0c;填写用户名、性别、生源地等相关信息…