数 据 结 构
实习报告
题 目: 班 级: 姓 名: 完成日期:
中国地质大学数据结构实习报告
目 录
2 / 15
中国地质大学数据结构实习报告
一、问题描述:
文学研究人员需要统计某篇英文小说中某些形容词的出现次数和位置。试写一个实现这一目标的文字统计系统,称为“文学研究助手”。
英文小说存于一个文本文件中。待统计的词汇集合要一次输入完毕,即统计工作必须在程序的一次运行之后就全部完成。程序的输出结果是每个词的出现次数和出现位置所在行的行号,格式自行设计。
二、需求分析:
1、 文本串非空且以文件形式存放,统计匹配的词集非空。文件名和词集均用户从键盘输入; 2、 “单词”定义:由字母构成的字符序列,中间不含空格字符且区分大小写;
3、 待统计的“单词”在文本串中不跨行出现,它或者从行首开始,或者前置若干空格字符; 4、 在计算机终端输出的结果是:单词,出现的次数,出现的位置所在行的行号,同一行出
现两次的只输出一个行号;
5、 测试数据:将实验的源程序作为测试文件,从中任意选取“单词”作为测试的词集。
三、概要设计:
采用截取字符串、比较字符串的模式来完成“单词匹配比较”,从而统计出其出现的位置和次数。
1、数据结构定义:
程序将涉及到如下两个线性表结构的数据类型,用类C语言描述如下: (1) 定义从文本读取的“单词串”类型: ADT FileString{
数据对象:D={Si | Si ∈标准c++ 字符串集合,i = 1,2,3,…….,n,n ≥ 0}; 数据关系:R1={
createFileString (FSList & FSL);
3 / 15
中国地质大学数据结构实习报告
初始条件:已知一个空的“文本单词串表头”; 操作结果:生成一个空的“文本单词串序列”; insertFileString (FSList & FSL,string str,int row);
初始条件:FSL为文本字符串序列的表头str为一个标准的c++字符串,row代表了字符
串出现的行数;
操作结果:将str插入到文本字符串序列中,不需要排序;若FSL为空表头,则创建一个
字符串序列;否则插在字符串序列尾部;
getFSLength (FSList FSL);
初始条件:FSL为文本字符串序列的表头; 操作结果:获取以FSL为表头的文本字符串的长度 printFileString (FSList FSL);
初始条件:FSL为文本字符串序列的表头;
操作结果:打印以FSL为表头的文本字符串中的所有字符串; readFile (FSList & FSL);
初始条件:FSL为文本字符串序列的表头;
操作结果:从文件中读取字符串序列,并将其保留在以FSL为表头的字符串序列中; clearFileString (FSList & FSL);
初始条件:FSL为文本字符串序列的表头;
操作结果:以FSL为表头的文本字符串序列被清空; }ADT FileString
(2) 定义从键盘读取的“单词串”类型: ADT KeyString{
数据对象:D={Si | Si ∈标准c++ 字符串集合,i = 1,2,3,…….,n,n ≥ 0};
4 / 15
中国地质大学数据结构实习报告
数据关系:R1={
createKeyString (KSList & KSL);
初始条件:已知一个空的“键盘单词串表头”; 操作结果:生成一个空的“键盘单词串序列”; insertKeyString (KSList & KSL,string str,int row);
初始条件:KSL为键盘字符串序列的表头str为一个标准的c++字符串,row代表了字符
串出现的行数;
操作结果:将str插入到键盘字符串序列中,不需要排序;若KSL为空表头,则创建一个
字符串序列;否则插在字符串序列尾部;
getKSLength (KSList KSL);
初始条件:KSL为键盘字符串序列的表头; 操作结果:获取以KSL为表头的键盘字符串的长度 printKeyString (KSList KSL);
初始条件:KSL为键盘字符串序列的表头;
操作结果:打印以KSL为表头的键盘字符串中的所有字符串; readKey (KSList & KSL);
初始条件:KSL为文本字符串序列的表头;
操作结果:从键盘中读取字符串序列,并将其保留在以KSL为表头的字符串序列中; clearKeyString (KSList & KSL);
初始条件:KSL为文本字符串序列的表头;
操作结果:以KSL为表头的文本字符串序列被清空;
}ADT KeyString 2、模块设计:
5 / 15