当前位置: 首页 > news >正文

数据结构与算法-(11)---有序表(OrderedList)

🌈个人主页: Aileen_0v0
🔥系列专栏:PYTHON学习系列专栏
💫"没有罗马,那就自己创造罗马~" 

目录

知识回顾及总结 

有序表的引入

​编辑 实现有序表

1.有序表-类的构造方法

2.有序表-search方法的实现 

3.有序表-add方法的实现

有序链表 - 完整实现过程

链表分析


知识回顾及总结 

上一次我们学习了无序表之链表和列表,知道了链表的特点是顺藤摸瓜结构

通俗的讲就是链表相当于火车(如果元素放在链表后面,找那个车厢需要从头开始往后找)

有序表的引入

今天,我们来学习有序表- OrderedList-需要增加属性进行位置参照-所以需要对表头进行处理

有序表是一种数据项依照其某可比性质如整数大小、字母表先后)来决定在列表中的位置
数值越小位置越前,数值越大位置越后.

 

 实现有序表

1.有序表-类的构造方法

class Orderedlist:def __init__(self):self.head = None

2.有序表-search方法的实现 

 之前,我们无序表搜索,需要遍历节点,直到找到目标节点,或者没有节点可以继续访问.

但是,对于有序表,如果目标元素不在列表中,可以利用元素有序的特点终止寻找.

只要节点中的值比正在查找的值更大,搜索会立刻结束并返回False,因为查找的元素不可能存在于链表后续的节点中.

    def search(self,item):current = self.headfound = Falsestop = Falsewhile current != None and not found and not stop:if current.get_data() == item:found = Trueelse:if current.get_data()  > item:stop = Trueelse:current = current.get_next()return found

3.有序表-add方法的实现

相对于无序列表来说,有序列表,需要修改最多的是add方法.

对于无序表:add方法将一个节点放在最容易访问的位置,即列表头部.

对于有序列表:需要在需要在已有链表中,为新节点找到正确的插入位置.

当访问完所有节点(current是None) 或者 当前值大于要添加的元素时,就找到了插入位置,如上图中,找到54即可停止查找.

有序表和无序表一样,由于current本身无法提供对待修改节点进行访问,

因此我们需要额外引用previous

    def add(self,item):#初始化两个外部引用(作用相当于指针)current = self.head#指针1previous = None#p2stop = False#判断循环是否继续执行,---循环停止,就是找到了新节点的插入位置while current != None and not stop:#发现插入位置if current.get_data() > item:stop = Trueelse:previous = currentcurrent = current.get_next()temp = Node(item)#插在表头if previous == None:temp.set_next(self.head)self.head = temp#插在表中else:temp.set_next(current)previous.set_next(temp)

有序链表 - 完整实现过程

其它实现过程类似于无序表,可以自己尝试练习一下~

这里是我的实现过程,仅供大家学习参考.

class Node:#结点Node相当于车厢def __init__(self,init_data):self.data = init_dataself.next = None#获得数据项def get_data(self):return self.data#获得节点def get_next(self):return self.next#设置数据项def set_data(self,new_data):self.data = new_data#属性#设置节点def set_next(self,new_next):self.next = new_next#属性class Orderedlist:def __init__(self):self.head = Nonedef search(self,item):current = self.headfound = Falsestop = Falsewhile current != None and not found and not stop:if current.get_data() == item:found = Trueelse:if current.get_data()  > item:stop = Trueelse:current = current.get_next()return founddef add(self,item):current = self.head#指针1previous = None#p2stop = Falsewhile current != None and not stop:#发现插入位置if current.get_data() > item:stop = Trueelse:previous = currentcurrent = current.get_next()temp = Node(item)#插在表头if previous == None:temp.set_next(self.head)self.head = temp#插在表中else:temp.set_next(current)previous.set_next(temp)def size(self):current = self.headcount = 0while current != None:count += 1current = current.get_next()return countdef remove(self, item):current = self.headprevious = Nonefound = Falsewhile not found and current != None:if current.get_data() == item:found = Trueelse:previous = currentcurrent = current.get_next()if found:if previous == None:self.head = current.get_next()else:previous.set_next(current.get_next())def traverse(self):current = self.headwhile current != None:print(current.get_data())current = current.get_next()ol = Orderedlist()
ol.add(7)
ol.add(9)
ol.add(6)
ol.add(8)
ol.add(10)
print(ol.search(6))
ol.traverse()

链表分析

相关文章:

数据结构与算法-(11)---有序表(OrderedList)

🌈个人主页: Aileen_0v0 🔥系列专栏:PYTHON学习系列专栏 💫"没有罗马,那就自己创造罗马~" 目录 知识回顾及总结 有序表的引入 ​编辑 实现有序表 1.有序表-类的构造方法 2.有序表-search方法的实现 3.有序表-add方法的实现…...

佳易王会员管理系统软件如何下载,基本功能有哪些

一、佳易王会员管理软件大众版 部分功能简介: 1、会员信息登记 :可以直接使用手机号登记,也可以使用实体卡片,推荐用手机号即可。 2、会员卡类型 :可以自由设置卡的类型,比如:充值卡、计次卡、…...

docker搭建mysql环境

1. 基础环境 名称描述CentOS 7.6Linux操作系统版本docker 20.10.5docker版本mysql 8.0.29mysql镜像版本 2. 下载安装 使用docker命令下载mysql镜像 [rootzhouwei ~]# docker pull mysql:8.0.29查看docker仓库是否已经下载了mysql镜像 [rootzhouwei ~]# docker images将mys…...

优思学院|推行精益六西格玛困难重重?7大原因分析助你避坑

六西格玛,是一种让企业在绩效管理的舞台上跳得更高更远的方法。它不仅仅是一套原则和技术,更是一种对完美的执着追求。 在这个舞台上,企业的流程管理得以严格、集中,质量得以高效提升。优思学院总结出六西格玛的核心是&#xff1…...

四川思维跳动商务信息咨询有限公司可信吗?

在今天的数字化时代,抖音带货已成为一种全新的商业模式。许多公司都在通过这种形式进行产品推广和销售,其中,四川思维跳动商务信息咨询有限公司以其专业的服务和良好的信誉,在抖音带货领域赢得了广泛赞誉。 四川思维跳动商务信息…...

高防CDN与高防服务器:谁更胜一筹?

在当今数字化世界中,网络安全对于保护网站和应用程序至关重要。在这一背景下,高防CDN和高防服务器是两种流行的解决方案,用于应对不同类型的网络攻击。本文将分析高防CDN是否能够替代高防服务器,以及它们各自的优势和限制。 高防C…...

2.Netty简单应用

引入Maven依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId><version>4.1.49.Final</version> </dependency>服务端的管道处理器 public class NettyServerHandler extends ChannelInbou…...

80个10倍提升Excel技能的ChatGPT提示

你是否厌倦了在使用Excel时感觉像个新手&#xff1f;你是否想将你的技能提升到更高的水平&#xff0c;成为真正的Excel大师&#xff1f;嗯&#xff0c;如果你正在使用ChatGPT&#xff0c;那么成为Excel专家简直易如反掌。 你只需要了解一些最有用的Excel提示&#xff0c;就能在…...

jenkins结合k8s部署动态slave

1、完成k8s连接 在完成jenkins的部署后现安装kubernets的插件 如果jenkins 是部署在k8s集群中只需要填写一下 如果是非本集群的部署则需要填写证书等 cat ./config echo ‘certificate-authority-data-value’ | base64 -d > ./ca.crt echo ‘client-certificate-data’ |…...

搜索引擎Elasticsearch基础与实践

倒排索引 将文档中的内容分词&#xff0c;然后形成词条。记录每条词条与数据的唯一表示如id的对应关系&#xff0c;形成的产物就是倒排索引&#xff0c;如下图&#xff1a; ElasticSearch数据的存储和搜索原理 这里的索引库相当于mysql中的database。一个文档&#xff08;do…...

vue项目electron打包

1.设置国内镜像 npm config edit 命令行输入后会弹出npm的配置文档&#xff0c;需要文档末尾加入 electron_mirrorhttps://npm.taobao.org/mirrors/electron/ electron-builder-binaries_mirrorhttps://npm.taobao.org/mirrors/electron-builder-binaries/ 2.全局安装electron …...

英伟达发布RAPIDS cuDF框架 pandas在GPU上运行速度快了150倍

11月9日 消息&#xff1a;Nvidia 发布了一款名为 RAPIDS cuDF 的新版本&#xff0c;据称可以将 pandas 运行在 GPU 上&#xff0c;并且性能提升了150倍。pandas 是一款流行的基于 Python 的数据框架库&#xff0c;用于数据处理和分析。它的开源版本由 Wes McKinney 开发和发布&…...

(a)Mask RCNN总体流程

&#xff08;a&#xff09;Mask RCNN总体流程 一.Mask RCNN 架构 自己整理了一份Mask RCNN架构图如下&#xff0c;其中绿色模块只有推理过程才会涉及。 核心模块包括&#xff1a;数据预处理&#xff0c;骨干网络&#xff0c;区域提议网络&#xff0c;FastRCNN分支&#xff0c…...

浅谈数据中心机房末端配电技术与产品监控选型-安科瑞黄安南

摘要 数据中心机房末端配电的可靠性、稳定性和可维护性直接关系到IT设备的安全供电。数据中心的末端配电技术主要有两种&#xff0c;一种采用列头柜加电缆配电&#xff0c;另一种是智能小母线配电。分别对两种配电技术进行了介绍和探讨&#xff0c;最后对两种配电方式进行了对…...

红包算法 java实现

红包算法 首先&#xff0c;如果红包只有一个&#xff0c;本轮直接使用全部金额&#xff0c;确保红包发完。 然后&#xff0c; 计算出本次红包最少要领取多少&#xff0c;才能保证红包领完&#xff0c;即本轮下水位&#xff1b; 本轮最多领取多少&#xff0c;才能保证每个人都…...

MVCC中的可见性算法

在之前的文章 MVCC详解-CSDN博客中我们已经介绍过了MVCC的原理&#xff08;read viewundo log&#xff09;&#xff0c;今天来详细的说一下readview的匹配规则&#xff08;可见性算法&#xff09; 隔离级别在RC&#xff0c;RR的前提下 Read View是如何保证可见性判断的呢&#…...

Leetcode73矩阵置零

1110-3 代码&#xff1a; 和题解思路差不多 class Solution {public void setZeroes(int[][] matrix) {Set<Integer> setr new HashSet<>();Set<Integer> setc new HashSet<>();for(int i0;i<matrix.length;i){for(int j0;j<matrix[0].leng…...

linux重要的目录之proc和dev目录

/proc/目录 虚拟文件系统&#xff0c;将内核与进程状态归档为文本文件&#xff08;系统信息都存放这目录下&#xff09; Linux系统上的/proc目录是一种文件系统&#xff0c;即proc文件系统。与其它常见的文件系统不同的是&#xff0c;/proc是一种伪文件系统&#xff08;也即虚拟…...

【组件自定义事件+全局事件总线+消息订阅与发布+TodoList案例——编辑+过度与动画】

组件自定义事件全局事件总线消息订阅与发布TodoList案例——编辑过度与动画 1 组件自定义事件1.1 绑定1.2 解绑1.3 总结1.4 TodoList案例——自定义事件 2 全局事件总线2.1 理解2.2 步骤2.3 TodoList案例——事件总线 3 消息订阅与发布3.1 理解3.2 TodoList案例——消息的订阅与…...

单独封装export default .js 在引入

...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接&#xff1a;3403. 从盒子中找出字典序最大的字符串 I 代码如下&#xff1a; class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

jdbc查询mysql数据库时,出现id顺序错误的情况

我在repository中的查询语句如下所示&#xff0c;即传入一个List<intager>的数据&#xff0c;返回这些id的问题列表。但是由于数据库查询时ID列表的顺序与预期不一致&#xff0c;会导致返回的id是从小到大排列的&#xff0c;但我不希望这样。 Query("SELECT NEW com…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中&#xff0c;向量运算构成了理解几何结构的基石。叉乘&#xff08;外积&#xff09;与点积&#xff08;内积&#xff09;作为向量代数的两大支柱&#xff0c;表面上呈现出截然不同的几何意义与代数形式&#xff0c;却在深层次上揭示了向量间相互作用的…...