基于线性表和二叉排序树的低频词过滤系统(数据结构课设)

该博客介绍了如何使用线性表和二叉排序树来统计英文文章中的单词频率,实现低频词过滤。通过读取文件、构建存储结构、删除低频词并按频率排序,对比两种方法的效率。最后提供了实现过程和代码参考。
摘要由CSDN通过智能技术生成

(一)实验内容

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

当选择1后进入以下界面:

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

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

实现提示:

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

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

3、存储结构的定义

  1. 二叉排序树的存储表示

typedef struct BSTNode{

string  WordName; //单词名称

   int count;     //单词出现频率

struct BSTNode *next;

} BSTNode, *BSTree;

4、实现过程可参见教材上线性表和二叉排序树的相关算法。

代码:

 BiTree.h:

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#include <time.h>
#include<iostream>
 
using namespace std;
 
//排序二叉树节点
typedef struct node2 
{
	char data[20];
	int count;
	struct node2* left;
	struct node2* right;
}BSTNode, * BSTree;
BSTree T, nT;

//非递归中序遍历写入文件outFile.txt 
typedef struct stack 
{
	BSTree data[1000];
	int top;
}seqstack;
 
void insertNode(BSTree& T, char* a)
{
	if (T == NULL)
	{
		T = (BSTree)malloc(sizeof(BSTNode));
		strcpy_s(T->data, a);
		T->left = NULL;
		T->right = NULL;
		T->count = 1;
	}
	else
	{
		if (strcmp(a, T->data) < 0)
			insertNode(T->left, a);
		else if (strcmp(a, T->data) == 0)
			T->count++;
		else
			insertNode(T->right, a)
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值