数据结构与算法 实验4 串、数组和广义表的基本操作

1. 实验目的

考察能否正确理解串的顺序存储结构,以及对顺序串基本操作的掌握程度。

2. 实验介绍

 了解串的顺序存储结构和堆存储结构。掌握串的古典的模式匹配算法。掌握数组的地址计算方法。了解稀疏矩阵的两种压缩存储方法的特点和适用范围。了解广义表的结构特点及其存储方法。

3.实验内容

 创建名为 ex040501_01.py 的文件,在其中编写一个顺序串的类,该类必须包含顺序串

的定义及基本操作,并通过以下步骤测试基本操作的实现是否正确。

(1)创建顺序串 StringSrc=“Array”和 StringDst=“GeneralizedList”(读者可以

自行确定 StringSrc 和 StringDst 中的字符)。

(2)StringDst 调用复制函数(以 StringSrc 为参数),观察复制结果并验证其正确性。

(3)StringDst 调用比较函数(以 StringSrc 为参数),观察比较结果并验证其正确性。

(4)StringDst 调用连接函数(以 StringSrc 为参数),观察连接结果并验证其正确性。

(5)StringDst 调用获取子串函数,观察截取结果并验证其正确性(读者需提供两个

参数:开始截取的位置,以及要截取的长度)。

(6)StringDst 调用删除子串函数,观察删除结果并验证其正确性(读者需提供两个

参数:删除的起始位置,以及要删除的长度)。

(7)StringDst 调用插入函数(以开始插入的位置为参数),观察插入结果并验证其正

确性。

4. 实验步骤与代码

class StringList:
    def __init__(self):
        self.Max = 256
        self.contant = ''
        self.length = 0
    def Isempty(self):
        if self.length == 0:
            return True
        else:
            return False

    def CreateString(self):
        StringSH = input('请输入字符串,以回车健结尾(不得超过256个):')
        if len(StringSH) > self.Max:
            print('输入字符过长,超出部分无法储存')
            self.contant = StringSH[:self.Max]
        else:
            self.contant = StringSH
        

    def Copy(self,a,b):
        self.contant = b
        a = self.contant

    def Compare(self,a,b):
        if a == b:
            return True
        else:
            return False

    def Concat(self,a):
        self.contant += a 

    def Sub(self,ip,lenth):
        if ip > len(self.contant)-1 or ip < 0 or lenth < 1 or (lenth+ip>len(self.contant)):
            print('无法获取')
        else:
            substr = self.contant[ip:ip+lenth]
            print('该字段为;',substr)

    def Delstr(self,ip,lenth):
        if ip > len(self.contant)-1 or ip < 0 or lenth < 1 or (lenth+ip>len(self.contant)):
            print('无法获取')
        else:
            Getstr = self.contant[:ip] + self.contant[ip+lenth:]
            print('删除后的字段为:',Getstr)
  
    def Index(self,a,ip):
        if ip > len(self.contant)-1 or ip < 0  or (len(a)+ip>len(self.contant)):
            print('无法获取')
        else:
            Strnet = self.contant[:ip] + a + self.contant[ip:]
            print('插入',a,'后的字段为:',Strnet)
    def Experiment(self):
        print('开始初始化')
        print('....................')
        self.__init__()
        print('初始化完成')
        print('请构建第一个字符串')
        self.CreateString()
        StringSrc = self.contant

        print('开始初始化')
        print('....................')
        self.__init__()
        print('初始化完成')

        print('开始构建第二个字符串')
        self.CreateString()
        StringDst = self.contant

        print('调用复制函数')
        self.Copy(StringDst,StringSrc)
        StringDst = self.contant
        print('StringDst = ',StringDst)
        print('StringSrc = ',StringSrc)
        print('复制完成')

        print('调用连接函数')
        self.Concat(StringSrc)
        StringDst = self.contant
        print('StringDst = ',StringDst)
        print('连接完成')

        print('调用比较函数')
        if self.Compare(StringDst,StringSrc)==True:
            print('俩字符串相同')
        else:
            print('俩字符串不相同')
        print('完成比较')

        print('开始获取子串.......')
        ip =int(input('请输入开始获取的位置:')) 
        lenth = int(input('请输入想获取的长度:'))
        self.Sub(ip-1,lenth)
        print('完成子串的获取任务')

        print('开始删除子串.......')
        ip =int(input('请输入开始删除的位置:')) 
        lenth = int(input('请输入想删除的长度:'))
        self.Delstr(ip-1,lenth)
        print('完成删除')

        print('开始插入字段....')
        ip =int(input('请输入开始插入的位置:'))  
        self.Index(StringSrc,ip-1)
        print('完成插入')
SL = StringList()
SL.Experiment()

5.实验结果

猜你喜欢

转载自blog.csdn.net/qq_58664081/article/details/121373484