稀疏矩阵的三元组顺序表示方法及基本操作的实现(建立、输出、转置)并实现一个主菜单来实现。实现稀疏矩阵的三元组表示下的普通转置、快速转置。给我完整代码
时间: 2024-05-01 10:21:51 浏览: 94
稀疏矩阵相加、相乘和转置(用三元组实现)
4星 · 用户满意度95%
好的,下面是代码实现:
```python
# 定义稀疏矩阵的三元组表示法类
class SparseMatrix:
def __init__(self, row, col, num):
self.row = row # 行数
self.col = col # 列数
self.num = num # 非零元素个数
self.data = [] # 存储非零元素的值和位置
# 建立稀疏矩阵的三元组表示法
def create(self):
print("请输入稀疏矩阵的元素(行 列 值):")
for i in range(self.num):
row, col, val = map(int, input().split())
self.data.append([row, col, val])
# 输出稀疏矩阵的三元组表示法
def display(self):
print("稀疏矩阵的三元组表示法为:")
for i in range(self.num):
print(self.data[i][0], self.data[i][1], self.data[i][2])
# 普通转置
def transpose(self):
trans_data = [] # 存储转置后的三元组
for i in range(self.col):
for j in range(self.num):
if self.data[j][1] == i:
trans_data.append([i, self.data[j][0], self.data[j][2]])
return SparseMatrix(self.col, self.row, self.num).setData(trans_data)
# 快速转置
def fastTranspose(self):
# 存储每一列出现的非零元素个数
num_col = [0] * self.col
for i in range(self.num):
num_col[self.data[i][1]] += 1
# 存储每一列非零元素的起始位置
start_pos = [0] * self.col
for i in range(1, self.col):
start_pos[i] = start_pos[i-1] + num_col[i-1]
# 存储转置后的三元组
trans_data = [0] * self.num
for i in range(self.num):
col = self.data[i][1]
pos = start_pos[col]
trans_data[pos] = [col, self.data[i][0], self.data[i][2]]
start_pos[col] += 1
return SparseMatrix(self.col, self.row, self.num).setData(trans_data)
# 设置data属性
def setData(self, data):
self.data = data
return self
# 主菜单函数
def main():
print("请选择要执行的操作:")
print("1. 建立稀疏矩阵的三元组表示法")
print("2. 输出稀疏矩阵的三元组表示法")
print("3. 普通转置")
print("4. 快速转置")
print("0. 退出程序")
# 初始化
row, col, num = 0, 0, 0
sm = SparseMatrix(row, col, num)
while True:
op = int(input("请输入操作编号:"))
if op == 1:
row = int(input("请输入稀疏矩阵的行数:"))
col = int(input("请输入稀疏矩阵的列数:"))
num = int(input("请输入稀疏矩阵的非零元素个数:"))
sm = SparseMatrix(row, col, num)
sm.create()
elif op == 2:
sm.display()
elif op == 3:
trans_sm = sm.transpose()
trans_sm.display()
elif op == 4:
trans_sm = sm.fastTranspose()
trans_sm.display()
elif op == 0:
print("程序已退出。")
break
else:
print("输入有误,请重新输入。")
```
注意:上述代码是Python实现的,需要安装Python环境才能运行。
阅读全文