单链表基本操作(2)

一、 取值——取单链表中第i个元素的内容

算法步骤:

  1. 从第1个结点(L->next)顺链扫描,用指针p指向当前扫描到的结点,p初值p=L->next。
  2. j做计数器,累计当前扫描过的结点数,j初值为1。
  3. 当p指向扫描到的下一结点时,计数器j加1。
  4. 当j==i,p所指的结点就是要找的第i个结点。
Status GetElem_L(LinkList L,int i,ElemType &e){p=L->next;j=1;while(p&&j<i){  //向后扫描,直到p指向第i个元素或p为空p=p->next;++j;}if(!p||j>i)    //第i个元素不存在return ERROR;e=p->data;    //取第i个元素return OK;
}
二、 按值查找——根据指定数据获取该数据所在的位置(地址)

算法步骤:

  1. 从第一个结点起,依次和e相比较。
  2. 如果找到一个其值与e相等的数据元素,则返回其在链表中的“位置”或地址。
  3. 如果查遍整个链表都没有找到其值和e相等的元素,则返回0或者“NULL”。
Lnode *LocateElem_L(LinkList L,Elemtype e){//在线性表中查找值为e的数据元素p=L->next;while(p&&p->data!=e)p=p->next;return p;
}
根据指定数据获取该数据位置序号
int LocateElem_L(LinkList L,Elemtype e){
//返回L中值为e的数据元素的位置序号,查找失败返回0p=L->next;j=1;while(p && p->data!=e){p=p->next;j++;}if(p)return j;elsereturn 0;
}
三、 插入——在第i个结点前插入值为e的新结点

算法步骤:

  1. 首先找到ai-1的存储位置p。
  2. 生成一个数据域为e的新结点s。
  3. 插入新结点:新结点的指针域指向结点ai                                                                                                        结点ai-1的指针域指向新结点
Status ListLinsert_L(LinkList &L,int i,ElemType e){p=L;j=0;while(p&&j<i-1){   //寻找第i-1个结点,p指向i-1结点p=p->next;++j;}if(!p||j>i-1)   return ERROR;  //i大于表长加1或者小于1,插入位置非法s=new LNode;   s->data=e;   //生成新结点ss->next=p->next;p->next=s;return OK;
}
四、 删除——删除第i个结点

算法步骤:

  1. 首先找到ai-1的存储位置p,保存要删除的ai的值。
  2. 令p->next 指向ai+1。
  3. 释放结点ai的空间。
Status ListDelete_L(LinkList &L,int i,ElemType &e){p=L;j=0;while(p->next&&j<i-1){p=p->next;++j;      //寻找第i个结点,使p指向前趋}if(!(p->next)||j>i-1)return ERROR;q=p->next;    //临时保存被删结点的地址以备释放p->next=q->next; //改变删除结点前趋结点的指针域e=q->data;    //保存删除结点的数据域delete q;    //释放删除结点的空间return OK;
}
五、 建立单链表:头插法——元素插入在链表头部,也叫前插法

算法步骤:

  1. 从一个空表开始,重复读入数据。
  2. 生成新结点,将读入数据存放到新结点的数据域中。
  3. 从最后一个结点开始,依次将各结点插入到链表的前端。
void CreateList_H(LinkList &L,int n){L=new LNode;L->next=NULL;  //建立一个带头结点的单链表for(i=n;i>0;--i){p=new LNode;  //开辟新结点cin>>p->data;  //输入元素值scanf(&p->data)p->next=L->next;  //插到表头L->next=p;}
}
 建立单链表:尾插法——元素插入在链表尾部,也叫做后插法

算法步骤:

  1. 从一个空表L开始,将新结点逐个插入到链表的尾部,尾指针r指向链表的尾结点。
  2. 初始时,r同L均指向头结点。每读入一个数据元素则申请一个新结点,将新结点插入到尾节点后,r指向新结点。
void CreateList_R(LinkList &L,int n){L=new LNode;L->next=NULL;r=L;  //尾指针r指向头结点for(i=0;i<n;++i){p=new LNode;cin>>p->data;  //生成新结点,输入元素值p->next=NULL;r->next=p;   //插入到表尾r=p;       //r指向新的尾结点}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(Django)初步使用

前言 Django 是一个功能强大、架构良好、安全可靠的 Python Web 框架&#xff0c;适用于各种规模的项目开发。它的高效开发、数据库支持、安全性、良好的架构设计以及活跃的社区和丰富的文档&#xff0c;使得它成为众多开发者的首选框架。 目录 安装 应用场景 良好的架构设计…

Leetcode—763. 划分字母区间【中等】

2024每日刷题&#xff08;175&#xff09; Leetcode—763. 划分字母区间 C实现代码 class Solution { public:vector<int> partitionLabels(string s) {int rightmost[26];int l 0;int r 0;for(int i 0; i < s.length(); i) {rightmost[s[i] - a] i;}vector<…

[C语言]第十一节 函数递归一基础知识到高级技巧的全景探索

目录 11.1. 递归是什么&#xff1f; 11.1.1 递归的思想&#xff1a; 11.2 递归的限制条件 举例1&#xff1a;求n的阶乘 画图推演 举例2&#xff1a;顺序打印⼀个整数的每⼀位 画图推演 11.3. 递归与迭代 举例3&#xff1a;求第n个斐波那契数 11.1. 递归是什么&#xff…

一款基于 Java 的可视化 HTTP API 接口快速开发框架,干掉 CRUD,效率爆炸(带私活源码)

平常我们经常需要编写 API&#xff0c;但其实常常只是一些简单的增删改查&#xff0c;写这些代码非常枯燥无趣。 今天给大家带来的是一款基于 Java 的可视化 HTTP API 接口快速开发框架&#xff0c;通过 UI 界面编写接口&#xff0c;无需定义 Controller、Service、Dao 等 Jav…

【Java数据结构】栈 (Stack)

【本节目标】 1. 栈的概念及使用 2. 相关 OJ 题 一、概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last…

【历年CSP-S复赛第一题】暴力解法与正解合集(2019-2022)

P5657 [CSP-S2019] 格雷码P7076 [CSP-S2020] 动物园P7913 [CSP-S 2021] 廊桥分配P8817 [CSP-S 2022] 假期计划 P5657 [CSP-S2019] 格雷码 暴力50分 #include<bits/stdc.h> #define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define int long long #d…

【Android 源码分析】Activity生命周期之onStop-1

忽然有一天&#xff0c;我想要做一件事&#xff1a;去代码中去验证那些曾经被“灌输”的理论。                                                                                  – 服装…

【2024】前端学习笔记11-网页布局-弹性布局flex

学习笔记 网页布局弹性布局&#xff1a;flex案例&#xff1a;flex布局案例 网页布局 在页面布局中&#xff0c;display属性用于设置一个元素的显示方式。它可以指定元素是作为块级元素、内联元素还是充当表格元素显示。 display的常见属性值&#xff1a; block&#xff1a;将…

解决方案:机器学习中,出现欠拟合和过拟合,这两种情况分别如何解决

文章目录 一、现象二、解决方案欠拟合&#xff08;Underfitting&#xff09;过拟合&#xff08;Overfitting&#xff09; 一、现象 在工作中&#xff0c;在机器学习中&#xff0c;出现欠拟合和过拟合的时候&#xff0c;需要有对应的解决方法&#xff0c;所以整理一下 二、解决…

k8s 中微服务之 MetailLB 搭配 ingress-nginx 实现七层负载

目录 1 MetailLB 搭建 1.1 MetalLB 的作用和原理 1.2 MetalLB功能 1.3 部署 MetalLB 1.3.1 创建deployment控制器和创建一个服务 1.3.2 下载MealLB清单文件 1.3.3 使用 docker 对镜像进行拉取 1.3.4 将镜像上传至私人仓库 1.3.5 将官方仓库地址修改为本地私人地址 1.3.6 运行清…

驱动中的device和device_driver结构体

device和device driver是Linux驱动开发的基本概念。Linux kernel的思路很简单&#xff1a;驱动开发&#xff0c;就是要开发指定的软件&#xff08;driver&#xff09;以驱动指定的设备&#xff0c;所以kernel就为设备和驱动它的driver定义了两个数据结构&#xff0c;分别是devi…

ensp回顾--聚合链路技术简介与详细案例(构建基于交换机到交换机的聚合链路)

文章目录 什么是聚合链路&#xff1f;聚合链路的工作原理聚合链路的优势使用场景 案例ensp版本图例pc的ip地址具体步骤连通性测试 在现代网络中&#xff0c;聚合链路&#xff08;Link Aggregation&#xff09;是一种常见的技术&#xff0c;用于提高网络连接的带宽和可靠性。本文…

RNN经典案例——构建人名分类器

RNN经典案例——人名分类器 一、数据处理1.1 去掉语言中的重音标记1.2 读取数据1.3 构建人名类别与人名对应关系字典1.4 将人名转换为对应的onehot张量 二、构建RNN模型2.1 构建传统RNN模型2.2 构建LSTM模型2.3 构建GRU模型 三、构建训练函数并进行训练3.1 从输出结果中获得指定…

【可答疑】基于51单片机的智能台灯(含仿真、代码、报告、演示视频等)

✨哈喽大家好&#xff0c;这里是每天一杯冰美式oh&#xff0c;985电子本硕&#xff0c;大厂嵌入式在职0.3年&#xff0c;业余时间做做单片机小项目&#xff0c;有需要也可以提供就业指导&#xff08;免费&#xff09;~ &#x1f431;‍&#x1f409;这是51单片机毕业设计100篇…

2025秋招LLM大模型多模态面试题(九)-- LoRA 面试问题大全:从理论到实践

随着深度学习模型的不断发展,微调大模型的需求也逐渐增多。然而,传统的全参数微调需要消耗大量的计算资源和显存,对于普通用户和中小企业来说负担较大。为了应对这些问题,LoRA(Low-Rank Adaptation)应运而生。LoRA 是一种高效微调技术,通过低秩分解的方式显著减少训练参…

单目三d重建学习笔记2024

从单目视频生成动态多物体场景 已经开源&#xff1a; https://github.com/dreamscene4d/dreamscene4d 2021年&#xff1a; 浙大团队研发NeuralRecon&#xff0c;首个基于学习的实时单目三维重建系统 https://github.com/zju3dv/NeuralRecon https://github.com/zju3dv/Neura…

数据分析-28-交互式数据分析EDA工具和低代码数据科学工具

文章目录 1 数据分析的七步指南1.1 第一步:问题定义和数据采集1.2 第二步:数据清洗和预处理1.3 第三步:数据探索和分析1.4 第四步:模型建立和分析1.5 第五步:数据可视化1.6 第六步:结果解释和报告1.7 第七步:部署和维护1.8 基础的数据分析库1.9 低代码数据科学工具2 EDA…

Flutter InAppWebView 路由导航处理

flutter InAppWebView路由导航处理&#xff0c;有以下两种处理方案&#xff1a; H5层控制路由&#xff0c;H5拥有自己的路由&#xff0c;当返回到跟路由root时&#xff0c;此时点击跟节点&#xff0c;通过jsbridge调用flutter提供的方法来关闭当前widget&#xff0c;flutter关…

改变数组页面重新渲染的操作/那些操作不会重新渲染页面以及解决方法

在前端开发中&#xff0c;当数组数据发生变化时&#xff0c;是否会导致页面重新渲染&#xff0c;以及如何进行相关操作&#xff0c;这取决于使用的具体框架或库&#xff08;如React、Vue等&#xff09;及其内部机制。以下是对这一问题的详细解答&#xff1a; 一、会导致页面重…

STM32 通用定时器

一、概述 STM32内部集成了多个定时/计数器&#xff0c;根据型号不同&#xff0c;STM32系列芯片最多包含8个定时/计数器。其中&#xff0c;TIM6、TIM7为基本定时器&#xff0c;TIM2~TIM5为通用定时器&#xff0c;TIM1、TIM8为高级控制定时器。 1.定时器的类型 基本定时器通用定…