《数据结构课程设计》预习报告

实验三:基于线性表和二叉排序树的低频词过滤系统


一、实验内容

对于一篇给定的英文文章,分别利用线性表和二叉排序树来实现单词频率的统计,实现低频词的过滤,并比较两种方法的效率。

二、实验要求

  1. 读取英文文章文件(Infile.txt),识别其中的单词。
  2. 分别利用线性表和二叉排序树构建单词的存储结构。当识别出一个单词后,若线性表或者二叉排序树中没有该单词,则在适当的位置上添加该单词;若该单词已经被识别,则增加其出现的频率。
  3. 统计结束后,删除出现频率低于五次的单词,并显示该单词和其出现频率。
  4. 其余单词及其出现频率按照从高到低的次序输出到文件中(Outfile.txt),同时输出用两种方法完成该工作所用的时间。
  5. 计算查找表的ASL值,分析比较两种方法的效率。
  6. 系统运行后主菜单如下:
  7. 当选择1后进入以下界面:

     

    其中选择2时显示利用线性表来实现所有功能所用的时间。

    当在主菜单选择2二叉排序树后,进入的界面与上图类同。

三、 实验所需数据结构

1、线性表

2、二叉树

四、实验思路

1、要求分析

   (1) 在统计的过程中,分词时可以利用空格或者标点符号作为划分单词依据,文章中默认只包含英文单词和标点符号。

(2)对单词进行排序时,是按照字母序进行的,每个结点还应包含该单词出现的频率。

(3)存储结构的定义

//二叉排序树的存储定义
typedef struct BiNode {

	string  WordName;		//单词名称
	int count;			    //单词出现频率
	struct BiNode* lchild;
	struct BiNode* rchild;

} BSTNode, * BSTree;

//线性表的存储定义
typedef struct LNode {
	string WordName;
	int count;
	LNode* next;
}LNode, *LinkList;

2、线性表伪代码

//线性表类封装
class Linear{
private:
	LNode* first;
public:
	//链表的创建  构造函数
	Linear() {
		first = new LNode();
		first->next = NULL;
	}

	//线性表添加单词
	void LinearAdd(string tempWord);

	//读取文件
	void LinearRead();

	//删除频率低于5的单词
	void LinearDelete();

	//高频写入文件
	void LinearWrite();

	//线性表
	void LinearTable();

	//计算ASL
	void FindASL();
};

3、二叉树伪代码

//二叉排序树类
class BiSortTree {
private:
	BiNode* root;
public:
	//二叉树的创建  构造函数
	BiSortTree() {
		root = new BiNode();
		root = NULL;
	}
	//返回根节点  方便遍历
	BiNode* GetRoot() {
		return root;
		cout << "GetRoot函数" << endl;
	}

	//二叉树添加单词
	BiNode* InsertBST(BiNode* root,BiNode *s);

	//读取文件
	BiNode* ReadBST();

	//查找某一结点的父亲结点
	//BiNode* SearchBST1(BiNode* root,BiNode* r);

	//删除二叉树的某一个结点
	//void NextRep(BiNode* p);

	//删除频率低于5的单词
	void DeleteBST(BiNode* root);

	//右中左遍历
	void GetInBST(BiNode* root);

	//完成写入文件
	void WriteBST(BiNode* root);

	//二叉排序树
	void TableBST();

	//计算ASL
	void FindASL();
};

4、菜单

//主菜单
void Menu1() {
	cout << "1、线性表" << endl;
	cout << "2、二叉排序树" << endl;
	cout << "3、退出系统" << endl;
	cout << "请选择你需要的服务,输入数字(1~3):" << endl;
}

//菜单二
void Menu2() {
	cout << "1、连续执行至完毕" << endl;
	cout << "2、显示执行时间" << endl;
	cout << "3、单步执行:识别并统计单词" << endl;
	cout << "4、单步执行:删除并显示低频词汇" << endl;
	cout << "5、单步执行:输出其余单词及其频率" << endl;
	cout << "6、单步执行:计算并输出ASL值" << endl;
	cout << "7、返回主菜单" << endl;
	cout << "请选择你需要的服务,输入数字(1~7):" << endl;
}

五、源代码链接

源代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值