Python数据结构实验 串和数组的实现

一、实验目的

1.熟悉串和数组类型的实现方法,了解简单文字处理的设计方法;

2.熟悉Python语言的字符和把字符串处理的原理和方法;

3.了解矩阵的存储结构,运用Python语言进行矩阵简单运算处理。

二、实验环境

1.Windows操作系统的计算机

2.Python3.7环境平台和PyCharm编辑器

三、实验说明 

1.实现串和数组类型的存储结构和基本运算操作。

2.实验中如无特别说明,均要求使用脚本(.py)方式编写代码。

3.自主编写程序,必要时参考相关资料。

4.实验学时:2学时

四、实验内容和步骤

1.实验内容(两题必做,一题选做)

(1) 串实验题(必做)

① 编写程序,实现BF算法和KMP算法,并做正确性测试。

② 求解模式串t=”ababaaa”的next函数值。

参考框架:


from SqString import SqStringMaxSize=100def BF(s,t):                                                 #BF算法……def GetNext(t,next):                            #由模式串t求出next值……def KMP(s,t):                                              #KMP算法……#主程序        if __name__ == '__main__':……

(2)数组的应用(必做)

多维数组在数学和工程等领域有着非常广泛的应用,特别是在图像处理领域,被处理的数字图像即是一个二维数组。以下是一个非常简单的图像处理程序,请完成以下内容:①为每行代码进行注释;②说明这段程序实现的功能;③运行程序,对结果进行验证。

from PIL import Imageimport numpy as npimport matplotlib.pyplot as pltimage_array1 = np.array(Image.open("python.jpg").convert('L'))image_array2 = 255 - image_array1plt.subplot(121)plt.gray()plt.imshow(image_array1)plt.subplot(122)plt.gray()plt.imshow(image_array2)plt.show()

(3) 数组实验题(选做)

求马鞍点问题。如果矩阵a中存在一个元素a[i][j]满足这样的条件:a[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。设计一个程序,计算出m×n的矩阵a的所有马鞍点。

算法思路:

对于二维数组a[m][n],先求出每行的最小值元素,放入min数组中。再求出每列的最大值元素放入max数组中。若min[i]=max[j],则该元素a[i][j]便是马鞍点,找出所有这样的元素并输出。

参考框架:

def MinMax(a):m=len(a)                             #行数n=len(a[0])                          #列数min=[0]*mmax=[0]*nfor i in range(m):             #计算每行最小元素,放入min[i]中……for j in range(n):             #计算每列最大元素,放入max[j]中……res=[]                                  #存放马鞍点for i in range(m):             #判定是否为马鞍点for j in range(n):if min[i]==max[j]: #找到一个马鞍点_      return resdef disp(a):             #输出二维数组……#主程序a=                       _      print("\n a:"); disp(a)print(" 所有马鞍点: ")ans=MinMax(a)for i in range(len(ans)):_      

2.实验步骤

(1)分析实验内容,写出程序大致框架或完整的程序代码。

(2)进入Python集成环境。

(3)编辑程序并进行保存。

(4)运行程序,若有错误,修改错误后再次运行,如此反复进行到不显示出错为止。

(5)检查程序输出结果。

五、实验代码与结果(程序运行代码及其结果)

1. (1)给出算法的基本设计思想。

  (2)根据设计思想,采用Python语言描述算法,关键之处给出注释。

from SqString import SqString    # 导入 SqString 类#BF算法def BF(s,t):i = 0j = 0while i < len(s) and j < len(t):if s[i] == t[j]:i = i + 1j = j + 1else:i = i - j + 1j = 0if j == len(t):return i - jelse:return -1#由模式串t求出next值def GetNext(t,next):j = 0k = -1next[0] = -1while j < len(t) - 1:if k == -1 or t[j] == t[k]:j = j + 1k = k + 1next[j] = kelse:k = next[k]#KMP算法def KMP(s,t):next = [-1]*len(t)GetNext(t,next)i = 0j = 0while i < len(s) and j < len(t):if j == -1 or s[i] == t[j]:i = i + 1j = j + 1else:j = next[j]if j == len(t):return i - jelse:return -1if __name__ == '__main__':# 对于以下字符串进行测试s = SqString()s.StrAssign('BBCABCDABABCDABCDABDE')t = SqString()t .StrAssign('ABCDABD')# BF 算法测试print("== BF 算法 ==")pos = BF(s.get(),t.get())if pos == -1:print("模式串未在主串中找到!")else:print("模式串在主串中的位置为:%d" % (pos+1,))# KMP 算法测试print("\n== KMP 算法 ==")pos = KMP(s.get(),t.get())if pos == -1:print("模式串未在主串中找到!")else:print("模式串在主串中的位置为:%d" % (pos+1,))# 求解 next 值print("\n== 求解 next 值 ==")next = [-1]*len(t.get())GetNext(t.get(),next)print("模式串 ABCDABD的next数组值为:", next)


2. 安照题目要求完成。

from PIL import Image#使用PIL库中的Image模块与numpy库import numpy as npimport matplotlib.pyplot as pltimage_array1 = np.array(Image.open("python.jpg").convert('L'))#导入图片并将其转为灰度图image_array2 = 255 - image_array1#每个像素点的颜色值在0-255之间。将image_array1反向取值,生成一个反向的灰度图。plt.subplot(121)plt.gray()# 设置为灰度图plt.imshow(image_array1)# 设置为灰度图plt.subplot(122)plt.gray()# 设置为灰度图plt.imshow(image_array2) # 画出反向图plt.show()

3. (1)给出算法的基本设计思想。

  (2)根据设计思想,采用Python语言描述算法,关键之处给出注释。

def MinMax(a):m = len(a)  # 行数n = len(a[0])  # 列数row_mins = [min(row) for row in a]  # 计算每行最小元素,放入row_mins列表中col_maxes = [max(col) for col in zip(*a)]  # 计算每列最大元素,放入col_maxes列表中res = []  # 存放马鞍点for i in range(m):   # 判定是否为马鞍点for j in range(n):if a[i][j]==row_mins[i] and a[i][j] == col_maxes[j]:  # 找到一个马鞍点res.append((i,j))return resdef disp(a):  # 输出二维数组for row in a:print(' '.join([str(elem) for elem in row]))# 主程序a = [[4,5,6],[3,2,1],[7,8,9]]print("\n a:"); disp(a)print(" 所有马鞍点: ")ans = MinMax(a)for p in ans:print(f" ({p[0]}, {p[1]})")

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

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

相关文章

UE像素流公网(Windows、Liunx)部署无需GPU服务器

前言 之前有个前端地图服务项目要改成UE来渲染3D,有需要在云服务器上多实例运行,所以就先研究了Windows版本的像素流云渲染,后来客户的云服务器是Linux版CectOS系统,加上又有了一些后端服务在上面运行了不能重装成Windows,所以就又着手去研究了Linux系统的云渲染。 推流…

【笔记】以论文发表形式通俗理解 TCP/IP模型

【笔记】以论文发表形式通俗理解 TCP/IP模型 前言TCP/IP模型理论通俗理解 前言 在网络基础学习过程中&#xff0c;以前只对TCP/IP理解个字面&#xff0c;网上查一下能知道个字面意思&#xff0c;但是连起来到底是什么意思&#xff0c;还是一知半解的&#xff0c;停留在表面&am…

数据结构基础(三)链表

链表&#xff08;Linked List&#xff09;是一种常见的线性数据结构&#xff0c;由一系列称为节点&#xff08;Node&#xff09;的元素组成&#xff0c;每个节点包含两部分&#xff1a;数据&#xff08;Data&#xff09;和指向下一个节点的引用&#xff08;Pointer 或者 Link&a…

放弃 Rust 选择 Zig,Xata 团队推出 pgzx —— 计划使用 Zig 开发基于 PG 的分布式数据库

Summary Xata 公司在基于 PostgresSQL 开发自己的分布式数据库&#xff0c;出于 Zig 和 C 语言以及 PostgreSQL 的 API 有更好的互操作性的考虑&#xff0c;他们选择了 Zig 而非当红炸子鸡语言 Rust。他们的博客文章中对 pgzx 进行了介绍。让我们来看下他们对 Zig 和 Rust 语言…

【开发环境搭建篇】Git的安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

利用Python和IP技术实现智能旅游情报系统

文章目录 引言一、系统架构设计1. 数据采集模块2. 数据处理模块3. 用户界面模块 二、数据获取技术应用三、系统功能展示四、亮数据采集工具介绍五、总结六、号外 引言 随着旅游行业的不断发展&#xff0c;人们对旅游信息的需求也越来越大。为了帮助旅行者更好地规划行程&#…

基于javaweb(springboot+mybatis)宠物医院预约管理系统设计和实现以及论文报告

基于javaweb(springbootmybatis)宠物医院预约管理系统设计和实现以及论文报告 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎…

【超全详解一文搞懂】Scala基础

目录 Scala 01 —— Scala基础一、搭建Scala开发环境安装Scala编译器在IDEA中进行scala编码 二、Scala简介与概述Scala简介Scala概述Scala代码规范 三、理解Scala变量与数据类型Scala的变量与常量Scala和Java变量的区别 Scala的数据类型 四、Scala的程序逻辑1.表达式2.运算符3.…

紫鸾5.0:紫光云新一代敏捷应用开发平台全家桶

曾几何时&#xff0c;“瀑布式”占据了二十世纪软件开发的主流&#xff0c;开发时间往往以年计&#xff0c;一款软件应用动辄几年才能交付。而随着社会生产力的跃升&#xff0c;“瀑布式”已严重跟不上时代的节奏&#xff0c;2001年&#xff0c;“敏捷宣言”的发布&#xff0c;…

AtCoder Regular Contest 143 C - Piles of Pebbles 博弈 , 每个人要拿的是固定的!不够也算不能拿

C - Piles of Pebbles 题意&#xff1a; n堆鹅卵石&#xff0c;第一个人可以拿任意堆x个&#xff0c;第二个人可以拿任意堆y个&#xff0c;第一个人先拿&#xff0c;谁不能拿谁败。 思路&#xff1a; 这个题我一直没读清楚&#xff0c;如文章标题&#xff0c;拿的是固定数目…

MySQL查询约束

1 DML DML 数据操作语句 插入 insert 更新 update 删除 delete 1.1 更新 语法 update 表名 set 字段 值 [, 字段2 值2, ... ] [where 字段 值]; -- [, 字段2 值2, ... ] 是指,可选的,可以同时修改多个列的值 -- [where 字段 值] 是指,可选的,加上是指过滤,只更新符合条…

【C#】C#窗体应用修改窗体的标题和图标

修改窗体顶部的标题和图表&#xff0c;如果不修改则会使用默认的图标&#xff0c;标题默认为Form1&#xff0c;如第一张图&#xff0c;这时候如果想换成和系统有关的内容&#xff0c;如第二张图&#xff0c;可以使用下面的方法进行修改&#xff0c;修改后打开该软件任务栏显示的…

前台处理:CO主数据之成本中心标准层次更改-<OKEON>

一、背景&#xff1a; 前面讲解了成本要素和成本要素组&#xff0c;我们继续介绍成本控制与核算的主数据之成本中心&#xff0c;成本控制分主数据篇和业务篇&#xff1a; 主数据篇主要内容&#xff1a;成本要素、成本中心、订单、作业类型、工作中心&#xff1b; 业务篇主要…

ServletConfig和ServletContext

ServletConfig接口 在Servlet运行期间&#xff0c;需要一些配置信息&#xff0c;这些信息都可以在WebServlet注解的属性中配置。当Tomcat初始化一个Servlet时&#xff0c;会将该Servlet的配置信息封装到一个ServletConfig对象中&#xff0c;通过调用init(ServletConfig config…

【go从入门到精通】for循环控制

作者简介&#xff1a; 高科&#xff0c;先后在 IBM PlatformComputing从事网格计算&#xff0c;淘米网&#xff0c;网易从事游戏服务器开发&#xff0c;拥有丰富的C&#xff0c;go等语言开发经验&#xff0c;mysql&#xff0c;mongo&#xff0c;redis等数据库&#xff0c;设计模…

32.768K晶振X1A000141000300适用于无人驾驶汽车电子设备

科技的发展带动电子元器件的发展电子元器件-“晶振”为现代的科技带来了巨大的贡献&#xff0c;用小小的身体发挥着大大的能量。 近两年无人驾驶汽车热度很高&#xff0c;不少汽车巨头都已入局。但这项技术的难度不小&#xff0c;相信在未来几年里&#xff0c;无人驾驶汽车这项…

Python网络爬虫实战进阶:代理IP池免费送

在Python网络爬虫实战中&#xff0c;代理IP池是一个非常重要的技术环节。代理IP池可以帮助爬虫隐藏真实的IP地址&#xff0c;防止被目标网站封禁&#xff0c;同时可以提高爬虫的爬取效率。本文将详细介绍代理IP池在Python网络爬虫实战中的应用。 文章目录 一、代理IP池的概念二…

蓝桥杯2023真题-幸运数字

目录 进制转换&#xff1a; 思路 代码 题目链接&#xff1a; 0幸运数字 - 蓝桥云课 (lanqiao.cn) 本题就考的进制转换问题&#xff0c;要将十进制5转换成二进制&#xff0c;通过%2,和/2的交替使用即可完成&#xff0c;所得余数就是转换成的二进制各位的值&#xff0c;转换…

[Qt学习笔记]Qt实现自定义控件SwitchButton开关按钮

1、功能介绍 在项目UI中使用较多的打开/关闭的开关按钮&#xff0c;一般都是找图片去做效果&#xff0c;比如说如下的图像来表征打开或关闭。 如果想要控件有打开/关闭的动画效果或比较好的视觉效果&#xff0c;这里就可以使用自定义控件&#xff0c;使用Painter来绘制控件。软…

数据库运行状况和性能监控工具

数据库监控是跟踪组织中数据库的可用性、安全性和性能的过程&#xff0c;它涉及通过跟踪各种关键指标来分析数据库的性能&#xff0c;确保数据库的正常运行并具有深入的可见性&#xff0c;并在出现潜在问题时触发即时警报&#xff0c;以采取主动措施来确保数据库的高可用性。 …