学习日志014--用python实现顺序表

之前我们用c语言实现顺序表,今天就然我们用python来复习一遍

一、创建顺序表

python的类可以代替c中的结构体作为复合数据类型。

创建学生类,并用装饰器将方法属性化,便于之后的修改。属性装饰器,可以在保护私有属性,可以便捷调用方法

class Student:def __init__(self,sid,name,score):self.__id = sidself.__s_name = nameself.__score = score@propertydef s_name(self):return self.__s_name@s_name.setterdef s_name(self,name):self.__s_name = name@propertydef id(self):return self.__id@id.setterdef id(self, sid):self.__id = sid@propertydef score(self):return self.__score

创建顺序表类,并初始化

class SeqList:def __init__(self,capacity=10):self.size = 0self.capacity = capacityself.data = [None] * self.capacity

设置添加方法,将学生对象装入顺序表

# 插入元素def insert(self,value,sub):# 判断是否符合插入条件if self.is_full() or sub < 0 or sub > self.size:print("添加失败")return Falseelse:i = 0while i<self.size-sub:self.data[self.size-i] = self.data[self.size-i-1]i += 1self.data[sub] = valueself.size += 1

 删除指定元素

#删除元素def delete(self,sub):if self.is_empty() or sub < 0 or sub > self.size -1:print("删除失败")return Falseelse:i = subwhile i < self.size-1:self.data[i] = self.data[i+1]i += 1self.size -= 1# 遍历元素

根据学号查找

    # 按学号查找返回下标def find(self,s_id):if self.is_empty():print("查找失败")return -1else:i = 0while i<self.size:if self.data[i].id == s_id:return ii += 1else:print("查找失败")return -1

遍历顺序表

    # 遍历元素def show(self):i = 0while i<self.size:print(self.data[i])i += 1

去重

    # 去重def ded(self):# 判断是否为空if self.is_empty():print("去重失败")else:i = 0# 循环遍历每一个元素while i<self.size-1:j = i + 1# 将元素与顺序表中其他元素比较while j<self.size:if self.data[i].id == self.data[j].id:# 调用删除函数删除数值相同的元素self.delete(j)# 删除后比较元素下标回退continuej += 1i += 1return

运行模块

    s1 = Student(1001, "小米", 98)s2 = Student(1002, "小红", 98)s3 = Student(1003, "小华", 98)s4 = Student(1004, "小路", 98)s5 = Student(1005, "小王", 98)s6 = Student(1001, "小米", 98)S = SeqList()S.insert(s1, 0)S.insert(s2, 1)S.insert(s3, 1)S.insert(s4, 1)S.insert(s5, 1)S.insert(s6, 1)S.show()a = S.find(1002)S.delete(a)S.show()S.ded()S.show()

类模块全部代码

 

class Student:def __init__(self,sid,name,score):self.__id = sidself.__s_name = nameself.__score = scoredef __str__(self):return f"{self.s_name} {self.id} {self.score}"@propertydef s_name(self):return self.__s_name@s_name.setterdef s_name(self,name):self.__s_name = name@propertydef id(self):return self.__id@id.setterdef id(self, sid):self.__id = sid@propertydef score(self):return self.__score@score.setterdef score(self, score):self.__score = scoreclass SeqList:def __init__(self,capacity=30):self.size = 0 # 设置顺序表元素个数,并初始化归零self.capacity = capacity # 置顺序表容量,默认为30self.data = [None] * self.capacity # 设置空顺序表# 判断表满def is_full(self):return self.size == self.capacity# 判断表空def is_empty(self):return self.size == 0# 插入元素def insert(self,value,sub):# 判断是否符合插入条件if self.is_full() or sub < 0 or sub > self.size:print("添加失败")return Falseelse:i = 0while i<self.size-sub:self.data[self.size-i] = self.data[self.size-i-1]i += 1self.data[sub] = valueself.size += 1#删除元素def delete(self,sub):if self.is_empty() or sub < 0 or sub > self.size -1:print("删除失败")return Falseelse:i = subwhile i < self.size-1:self.data[i] = self.data[i+1]i += 1self.size -= 1# 遍历元素def show(self):i = 0while i<self.size:print(self.data[i],end="")i += 1print()# 按学号查找返回下标def find(self,s_id):if self.is_empty():print("查找失败")return -1else:i = 0while i<self.size:if self.data[i].id == s_id:return ii += 1else:print("查找失败")return -1# 去重def ded(self):# 判断是否为空if self.is_empty():print("去重失败")else:i = 0# 循环遍历每一个元素while i<self.size-1:j = i + 1# 将元素与顺序表中其他元素比较while j<self.size:if self.data[i].id == self.data[j].id:# 调用删除函数删除数值相同的元素self.delete(j)# 删除后比较元素下标回退continuej += 1i += 1returnif __name__ == '__main__':s1 = Student(1001, "小米", 98)s2 = Student(1002, "小红", 98)s3 = Student(1003, "小华", 98)s4 = Student(1004, "小路", 98)s5 = Student(1005, "小王", 98)s6 = Student(1001, "小米", 98)S = SeqList()S.insert(s1, 0)S.insert(s2, 1)S.insert(s3, 1)S.insert(s4, 1)S.insert(s5, 1)S.insert(s6, 1)S.show()a = S.find(1002)S.delete(a)S.show()S.ded()S.show()

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

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

相关文章

PTA编程题:N个数求和

问题描述 思路分析 问题分解 输入处理&#xff1a;将分数拆解为分子和分母&#xff0c;存储并处理。 分数相加规则&#xff1a; 即分子相加、分母相乘。 结果化简&#xff1a;求分数的最大公因数&#xff08;GCD&#xff09;&#xff0c;将其约分至最简形式。 带分数处理&…

Selenium + 数据驱动测试:从入门到实战!

引言 在软件测试中&#xff0c;测试数据的多样性和灵活性对测试覆盖率至关重要。而数据驱动测试&#xff08;Data-Driven Testing&#xff09;通过将测试逻辑与数据分离&#xff0c;极大地提高了测试用例的可维护性和可扩展性。本文将结合Selenium这一流行的测试工具&#xff0…

RK3568平台(中断篇)ARM中断流程

一.ARM 处理器程序运行的过程 ARM芯片属于精简指令集计算机 (RISC: Reduced Instruction Set Computing),它所用的指令比较简单,有如下特点: ① 对内存只有读、写指令 ② 对于数据的运算是在CPU内部实现 ③ 使用RISC指令的CPU复杂度小一点,易于设计 比如对于 a=a+b 这…

视频修复技术和实时在线处理

什么是视频修复&#xff1f; 视频修复技术的目标是填补视频中的缺失部分&#xff0c;使视频内容连贯合理。这项技术在对象移除、视频修复和视频补全等领域有着广泛的应用。传统方法通常需要处理整个视频&#xff0c;导致处理速度慢&#xff0c;难以满足实时处理的需求。 技术发…

推荐一款专业电脑护眼工具:CareUEyes Pro

CareUEyes Pro是一款非常好用的专业电脑护眼工具&#xff0c;软件小巧&#xff0c;界面简单&#xff0c;它可以自动过滤电脑屏幕的蓝光&#xff0c;让屏幕显示更加的不伤眼&#xff0c;更加舒适&#xff0c;有效保护你的眼睛&#xff0c;可以自定义调节屏幕的色调&#xff0c;从…

04 - 镜像存储机制

04 - 镜像存储机制 1. OverlayFS 存储原理 OverlayFS 结构分为三个层: LowerDir、Upperdir、MergedDir LowerDir &#xff08;只读层&#xff09; 只读的 image layer&#xff0c;其实就是 rootfs, 在使用 Dockfile 构建镜像的时候, Image Layer 可以分很多层&#xff0c;所以…

Element UI 组件库详解【Vue】

文章目录 一、引言二、安装并使用1. 安装2. 使用 三、常见组件说明1. 基础组件2. 布局组件3. 布局容器4. 选择框组件5. 输入框组件6. 下拉框组件7. 日期选择器8. 上传组件9. 表单组件10. 警告组件11. 提示组件12. 表格组件 一、引言 官方网站&#xff0c;element.eleme.cn El…

通过socket设置版本更新提示

1.项目使用的是git所以使用git仓库的短哈希作为版本更新标识&#xff0c;将该字符写入public文件&#xff0c;此处需要注意后端访问静态资源的路径。 在vue.config.js文件中写入 function excuteVersion() {const fs require(fs)const { execSync } require(child_process)…

相机触发模式

参考自&#xff1a;相机触发模式_硬触发和软触发的区别-CSDN博客 一、图像采集模式分类 相机的图像采集模式分为内触发模式与外触发模式。其中内触发模式包含连续采集、单帧采集两种形式&#xff1b;外触发模式包含软件外触发、硬件外触发。本文以海康相机的软件平台作介绍&a…

脚手架vue-cli,webpack模板

先安装node.js&#xff0c;它是服务器端&#xff0c;用于给页面提供服务。前端学习不需要会node.js&#xff0c;只需要学会node.js衍生出来的npm命令即可。 npm 是node.js的一个工具&#xff0c;作用是进行包管理&#xff0c;npm是node.js的包管理器。 接着安装脚手架&#xff…

Stable Diffusion核心网络结构——CLIP Text Encoder

&#x1f33a;系列文章推荐&#x1f33a; 扩散模型系列文章正在持续的更新&#xff0c;更新节奏如下&#xff0c;先更新SD模型讲解&#xff0c;再更新相关的微调方法文章&#xff0c;敬请期待&#xff01;&#xff01;&#xff01;&#xff08;本文及其之前的文章均已更新&…

ggplot2 分面图等添加注释文字,相加哪里加哪里: 自定义函数 AddText()

如果分面图上还想再添加文字&#xff0c;只能使用底层的grid包了。 函数定义 # Add text to ggplot2 figures # # param label text you want to put on figure # param x position x, left is 0, right 1 # param y position y, bottom is 0, up 1 # param color text color…

ubuntu中使用ffmpeg和nginx推流rtmp视频

最近在测试ffmpeg推流rtmp视频&#xff0c;单独安装ffmpeg是无法完成推流的&#xff0c;需要一个流媒体服务器&#xff0c;常用nginx&#xff0c;可以直接在ubuntu虚拟机里面测试一下。 测试过程不涉及编译ffmpeg和nginx&#xff0c;仅使用基本功能&#xff1a; 1 安装ffmpeg …

解决upload上传之后,再上传没有效果

解决upload上传之后&#xff0c;再上传没有效果 注释&#xff1a;这是第二次上传&#xff0c;两次网络请求都是第一次上传的&#xff0c;这次上传没有网络请求 原因&#xff1a;在我的代码里我限制了上传数量为1&#xff0c;然后上传成功后&#xff0c;上传列表没有清空&#…

NVR接入录像回放平台EasyCVR视频融合平台加油站监控应用场景与实际功能

在现代社会中&#xff0c;加油站作为重要的能源供应点&#xff0c;面临着安全监管与风险管理的双重挑战。为应对这些问题&#xff0c;安防监控平台EasyCVR推出了一套全面的加油站监控方案。该方案结合了智能分析网关V4的先进识别技术和EasyCVR视频监控平台的强大监控功能&#…

第 24 章 -Golang 性能优化

在Go语言中进行性能优化是一个多方面的过程&#xff0c;它涉及到代码编写、编译器优化、运行时系统调优以及对应用程序的深入理解。以下是针对Golang性能优化的一些关键点&#xff0c;包括性能分析工具、内存管理和并发优化等方面的内容&#xff0c;并附带一些简单的案例源代码…

reactflow 中 useStoreApi 模块作用

1. 状态管理与访问核心功能 它提供了一种方式来访问和操作内部存储&#xff08;store&#xff09;&#xff0c;这个存储包含了与 ReactFlow 应用相关的各种状态&#xff0c;如节点&#xff08;Nodes&#xff09;状态、边&#xff08;Edges&#xff09;状态、视口&#xff08;V…

基于web的音乐网站(Java+SpringBoot+Mysql)

目录 1系统概述 1.1 研究背景 1.2研究目的 1.3系统设计思想 2相关技术 2.1 MYSQL数据库 2.2 B/S结构 2.3 Spring Boot框架简介 3系统分析 3.1可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2系统性能分析 3.2.1 系统安全性 3.2.2 数据完整性 …

中间件--laravel进阶篇

laravel版本11.31,这中间件只有3种,分别是全局中间件,路由中间件,控制器中间件。相比thinkphp8,少了一个应用中间件。 一、创建中间件 laravel创建中间件可以使用命令的方式创建,非常方便。比如php artisan make:middleware EnsureTokenIsValid。EnsureTokenIsValid是中间…

vue使用List.forEach遍历集合元素

需要遍历集合对其每个元素进行操作时&#xff0c;可以使用forEach方法 1.语法&#xff1a;集合.forEach ( 定义每一项 > 定义每一项都要进行的逻辑 ) 2、使用场景&#xff1a; //例如需要给每个员工的工资数量加1000this.personList.forEach(item>item.salary100…