【数据结构与算法设计】上机课习题四

第四章作业

一、选择题1,2,3,4,5

在这里插入图片描述
在这里插入图片描述
1.串是一种特殊的线性表,其特殊性体现在(B)
A.可以顺序存储
B.数据元素是一个字符
C.可以链式存储
D.数据元素可以是多个字

2.设有两个串p和q,求q在p中首次出现的位置的运算称为(B)
A.连接
B.模式匹配
C.求子串
D.求串长

3.设串 s1=“ABCDEFG”,s2=“PQRST”,函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回串s的从序号i开始的j个字符组成的子串,len(s)返回串s的长度,则con(subs(s1,2,len(s2)),subs(s1,len(s2),2))的结果串是(D)
A.BCDEF
B.BCDEFG
C.BCPQRST
D.BCDEFEF

4.假设有60行70列的二维数组a[1…60,1…70]以列序为主序顺序存储,其基地址为10000,每个元素占两个存储单元,那么第32行第58列的元素a[32,58]的存储地址为(A),注意无第0行第0列的元素。
A.16902
B.16904
C.14454
D.答案A,B,C均不对

5.设矩阵A是一个对称矩阵,为了节省存储,将其下三角部分(如图)按行序存放在一维数组B[1,n(n-1)/2]中,
在这里插入图片描述
对下三角部分中的任一元素 a i , j a_{i,j} ai,j(i<=j),在一维数组B中下标k值是(B)
A.i(i-1)/2+j-1
B.i(i-1)/2+j
C.i(i+1)/2+j-1
D.i(i+1)/2+j

二、填空题1,2,3,5,7,8

在这里插入图片描述
在这里插入图片描述

1.不包含任何字符(长度为0)的串称为(空串);由一个或多个空格(仅有空格符)组成的串称为(空白串)。
2.设s=“A;/document/Mary.doc”,则strlen(s)=(20)的“/”字符定位的位置为(3)
3.字串的定位运算称为串的模式匹配;被匹配的主串称为(被匹配的串),(子串)称为模式
5.设目标T=“abccdcdccbaa”,模式P=“cdcc”,则第(6)次匹配成功。
7.假设有二维数组A6X8,每个元素用相邻的6个字节存储,存储器按字节编址。已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为(288B);末尾元素A57的第一个字节的地址为(1282);若按行存储,元素A14的第一个字节的地址为(1072);若按列存储,元素A47的第一个字节的地址为(1276)。
8.设数组a[1…60,1…70]的基地址为2048,每个元素占两个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为(8950)

三、算法设计题3,5,7

在这里插入图片描述
3.编写基于SeqString类的成员函数reverse(),要求将当前对象中的字符反序存放

class SeqString:
    def __init__(self, s):
        self.str = s

    def reverse(self):
        # 使用切片来反转字符串
        self.str = self.str[::-1]

    def print(self):
        print(self.str)

# 测试代码
s = SeqString("reverse 1999")
print("Original string:", end=" ")
s.print()
s.reverse()
print("Reversed string:", end=" ")
s.print()

5.编写基于SeqString类的成员函数stringcount(str),要求统计子串str在当前对象串中出现的次数,若不出现则返回0.

class SeqString:
    def __init__(self, s):
        self.str = s

    def stringcount(self, sub_str):
        count = 0
        start_index = 0
        while True:
            # 在当前对象串中搜索子串
            index = self.str.find(sub_str, start_index)
            if index == -1:
                break
            count += 1
            # 更新搜索的起始位置
            start_index = index + 1
        return count

# 测试代码
s = SeqString("reverse 1999:Can you can a can as a canner can can a can")
sub_str = "can"
print("Number of occurrences of '{}' in '{}': {}".format(sub_str, s.str, s.stringcount(sub_str)))

7.已知两个稀疏矩阵A和B,试基于三元组顺序表或十字链表的存储链表编程实现A+B的运算。

class MatrixNode:
    def __init__(self, row, col, value):
        self.row = row
        self.col = col
        self.value = value
        self.right = None
        self.down = None

class CrossLinkedList:
    def __init__(self, row_num, col_num):
        self.row_num = row_num
        self.col_num = col_num
        # 初始化行指针和列指针
        self.row_heads = [None] * row_num
        self.col_heads = [None] * col_num

    def insert(self, row, col, value):
        # 创建节点
        node = MatrixNode(row, col, value)
        # 插入节点到行链表
        if self.row_heads[row] is None or self.row_heads[row].col > col:
            node.right = self.row_heads[row]
            self.row_heads[row] = node
        else:
            current = self.row_heads[row]
            while current.right and current.right.col < col:
                current = current.right
            node.right = current.right
            current.right = node
        # 插入节点到列链表
        if self.col_heads[col] is None or self.col_heads[col].row > row:
            node.down = self.col_heads[col]
            self.col_heads[col] = node
        else:
            current = self.col_heads[col]
            while current.down and current.down.row < row:
                current = current.down
            node.down = current.down
            current.down = node

    def add(self, other):
        if self.row_num != other.row_num or self.col_num != other.col_num:
            raise ValueError("Matrix dimensions don't match")
        result = CrossLinkedList(self.row_num, self.col_num)
        for row in range(self.row_num):
            for col in range(self.col_num):
                value1 = self.get_value(row, col)
                value2 = other.get_value(row, col)
                result_value = value1 + value2
                if result_value != 0:
                    result.insert(row, col, result_value)
        return result

    def get_value(self, row, col):
        current = self.row_heads[row]
        while current:
            if current.col == col:
                return current.value
            elif current.col > col:
                return 0
            current = current.right
        return 0

    def print_matrix(self):
        for row in range(self.row_num):
            for col in range(self.col_num):
                print(self.get_value(row, col), end=" ")
            print()

# 测试代码
A = CrossLinkedList(3, 3)
A.insert(0, 0, 1)
A.insert(0, 2, 2)
A.insert(1, 0, 0)
A.insert(2, 0, 4)
print("矩阵A :")
A.print_matrix()

B = CrossLinkedList(3, 3)
B.insert(0, 1, 5)
B.insert(1, 0, 6)
B.insert(1, 1, 7)
B.insert(2, 2, 8)
print("矩阵B :")
B.print_matrix()

C = A.add(B)
print("A + B:")
C.print_matrix()

  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 上机题库是一种集合了各种难度级别的 Python 编程题目的资源。它主要用于帮助学习者在实践中巩固和提高他们的 Python 编程能力。上机题库可以包含不同类型的题目,例如算法题、数据结构题、面向对象编程题等。 Python 上机题库的应用非常广泛。对于初学者来说,通过做题目可以加深对 Python 语言基础知识的理解,掌握基本的编码技巧,提高编程思维能力。对于进阶者来说,通过解决更加复杂的问题和挑战,可以拓宽知识面并提高解决问题的能力。同时,上机题库还可以作为考试和面试准备的工具,帮助学习者了解应用场景和解决实际问题的能力。 一个好的上机题库需要具备以下特点:题目涵盖广泛,包括各个主题和难度级别;有详细的题目描述和输入输出要求,使学习者能够清晰地理解问题和解题思路;提供测试用例,方便学习者验证代码的正确性;给出参考答案和思路解析,帮助学习者分析和理解优质的解决方法。 Python 上机题库的使用方法也比较简单。学习者可以根据自己的水平选择合适的题目进行练习。在解题过程中,可以通过尝试不同的思路和算法,提高解决问题的策略;也可以参考题目的参考答案,学习别人的解决思路和编码技巧,从中汲取经验。此外,可以尝试与他人合作完成一些复杂的题目,通过交流和讨论来共同提高。 总之,Python 上机题库是一个非常有价值的学习资源,可以帮助学习者提高 Python 编程能力、应对复杂问题和提升解决问题的能力。通过不断练习和实践,学习者能够逐渐掌握更加高级的编程技能,为未来的学习和工作打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值