数据结构与算法_稀疏数组

**

1、 什么是稀疏数组?

**
答:稀疏数组是把二维数组元素的横左边、纵坐标、元素大小三个值为一行储存在另一个数组中。比较适合而数组中元素个数比较少的情况。因此稀疏数组能够大大减少存储空间。

2、具体操作步骤例如在一个5*5的二维数组中,要把它转化为稀疏数组,示意图如下:
在这里插入图片描述

2、具体步骤

  • 1.将二维数组遍历一遍,得到二维数组中非0值的个数sum,二维数组的行m、列n。

  • 2.稀疏数组初始化:稀疏数组的行数等于非0值个数加1,即sum+1,列数均为3。

  • 3.稀疏数组赋值:第一行的第一个值代表二维数组的行数,依次代表列数,非0值个数。

  • 4.得到稀疏数组后可以将稀疏数组存储在文件中,需要使用时再进行读取。

  • 5.还原稀疏数组:先读取稀疏数组第一行初始化二维数组,再依次赋值到具体位置。

**

3、编写代码时学到的知识点:

**
怎么用python实现for循环?
答:使用 for i in range(x,y,z):结构。这个语句中,i代表你需要遍历的列表的下标,使用x,y来控制列表的上限,下限,z控制每次循环的增加的步长。

for i in  range(0,3,1):
	print("%d,我爱python" % i )

这段代码执行结果为:
1,我爱python
2,我爱python
3,我爱python

怎么用python实现和使用二维数组?
答:python 中实际上并没有数组概念,需要使用列表list[]来实现。

Sparse_list = [[0 for col in range(m)] for row in range(n)]  
# 其中0为二维数组的初始值,m为列数,n为行数

使用二维数组和其他语言即C、java没有区别,使用列表名、行类坐标来进行赋值取值。

怎么使用文件操作存储稀疏数组?
答:使用open函数根据文件名和操作权限符来打开文件,并赋值给某个文件对象,使用文件对象的writelines()方法写入文件。
注意:写入结束时要记得关闭文件。

#将稀疏数组存放到文件中
fo = open("output.txt","w")
for i in range(len(sparse_list)):
    fo.writelines("%3d%3d%3d\n"%(sparse_list[i][0],sparse_list[i][1],sparse_list[i][2]))
fo.close()
print("储存成功!")

怎么从文件中再还原为稀疏数组
答:基本上和写入操作没有区别,不过在读取过程中要使用切片操作来将每一行切割为具体的每一个数据,并通过eval()函数将字符串转化为数字再存储进稀疏数组中。

对于切片和eval()函数不熟悉的,可以百度一下,这里就不展开了。

#从文件中读取并打印出來,得到稀疏数组2
sparse_list2 = [[0 for col in range(3)] for row in range(sum+1)]
print("读取的文件为---------")
count = 0
fi = open("output.txt","r")
for line in fi:
    print(line)
    sparse_list2[count][0]=eval(line[0:3])
    sparse_list2[count][1]=eval(line[3:6])
    sparse_list2[count][2]=eval(line[6:9])
    count = count + 1
fi.close()
发布了27 篇原创文章 · 获赞 2 · 访问量 680

猜你喜欢

转载自blog.csdn.net/qq_44273739/article/details/104746060