python顺序结构实验报告_Python 数据结构 之 串 的顺序存储结构
本文所采用的数据结构模板为 《数据结构教程》C语言版,李春葆、尹为民等著。
改篇所涉及到的是 串 的顺序存储结构。
用Python仿照C语言来实现。
代码地址:
串 的顺序存储结构:
# !/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'MrHero'
"""
串的顺序存储结构有两种: 非紧缩格式, 紧缩格式
非紧缩格式: 每个单元只存一个字符
紧缩格式: 每个单元放多个字符
"""
class SqString(object):
def __init__(self, size=0):
self.data = list(None for _ in range(size))
self.max_size = size
self.length = 0
def assign(self, str):
# 将字符串常量赋值为串s, 即生成一个值等于cstr的串
for i, item in enumerate(str):
self.data[i] = item
self.length += 1
def show_str(self):
# 将字符串输出
if self.length == 0:
raise ValueError("SqString is empty!")
for i, item in enumerate(self.data):
if item is None:
break
else:
print item,
print ""
def copy(self, sqrstr):
# 将该串复制给 sqrstr
if self.length == 0:
sqrstr.length = 0
sqrstr.max_size = self.max_size
sqrstr.data = list(None for _ in range(self.max_size))
else:
sqrstr.length = self.length
sqrstr.max_size = self.max_size
sqrstr.data = list(None for _ in range(self.max_size))
for i, item in enumerate(self.data):
sqrstr.data[i] = item
def equal(self, sqstr):
# 判断串相等: 若两个串s 与 t 相等返回 True, 否则返回 False
if self.length != sqstr.length:
return False
for i in range(self.length):
if self.data[i] != sqstr.data[i]:
return False
return True
def get_length(self):
return self.length
def concat(self, sqstr):
# 串连接
result = SqString()
result.length = self.length + sqstr.length
result.data = list(None for _ in range(self.max_size + sqstr.max_size))
# 先将自身复制到result中
for i in enumerate(self.data):
result.data[i] = self.data[i]
# 再将sqstr复制到result中
for i in enumerate(sqstr.data):
result.data[self.length + i] = sqstr.data[i]
return result
def sub_str(self, i, j):
# 求字串: 返回串s 中从第 i(1<= i <= self.length) 个字符开始,由连续
# j个字符组成的子串
# 返回新串
if i <= 0 or i > self.length or i + j - 1 > self.length:
raise IndexError("Index error!")
result = SqString(j)
for k, item in enumerate(self.data[i-1:i+j-1]):
result.data[k] = item
result.length += 1
return result
def ins_str(self, i, sqstr):
# 将串 sqstr 插入到 该串的第i 个字符中,即将 sqstr 的第一个字符作为s1的第i个字符,
# 并返回返回产生的新串
if i <= 0 or i > self.length:
raise IndexError("Index is out of range!")
result = SqString(self.max_size + sqstr.max_size)
#将 self.data[0:i-2] 复制到result中
for k, item in enumerate(self.data[0:i-1]):
result.data[k] = item
result.length += 1
#将 sqstr 复制到result中
# len2 = result.length
for k, item2 in enumerate(sqstr.data):
if item2 is not None:
result.data[i - 1 + k] = item2
result.length += 1
else:
break
#将 self.data[i-1:] 复制到result中
# len3 = result.length
for k, item3 in enumerate(self.data[i-1:]):
if item3 is not None:
result.data[i - 1 + sqstr.length + k] = item3
result.length += 1
else:
break
return result
def del_str(self, i, j):
# 从串s 中删除第 i (1<= i <= self.length) 个字符开始,长度为j的字串
# 并返回产生的新串
# 参数不正确时返回一个空串
if i <= 0 or i > self.length or i + j - 1 > self.length:
raise IndexError("Index is out of range")
result = SqString(self.length - j)
for k, item in enumerate(self.data[0:i]):
result.data[k] = item
result.length += 1
for k, item in enumerate(self.data[i + j - 1:]):
if item is not None:
result.data[i - 1 + k] = item
result.length += 1
else:
break
return result
def rep_str(self, i, j, sqstr):
# 在串self中,将第i(1<= i <= self.length)个字符开始的j个字符构成的子串用串t替换,
# 并返回产生的新串。
# 参数不正确是返回一个空串。
if i <= 0 or i > self.length or i + j - 1 > self.length:
raise IndexError("Index is out of range")
result = SqString(self.length - j + sqstr.length)
for k, item in enumerate(self.data[0:i]):
result.data[k] = item
result.length += 1
for k, item in enumerate(sqstr.data):
if item is not None:
result.data[i - 1 + k] = item
result.length += 1
for k, item in enumerate(self.data[i + j - 1:]):
if item is not None:
result.data[i - 1 + sqstr.length + k] = item
result.length += 1
return result
if __name__ == '__main__':
sqstr = SqString(30)
ss = "abcdefghijklmnopqlstuvwxyz"
sqstr.assign(ss)
sqstr.show_str()
sqtest = SqString()
sqstr.copy(sqtest)
sqtest.show_str()
a = sqstr.equal(sqtest)
print a
result = sqstr.sub_str(3, 5)
result.show_str()
sss = "123"
test1 = SqString(5)
test1.assign(sss)
result2 = sqstr.ins_str(3, test1)
result2.show_str()
result3 = result2.del_str(5, 6)
result3.show_str()
result4 = result3.rep_str(5, 4, test1)
result4.show_str()
文章转载请注明:
python顺序结构实验报告_Python 数据结构 之 串 的顺序存储结构相关推荐
- python画图程序实验报告_Python绘图简明教程
前言 本文纯科普向. 主要介绍一下Python上最好用的2D图形绘制库matplotlib的安装以及一些基础操作. 选择Python是因为其强大的第三方库和优秀便捷的语法,并且能方便地对数据进行后续处 ...
- python词频统计实验报告_Python实验报告八
安徽工程大学Python程序设计 班级:物流191 姓名:汤振宇 学号:319050108 成绩: 日期:2020/06/04 指导老师:修宇 [实验目的] : 掌握读写文本文件或 CSV 文件,进而 ...
- python股票数据分析实验报告_Python实验报告
一. 实验原理 ( 要求.任务等 ) (一).Python的开发环境 Python诞生于20世纪90年代初,是一种解释型.面向对象.动态数据类型的高级程序设计语言,是最受欢迎的程序设计语言之一. 编写 ...
- python网络爬虫实验报告_Python网络爬虫实例讲解
聊一聊Python与网络爬虫. 1.爬虫的定义 爬虫:自动抓取互联网数据的程序. 2.爬虫的主要框架 爬虫程序的主要框架如上图所示,爬虫调度端通过URL管理器获取待爬取的URL链接,若URL管理器中存 ...
- python web自动化测试实验报告_Python:web自动化测试
用selenium包. # -*- coding: utf-8 -*- # 说明: 当前的浏览器驱动用的是edge浏览器. # 需要下载浏览器驱动,并把它的路径添加到环境变量 from seleniu ...
- python词云图实验报告_Python实现Wordcloud生成词云图的示例
wordcloud是Python扩展库中一种将词语用图片表达出来的一种形式,通过词云生成的图片,我们可以更加直观的看出某篇文章的故事梗概. 首先贴出一张词云图(以哈利波特小说为例): 在生成词云图之前 ...
- python设计计算器实验报告_Python实验-计算器
一 从字符串中提取 Token 的步骤是顺序读取字符,判断字符类型,然后把 Token 的类型和值存入 Token 列表. 输入字符串处理 提取offset位置处的一个字符 如果没有后续字符则返回No ...
- python弹球游戏实验报告_Python实战案例:用Python写一个弹球游戏,就是这么强
我们前面讲了几篇关于类的知识点,为了让大家更好的掌握类的概念,并灵活的运用这些知识,我写了一个有趣又好玩的弹球的游戏,一来可以把类的知识融会一下,二来加深对Python的兴趣.你会发现哎呀Python ...
- 计算机组成与结 读写数据实验,计算机组成与结构实验报告现实版.doc
计算机组成与结构实验报告现实版.doc 计算机组织与结构 课程实验报告 姓名: 学号: 班级: 指导教师: 实验一:算术逻辑运算单元ALU设计实验 实验内容 算术逻辑运算单元ALU设计实验 实验原理 ...
最新文章
- char和uchar区别
- ML基石_3_TypesOfLearning
- Internet Explorer 8 Beta2 常见问题解答
- 【常规的01背包 POJ3624 UVA562 HDU2546 HDU3466 poj1745】
- HTML边框为零,html – 保证金,填充,边框全部为零后仍有空格?
- JS类似Java String.format的函数
- 云湖共生-释放企业数据价值
- 维纳滤波python 函数_加性高斯白噪声及维纳滤波的基本原理与Python实现
- c语言图形编程.pdf,C语言图形编程
- MAC下配置 adb 环境变量
- ROS——RPLIDAR A1 SDK详解
- matlab gui仿真实验,基于Matlab GUI设计的光学实验仿真
- 网络安全实验室 脚本关 10
- 什么时候你想逃离北上广?
- java pdf 替换文字_itext替换pdf中的中文
- 维修技术论坛万能预装系统 v5.0
- 使用关键字搜索公众号文章,
- vue ssr搭建服务端渲染项目
- python辅助u盘数据恢复
- h5活动是什么意思_浅谈什么是H5页面,怎么制作h5页面
热门文章
- Linux编程练习 --多线程2--属性的设置
- cs架构用什么语言开发_用Rust语言开发微信小程序
- grpc入门到精通_Spring Cloud 从入门到精通(一)Nacos 服务中心初探
- 石头剪刀布python代码_python实现石头剪刀布程序
- Mybatis笔记——Mybatis入门
- linux定时scp脚本,linux expect 实现定时scp的任务
- 数据结构与算法(C#版)第二章 C#语言与面向对象技术(上)V1.0
- 【转】ABP源码分析二十八:ABP.MemoryDB
- 【转】刨根究底字符编码【2.0版】(1):开篇
- Qt实现多屏幕多分辨率自适应