【数据结构】学习笔记之文件

目录

一、文件基本概念

二、文件的分类

2.1 顺序文件

2.2 索引文件

2.3 索引顺序文件

2.4 散列文件

2.5 多关键字文件

三、文件操作


一、文件基本概念

        对数据结构来说,文件是性质相同的记录的集合。
        记录是文件中存取的基本单位,数据项是文件可使用的最小单位,数据项有时称字段或者属性。主关键字项(唯一标识一个记录的字段)、次关键字项、主关键字、次关键字。单关键字文件、多关键字文件等。

        文件的逻辑结构是一种线性结构。

        文件上的操作主要有两类:检索和维护。并有实时和批量处理两种处理方式。

        文件的存储结构是指文件在外存上的组织方式,基本的组织方式有:顺序组织、索引组织、散列组织和链组织。文件组织的各种方式往往是这四种基本方式的结合。

二、文件的分类

        常用的文件组织方式:顺序文件、索引文件、散列文件和多关键字文件。

        评价一个文件组织的效率,是执行文件操作所花费的时间和文件组织所需的存储空间。通常文件组织的主要目的,是为了能高效、方便地对文件进行操作,而检索功能的多寡和速度的快慢,是衡量文件操作质量的重要标志。

2.1 顺序文件

        顺序文件:是指按记录进入文件的先后顺序存放、其逻辑顺序和物理顺序一致的文件。
        1)一切存储在顺序存储器(如磁带)上的文件都只能顺序文件。这种顺序文件只能按顺序查找法存取(注意,没有折半法了)
        2)存储在直接存取存储器(如磁盘)上的顺序文件可以顺序查找法存取,也可以用分块查找法或二分查找法存取。
        3)顺序文件多用于磁带。

2.2 索引文件

        索引文件:组织方式:通常是在文件本身(主文件)之外,另外建立一张表,它指明逻辑记录和物理记录之间一一对应的关系,这张表就叫做索引表,它和主文件一起构成索引文件。
        1)索引非顺序文件中的索引表为稠密索引。索引顺序文件中的索引表为稀疏索引。
        2)若记录很大使得索引表也很大时,可对索引表再建立索引,称为查找表。通常可达四级索引。

2.3 索引顺序文件

        索引顺序文件:是最常用的文件组织:因为索引顺序文件的主文件也是有序的,所以它既适合于随机存取也适合于顺序存取。另一方面,索引非顺序文件的索引是稠密索引,而索引顺序文件的稀疏索引,占用空间较少,因此索引顺序文件是最常用的一种文件组织。
        1)索引顺序文件常用的有两种:ISAM文件和VSAM文件

2.4 散列文件

        散列文件:是利用散列存储方式组织的文件,亦称为直接存取文件。
        1)它类似于散列表,即根据文件中关键字的特点,设计一个散列函数和处理冲突的方法,将记录散列到存储设备上。与散列表不同的是,对于文件来说,记录通常是成组存放的,若干个记录组成一个存储单位,称为桶。对散列而言,处理冲突的方法主要采用拉链法。
        2)散列文件的优点是:文件随机存放,记录不需要排序;插入删除方便;存取速度快;不需要索引区,节省存储空间。缺点是:不能进行顺序存取,只能按关键字随机存取,且询问方式限地简单询问,需要重新组织文件。

2.5 多关键字文件

        对被查询的次关键字也建立相应的索引,则这种包含有多个次关键字索引的文件称为多关键字文件。
        1)两种多关键字文件的组织方法:多重表文件和倒排表。
        2)一般的文件组织中,是先找记录,然后再找到该记录所含的各次关键字;而倒排文件是先给定次关键字,然后查找含有该次关键字的各个记录,因此称为倒排。 

三、文件操作

        数据结构文件操作通常涉及对文件中的数据进行读取、写入、修改和删除等操作。以下是一些常见的数据结构文件操作:

  1. 读取文件:使用适当的数据结构(如数组、链表、树、图等)读取文件中的数据。

  2. 写入文件:将数据结构中的数据写入文件,通常以文本或二进制格式存储。

  3. 修改文件:在文件中查找特定数据,并进行修改。

  4. 删除文件:删除文件中的特定数据或整个文件。

  5. 搜索文件:在文件中查找特定数据,可以使用各种搜索算法(如线性搜索、二分搜索、哈希表等)

四、文件操作编程

# 读取文件
def read_file(filename):
with open(filename, 'r') as file:
data = file.readlines()
return data
# 写入文件
def write_file(filename, data):
with open(filename, 'w') as file:
file.write(data)
# 修改文件
def modify_file(filename, old_data, new_data):
with open(filename, 'r') as file:
data = file.readlines()
with open(filename, 'w') as file:
for line in data:
if line.strip() == old_data:
file.write(new_data + '\n')
else:
file.write(line)
# 删除文件
import os
def delete_file(filename):
os.remove(filename)
# 搜索文件
def search_file(filename, search_term):
with open(filename, 'r') as file:
data = file.readlines()
for line in data:
if search_term in line:
return line
return None

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雨淅淅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值