精华内容
下载资源
问答
  • 网页 资讯 视频 图片 知道 文库 贴吧 采购 地图 | 百度首页 ...百度文库 教育专区 高等教育 工学 数据结构课程设计实验 数据结构课程设计实验 树遍历文件目录结构显示 树遍历文件目录结构显示 实验报告 实验报
  • 数据结构课程设计 一教学目的和要求 课程设计是加强学生实践能力一个强有力手段综合课设 1 主要针对数据结构和 c/c++语言开展 实践性课程要求学生掌握数据结构应用算法编写类 C 语言算法转换成 CC++程序 ...
  • 数据结构课程设计 题目一通讯录管理系统设计与实现 设计要求系统包括通讯者结点信息插入查询删除 更新以及通讯录信息输出等功能 菜单内容 1. 通讯录链表建立 2. 通讯者信息插入 3. 通讯者信息查询 4. ...
  • 数据结构课程设计模板结构设计 课程设计概述 共完成4个题目 1.一元稀疏多项式计算器 2.成绩分析问题 3.背包问题 4.八皇后问题 编程语言VC6.0 运行环境Windows8.0 二一元稀疏多项式计算器 问题描述 1.1 输入并建立...
  • 武汉理工大学数据结构课程设计 PAGE 2 课程设计任务书 学生姓名 专业班级 指导教师 工作单位 计算机科学系 题 目: 拓扑排序 初始条件 1采用邻接表作为有向图存储结构 2给出所有可能拓扑序列 3测试用例见严蔚敏...
  • 网页 资讯 视频 图片 知道 文库 贴吧 采购 地图 | 百度首页 登录 VIP新客立减2元 意见反馈 下载客户端 12/30/2019 数据结构课程设计题目(1) - 百度文库 首页 分类 精品内容 申请认证 机构合作 频道专区 会员中心 ...
  • 网页 资讯 视频 图片 知道 文库 贴吧 采购 地图 | 百度首页 登录 VIP新客立减2元 意见反馈 下载客户端 12/25/2019 数据结构课程设计报告-文件索引 - 百度文库 首页 分类 精品内容 申请认证 机构合作 频道专区 会员...
  • 网页 资讯 视频 图片 知道 文库 贴吧 采购 地图 | 百度首页 登录 VIP新客立减2元 意见反馈 下载客户端 12/25/2019 数据结构课程设计客户积分系统 - 百度文库 首页 分类 精品内容 申请认证 机构合作 频道专区 会员...
  • 二一届课程设计论文 算法与数据结构 二一...八参考文献 数据结构课程设计 最小生成树问题 一引言 数据结构是计算机科学与技术专业和信息系统专业必修课之一是一 门综合专业技术课本课程较系统介绍了软件开发过程
  • WORD格式 专业资料整理 课程设计报告 课程名称 专业 班级 姓名 学号 成绩 完成日期 年 月 日 任务书 题目黑白棋系统 设计内容及要求 课程设计任务内容 通过玩家与电脑双方交替下棋在一个 8行8列方格中进行棋子...
  • 数据结构课程设计指导书 设计方法 本次设计提供一次实际环境使学生对数据结构有进一步了解 设计环境和开发工具 操作系统 windows2000 (或更高版本) 开发工具 Turboc 设计任务 1链表操作 = 1 \* GB3 设计目的 1掌握...
  • 数据结构课程设计 订票系统 第 PAGE 2页 共 NUMPAGES 30页 目录 TOC \o "1-2" \h \z \u 总体设计 2 概要设计 2 详细设计 3 调试分析 11 测试数据及截图 11 时间复杂度分析 15 问题思考 15 算法改进设想 15 课设...
  • 课程设计(论文) 题 目 名 称 教学计划编制问题 课 程 名 称 数据结构 学 生 姓 名 杨满平 学 号 1041302054 系 专 业 信息工程系2010级计算机科学与技术 指 导 教 师 黄同成 2011年 12 摘要 数据结构是计算机科学与...
  • cheng 内江师范学院 数据结构与算法设计课程设计 实 验 报 告 册 编制 算法设计课题组 审定 曾意 专业 信息与计算科学 班级 2012 级 6 班 学号 20120241242 姓名 杨浩天 数学与信息科学学院 2014 年 9 月 cheng ...
  • 本资源来源于互联网,版权为原作者所有。若侵犯到您版权, 请提出指正, 我们将立即删除。
  • 中国石油大学北京远程教育学院 期 末 考 试 数据结构课程设计 学习中心_ 姓名_ 学号_ 关于课程考试违规作弊说明 1提交文件中涉嫌抄袭内容包括抄袭网上书籍报刊杂志及其他已有论文带有明显外校标记不符合学院要求或...
  • 需求分析 目的编制一个全国城市间交通咨询程序为旅客提供两种或三种最优决策以及两种交通工具火车 飞机交通咨询 基本功能 1提供对城市信息进行编辑如添加或删除功能 2城市之间有两种交通工具火车和飞机提供对...
  • 数据结构与算法课程设计 成果报告 括号配对程序设计与实现 学生学号 学生姓名 学 院 计算机学院 专业班级 软件工程1341 专业课程 数据结构与算法 指导教师 2014 年 12 月 29 日 题 目 括号配对程序设计与实现 ...
  • #include<iostream> #include<cstring> #include<iomanip> using namespace std; ... //姓名拼音 int num; //学号 int number; //票数 int Class; //班级 char major[30].
    #include<iostream>
    #include<cstring>
    #include<iomanip>
    using namespace std;
    
    
    struct student{
        char name[20];        
        int num;              //学号
        int number;           //票数
        int Class;            
        char major[30];       
        char grade[10];       
        char achievement[200];
    };
    
    class votesystem{
    private:
    	
        student*st;
        int count;         //当前元素个数
        int size;          //哈希表长
        
        
    public:
    
        void 	InitHashTable(int n);                  //初始化哈希表
        int 	Hash(char*name);                        //计算哈希地址
        void 	collision(int &s);                     //冲突,计算下一个地址
        int 	search(char *name,int &s);              //查找
        void 	insert(char*name);                      //插入
        int 	vote(char*name);                        //投票
        void 	display();                             //显示哈希表
        void 	showvote(int k);                       //按哈希表下标显示票数
        void 	showrank();                            //显示排行榜
    };
    
    
    
     
    void votesystem::InitHashTable(int n)  //初始化哈希表
    {
        size=n;
    
        st=new student[size];
        for(int i=0;i<size;i++)
            st[i].name[0]='\0';
    }
    
    
    int votesystem::Hash(char *name)        //求哈希地址,size为表长
    {
        char *p=name;
        int key=0;				
    	 
        while(*p)
        {
            key += int(*p);				key为所有名字(fyx)的累计值 
            p++;
        }
        return key%size;				//size哈希表长,返回下标 
    }
    
    
    
    void votesystem::collision(int &s)       //开放地址法解决冲突
    {
        s=s+1;
    }
    
    
    int votesystem::search(char *name,int &s)  //查找
    {
        s=Hash(name);                          //哈希表定位
        
        while(st[s].name[0] != '\0' && strcmp(st[s].name,name)) 
            collision(s);   //开放地址处理冲突
            
        if(!strcmp(st[s].name,name))	//strcmp(str1,str2) ==返回0,>返回1,<返回-1 
            return 1;       //找到
        else return 0;      //未找到
    }
    
    
    
    void votesystem::insert(char *name)//插入
    {
        int s;
        char a[2];
        search(name,s);
        cout<<"提名学生信息格式如下:"<<endl; 
        cout<<"\t学号:19101010"<<endl;
        cout<<"\t班级:1"<<endl;
        cout<<"\t专业:数学师范"<<endl;
        cout<<"\t年级:二"<<endl;
        cout<<"\t突出事迹:国家二等奖学金"<<endl;
        
    	strcpy(st[s].name,name);
        cout<<"学号:\t";
        cin>>st[s].num;
        cout<<"班级:\t";
        cin>>st[s].Class;
        cout<<"专业:\t";
        cin.getline(a,2);
        cin.getline(st[s].major,30);
        cout<<"年级:\t";
        cin.getline(st[s].grade,10);
        cout<<"突出事迹:\t";
        cin.getline(st[s].achievement,200); //提名即为投一票,当前元素加一
        st[s].number=1;						//提名即为投一票
        count++;
    }
    
    
    int votesystem::vote(char*name)      //投票,纪录已存在时调用search函数
    {
        int s;
        int f;
        //定位 
        f=search(name,s);					//search返回1 0 
        if(f) {st[s].number++; return 1;}	//投票成功
        else return 0;						//投票失败
    }
    
    
    void votesystem::display()           //显示排名 
    {
        for(int i=0;i<size;i++)
            if(st[i].name[0]!='\0')
                cout<<st[i].num<<' '
    				<<st[i].name<<' '<<st[i].grade<<"年级"<<' '
    				<<st[i].major<<' '
                	<<st[i].Class<<"班"<<' '
    				<<st[i].number<<"票"<<' '
    				<<st[i].achievement<<endl;
    }
    
    
    void votesystem::showvote(int k)      //按排名表下标显示票数
    {
        cout<<"现得票数:"<<st[k].number;
    }
    
    
    void votesystem::showrank()            //显示排行榜
    {
        int k;
        int a[11];    		//定义一个数组存放前十名在哈希表中的下标
        
        for(int i=0; i<10; i++) a[i]=-1;
    
    
    
        for(int i=0; i<size; i++)  //遍历哈希表
        {
            
    		
    		if(st[i].name[0] != '\0')
            {	//插入法排序
                for( k=9; k >= 0; k--)//遍历a[] 
                {
                    if(a[k] > -1)
                    {
                        if(st[a[k]].number<st[i].number)
                            a[k+1]=a[k];			//这里的k+1是指当前定位 
                        else break;
                    }
                }
                a[k+1]=i;			//这里的k=0--, a[0] = i 
            }//if 
            
            
            
        }//for 
        
        
        cout<<"   学号          姓名       得票数"<<endl;
        for(int i=0; i<10 && a[i]>-1; i++){
            cout<<left<<setw(15)<<st[a[i]].num<<setw(15)<<st[a[i]].name<<setw(15)<<st[a[i]].number<<endl;
        }//left左对齐,在右侧加空格        setw()设置空格 #include<iomanip>
    }
    
    
    
    
    int main()
    {
        int choose=-1,k=-1;		//choose赋初值-1 
        char name[40];
        votesystem L;
        L.InitHashTable(50);	//初值学生50 
    	 
        while(choose!=6)		//6--退出投票系统
        {
    		cout<<"				"<<endl; 
    		cout<<"				"<<endl; 
    
    		
    		
            cout<<"  校园十大优秀青年评比系统"<<endl;
            cout<<"1--提名新学生"<<endl;
            cout<<"2--查看选手信息"<<endl;
            cout<<"3--选手得票"<<endl;
            cout<<"4--给选手投票"<<endl;
            cout<<"5--前十排行榜单"<<endl;
            cout<<"6--退出投票系统"<<endl;
    
            cout<<endl<<endl<<endl<<endl;
    
            cout<<"请您的选择操作:";
            cin>>choose;			
            switch(choose)
            {
                    char a[2];
                    
                case 1: 
                		cout<<"输入姓名(例如:fyx)"<<endl; 
                		cin>>name;
                        L.insert(name);
                        cout<<"选手提名成功\n";
                        break;
                case 2:
                    L.display();
                    
                    cout<<endl<<endl<<endl; 
                    cout<<"信息如上"<<endl<<"END"<<endl;
    				break;
    				
                case 3:
                    cout<<"请输入选手姓名的拼音(如:fyx):"<<endl;
                    cin.getline(a,2);
                    cin.getline(name,40);
                    int f;
                    f=L.search(name,k);
                    if(f)
    				{
    				L.showvote(k);
                    cout<<endl;
                    break;
                	}
                    else 
    				cout<<"提名名单中无此记录";
    				cout<<endl;
    			
                    cout<<"1--提名该学生\n"
    					<<"2--返回系统界面\n"
                        <<"请选择操作:";
                        int t;
                        cin>>t;
                        if(t==1)
                        {
                            L.insert(name);
                            cout<<"选手提名成功\n";
                        }break; 
    
                    
                case 4:
                    cout<<"请输入选手姓名拼音(如:fyx)"<<endl;
                    cin.getline(a,2);
                    cin.getline(name,40);
                    f=L.search(name,k);
                    if(f) {L.vote(name);cout<<"投票成功\n";}
                    else
                    {
                        cout<<"无纪录!\n";
                        cout<<"1--提名该学生\n"
                        	<<"2--返回系统界面\n"
                        	<<"请选择操作:";
    
                        int t;
                        cin>>t;
                        if(t==1)
                        {
                            L.insert(name);
                            cout<<"选手提名成功\n";
                        }
                    }break;
                case 5:L.showrank();break;
                case 6:cout<<"投票系统已关闭!\n";
                	   cout<<"感谢使用本系统!\n";
                	   break;
                
                
                
                default:
                    cout<<"操作无效,请重新选择!\n"; 
                    choose = -1; 
    				break;
            }
    
        }
        
        return 0;
    }
    
    展开全文
  • 这是2020年五邑大学数据结构课程设计的报告和源代码,报告和源代码都在里面了,本报告和代码已经验收了,成绩优秀,报告满足字数要求,代码完全自主设计编写,没有任何bug,可以正常运行,可以拿去参考一下,有不懂...
  • 题目采自 《数据结构题集》(c语言版)(严蔚敏`吴伟民)6.3 图书管理,最大难度在于要求用B树对书号进行索引。 设计语言:C语言 编译环境: VC++6.0 里面包含完整源程序...数据结构课程设计实验报告-图书管理.doc
  • 编号: 数据结构与算法课程设计 说明书 题 目: 人事档案管理系统 学 院: 专 业: 学生姓名: 学 号: 指导教师: 摘 要 电脑已经深入到我们日常工作和生活方方面面,比如文字处理信息管理辅助设计图形图像处理教育培训...
  • 有以下功能: 初始化 从终端读入字符集大小n及n个字符和m个权值,建立哈夫曼树,并将它存于文件hfmtree中 编码 利用已建好哈夫曼树(如不在内存,则从文件...附带详细设计报告(最后的课程设计等级被评定为优秀
  • 数据结构课程设计一、考核方法和内容根据课程设计过程中学生学生态度、题目完成情况、课程设计报告书质量和回答问题情况等按照10%、40%、30%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五...

    数据结构课程设计

    一、考核方法和内容

    根据课程设计过程中学生的学生态度、题目完成情况、课程设计报告书的质量和回答问题的情况等按照10%、40%、30%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。

    评分标准:

    优秀:答辩所有问题都能答出+报告良好

    良好:答辩所有问题都能答出+报告

    中等:答辩大部分问题能答出+报告良好

    及格:答辩大部分问题能答出+报告一般

    以下四种,都不及格:答辩几乎答不出问题报告几乎都是代码雷同部分达到60%

    课设报告的装订顺序如下:

    任务书(签名,把题目要求贴在相应位置,注意下划线)-----目录(注意目录的格式,页码)-----1、设计任务(题目要求)-----2、需求分析(准备选用什么数据逻辑结构?数据元素包含哪些属性?需要哪些函数?为什么要这样设计?最后列出抽象数据类型定义)-----3、系统设计(设计实现抽象数据类型,包含选择什么物理存储方式?数据元素的结构体或类定义,以及各函数的设计思路,算法,程序流程图等)----4、编码实现(重要函数的实现代码)-----5、调试分析(选择多组测试数据、运行截图、结果分析)-----6、课设总结(心得体会)-----7、谢辞-----8、参考文献;

    课设报告打印要求:

    B5纸张打印,报告总页数控制在10—15页内,报告中不能全是代码,报告中代码总量控制在内。

    版式:无页眉,有页码,页码居中

    字号:小四,单倍行距

    字体:宋体+Times new Romar

    截图:截图要配图的编号和图的题目,如:“图1 Insert函数流程图”

    、课程设计的题目

    、数据结构课程设计的具体内容

    要求:全部采用数据结构课程中的内容实现,采用C或C++实现,逻辑结构只能选线性结构、树型结构、图型结构、集合结构中的一种,不能用数据库。

    长整数的加法运算

    基本要求:设计一个实现任意长的整数进行加法、减法运算的演示程序。

    利用链表实现长整数的存储,每个结点含一个整型变量。提醒:任何整型变量int的范围是-(2^15-1)~(2^15-1)。

    输入和输出形式按照中国对于长整数的表示习惯,每四位一组,组间用逗号隔开。 如:-2345,6789,3211;

    演示程序以用户和计算机的对话方式执行,可进行多次运算。

    提高部分:增加利用顺序表存储结构来实现长整数的加、减和输出功能。

    通讯录管理系统的设计与实现——顺序表

    基本要求:利用顺序表完成通讯录的一般性管理工作。其中,每条记录至少包括姓名、手机号、QQ、电子邮箱、地址等信息。功能主要包括:

    (1)添加信息:可新增人员信息;

    (2)显示信息:可以按照手机号或联系人的姓名拼音排序显示;

    (3)查找:用名字和手机号分别作为查找的依据,进行查找;

    (4)编辑信息:修改完善人员信息;

    (5)删除信息:删除人员信息;

    (6)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

    提高部分:利用外部.txt文件同步存储通讯录信息。

    广义表的应用?

    基本要求:要求实现的广义表的建立、查找、输出、取表头和取表尾以及求深度等。

    演示程序以用户和计算机的对话方式执行,并可进行多次交互。

    用一个主控菜单程序控制,共分为6个子功能。?(1)建立广义表?(2)输出广义表?(3)结点的查找?(4)求广义表表头?(5)求广义表表尾?(6)求广义表的深度。(7)求广义表的长度。

    提高部分:利用外部.txt文件输入数据信息建立广义表。

    学生成绩管理系统的设计与实现

    基本要求:能够实现对学生成绩的常用管理功能。

    采用一定的存储结构对学生成绩进行管理;

    可以进行成绩的录入、查询、修改、删除等操作;

    可以查询某门课程的平均分,学生的排名,不同分数段的学生人数及学生信息等;

    可以查询某学生的各课程分数,总分及学生的班级排名等;

    可以按学号排序输出全部学生的成绩信息、总分及班级排名等。

    演示程序以用户和计算机的对话方式进行。

    提高部分:利用外部.txt文件同步存储学生成绩信息。家谱管理系统的设计与实现

    基本要求:?设计并实现一个简单的家谱管理系统。?

    (1)建立家族关系树,并能存储到外部文件中。?

    (2)实现家族成员的添加、删除功能。?

    (3)可以查询家族成员的双亲、祖先、兄弟、?孩子和后代等信息。

    (4)按某种顺序输出家谱信息(树的遍历操作)、以树型结构输出家谱资料等功能。

    (5)界面友好,演示程序以用户和计算机的对话方式进行,可反复操作。

    提高部分:通过读取外部.txt文件,建立家族关系树,添加和删除后的结果同步到外部文件。

    集合的并、交和差运算的程序

    基本要求:编制一个能演示执行集合的并、交和差

    展开全文
  • 一元稀疏多项式课程设计的原代码,PPT,报告.用了两个星期才完成,最终答辩完得了优秀
  • 1.目的:培养学生应用已经学过的程序设计语言和数据结构知识,学会分析实际问题中的数据模型,设计合理的数据结构,掌握程序设计的方法,培养用计算机解决实际问题的能力。 2.要求: (1)程序设计语言选用C; (2...
    • 代码在文末
    • 最终成绩:优秀
    • 本文为了挑战难度选择了中文

    【updated 2020/05/14】init.h放错代码了,已修改

    论文查重分析系统
    (1)查找并嵌入已有的分词算法
    (2)实现单个文档与资料库中文档的单词重复读计算;
    (3)统计显示每个文档的查重结果,包括重复度、高频重复词语或者段落、相似文档等


    1.目的:培养学生应用已经学过的程序设计语言和数据结构知识,学会分析实际问题中的数据模型,设计合理的数据结构,掌握程序设计的方法,培养用计算机解决实际问题的能力。
    2.要求:
    (1)程序设计语言选用C;
    (2)每个实验必须明确指出选用的数据结构。



    在这里插入图片描述


    部分课设报告

    完整版请私信

    1 课程设计背景及意义

    众所周知,学位论文是高校人才培养的关键环节。对于学生而言,这直接关乎到能否顺利毕业,其重要性不言而喻。而在高校学生做毕业论文设计的时候,选题重复或者部分抄袭的现象十分普遍、屡禁不止。针对这样一个严峻的形势,设计和开发论文查重分析系统有其必要性和迫切性。
    高校毕业论文查重是伴随时代进步、科技发展的新兴产物,有其必然性。现今社会高度现代化、信息化,这对高校人才培养从内容或者手段上不断深化改革提出了更高的要求。随着高等教育发展从注重规模扩张转向注重质量提升的内涵式发展,作为办学行为主体的高校势必要与时俱进,在人才培养这一核心功能上做足文章、下足功夫,通过在基本规则上从严进行自我形象塑造,以治校的高标准、严要求全面提升竞争力和吸引力[1]。而在这其中,毕业论文作为高校人才培养和学生完成学业的标志性成果必然是一个需要严格把控质量的关键环节。
    所谓论文查重就是指检测学术论文内容的重复率,作为一种技术手段旨在遏制学术论文写作过程中可能出现的抄袭剽窃等学术不端行为[1]。开发和推广论文查重分析系统具有有效遏制学术不端行为、严格把控和提升学位论文质量的重要意义。

    2 课程设计题目

    【问题描述】
    自主设计和实现一个论文查重分析系统。
    【具体要求细节】
    (1)查找并嵌入已有的分词算法。
    (2)实现单个文档与资料库中文档的单词重复度计算。
    (3)统计显示每个文档的查重结果,包括重复度、高频重复词语、相似文档等。

    3 算法流程

    1) 先对样本库进行预处理分词。
    2) 将待检测文档写入txt文件并以ANSI编码保存。
    3) 加载配置文件中的初始配置。
    4) 加载配置停用词库文件(本演示程序中init_setting.stopwordsPath = ‘./stopwords/’,数据集使用了NLP领域的开源数据集《百度停用词表》、《哈工大停用词表》、《四川大学机器智能实验室停用词库》、《中文停用词表》)。
    5)加载资料库文档(本演示程序中init_setting.databasePath=‘./databases/’,数据集为经过挖掘、清洗、加工和重新编码过的余秀华出版诗集《月光落在左手上》中的部分诗歌作为小样本测试)。
    6)对检测文档进行中文分词和停用词过滤,对词频进行统计,然后对文档向量化,以获取词袋。
    7)遍历资料库,对资料库样本进行相同的处理。
    8)根据(6)、(7)操作获取的文档向量进行TF-IDF算法计算余弦相似度。
    9)对查重结果进行处理和可视化操作,导出“相似文献汇总(Top 10).svg”图。
    10)对高频重复词语绘制词云图。
    11)结束程序。

    pretreatment.cpp

    /*
    	Name: Paper Reduplication Analysis System
    	Copyright: All rights reserved.
    	Author: skysys
    	Date: 29/06/19 14:37
    	Description: Course Design of Data Structure
    */
    #include"init.h"
    #include<windows.h>
    #include<cstring>
    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<vector>
    #include<fstream>
    #include<stack>
    #include<sstream>
    #include<queue>
    using namespace std;
    int main(){
    	CmdPrompt("Loading Paper Reduplication Analysis System,Please Waiting");
    	CmdPrompt("Initializing Program Interface Settings");
    	system("color f2");
    	SetConsoleTitle("Paper Reduplication Analysis System");
    	CmdPrompt("Program Initialization Interface Settings Completed",true);
    //	加载词库
    	CmdPrompt("Start loading the dictionary library");
    	Dictionary Dict(DICT_FILE_NAME); 	
    #define FIRST_RUN
    #ifdef FIRST_RUN //只有初次运行或者资料库更新才进行此操作 
    	//加载资料库 
    	CmdPrompt("Start loading database files");
    	vector<string> DBFiles = GetListOfDatabaseFile(DATABASE_PATH);
        if(DBFiles.empty())throw "None Database Files";
        else CmdPrompt("Successful loading of database files",true);
        CmdPrompt("Processing database"); 
    	for(int i=0;i<DBFiles.size();i++){
    		string OutputFileName = DBFiles[i].substr(0,DBFiles[i].length()-4)+"_processed.txt";
    		Dict.SegmentWords(DATABASE_PATH+DBFiles[i],OutputFileName,OUTPUT_PATH);
    	}
    	CmdPrompt("Completion of database processing",true);
    #else
    	CmdPrompt("The database has been preprocessed",true);
    #endif	
    	string undetectedFilePath;// = "input.txt";
    	cout<<"[*] Please enter the file path to be detected:";
    	cin>>undetectedFilePath;  	
        Dict.SegmentWords(undetectedFilePath,
    		undetectedFilePath.substr(0,undetectedFilePath.length()-4)+"_processed.txt","");
    	CmdPrompt("Pretreatment completed",true); 
    	system("pause");
        return 0;
    }
    
    //仅清洗了标点,未清洗停用词 
    void Dictionary::SegmentWords(string inputFileName,string outputFileName,string outputPath){
    	string promptMsg = "Begin word segmentation of <"+inputFileName+">";
    	CmdPrompt(promptMsg);
    	inputFileName = inputFileName;
    	fin.open(inputFileName.c_str());
    	outputFileName = outputPath+outputFileName;
    	fout.open(outputFileName.c_str());
    	stringstream buf;
    	buf << fin.rdbuf();
    	string content = buf.str();
    	fin.close();
    	content = filter(content);
    	unsigned char k1,k2;
    	string str;
    	for(int i=0;i<content.length();i++){
    		if(isChinese(content[i])){
    			k1 = content[i++],k2 = content[i];
    			str += k1,str += k2;
    		}else fout<<" ",splitSentence(str),str.clear();
    	}
    	if(!str.empty())splitSentence(str),str.clear();
    	fout.close(); 
    	promptMsg = "Complete word segmentation of <"+inputFileName+">";
    	CmdPrompt(promptMsg,true);
    	promptMsg = "Successfully output "+outputFileName;
    	CmdPrompt(promptMsg,true);
    	return;
    }
    
    //正向最大匹配法 
    void Dictionary::splitSentence(string str){
    	if(str.empty())return;
    	int k1,k2;
    	string _str;
    	for(int i=0;i<str.length();i+=2){
    		k1 = (unsigned char)str[i++] - S1;
    		k2 = (unsigned char)str[i--] - S2;
    		if(!~hash[k1][k2])fout<<str[i]<<str[i+1]<<endl;
    		else{
    			_str = str.substr(i+2);
    			while(!_str.empty()){//正向最大匹配法
    				int pos = BinarySearch(_str,hash[k1][k2]);
    				if((~pos)&&isWord(_str,hash[k1][k2],pos)){
    					fout<<str[i]<<str[i+1]<<_str<<endl;					
    					i += _str.length();
    					break;
    				}else _str = _str.substr(0,_str.length()-2);
    			}
    			if(_str.empty())fout<<str[i]<<str[i+1]<<endl;
    		}
    	}
    }
    
    //逆向最大匹配法  
    //void Dictionary::SegmentWords(string inputFileName,string outputFileName,string outputPath){
    //	string promptMsg = "Begin word segmentation of <"+inputFileName+">";
    //	CmdPrompt(promptMsg);
    //	ifstream fin;
    //	ofstream fout;
    //	stack<string> s;
    //	char cstr[LONGEST_WORDS_IN_PARA];
    //	string str,_str;
    //	int i,j,sp,ep;
    //	char ch;
    //	fin.open(inputFileName.c_str());
    //	outputFileName = outputPath+outputFileName;
    //	fout.open(outputFileName.c_str());
    //	while(fin.read(&ch,sizeof(char))){
    //		if(!isChinese(ch)){//μ±?°×?·?2?ê?oo×?,?aê?????×ó×?·?′ê′|àí
    //			if(!str.empty()){
    //				sp = 0,ep = str.length();
    //				while(sp < ep){//±éàú??×ó
    //					if(str.length() <= 2){//è?1?ê?μ¥×?
    //						cout<<"\t"<<str<<endl;
    //						s.push(str);
    //						if(!s.empty())str=_str,_str.clear();
    //						sp += 2;
    //					}
    //					else{
    //						i=(unsigned char)str[0]-S1,j=(unsigned char)str[1]-S2;
    //						if(hash[i][j] >= 0){//′êμ?óD?a??ê××?
    //							string word = str.substr(2,str.length()-2);
    //							int pos = BinarySearch(word,hash[i][j]);
    //							if((~pos)&&isWord(word,hash[i][j],pos)){//′ê?2?ú′êμ?à?
    //								s.push(wordList[hash[i][j]].key+word);
    //								sp += str.length();
    //								str = _str, _str.clear();
    //							}else{//′ê?22??ú′êμ?
    //								_str += str.substr(0,2);
    //								str = str.substr(2,str.length()-2);//è¥μ?×?ê××??2
    //								cout<<"\t"<<str<<endl;
    //							}
    //						}else{
    //							_str+=str.substr(0,2);
    //							str = str.substr(2,str.length()-2);
    //						}
    //					}
    //				}
    //			}
    //			str.clear();
    //			while(fin.read(&ch,sizeof(char))&&!isChinese(ch));//str+=ch;
    //			fout<<str<<endl;
    // 			str += ch;
    //			fin.read(&ch,sizeof(char));
    //			str += ch;
    //		}
    //		else{//ê?oo×?μ??°?í?óè?str
    //			str += ch;
    //			fin.read(&ch,sizeof(char));
    //			str += ch;
    //		}
    //	}
    //	while(!s.empty())fout<<s.top()<<endl,s.pop();
    //	fin.close();
    //	fout.close(); 
    //	promptMsg = "Complete word segmentation of <"+inputFileName+">";
    //	CmdPrompt(promptMsg,true);
    //	
    //	promptMsg = "Successfully output "+outputFileName+" to "+outputPath;
    //	CmdPrompt(promptMsg,true);
    //}
    

    init.h

    #include<string>
    #include<vector>
    #include<iostream>
    #include<fstream>
    #include<io.h>
    using namespace std;
    常量定义// 
    const int CMD_LINE_CNT = 110;								//CMD每行输出的字符
    const string DATABASE_PATH = ".\\databases\\";				
    const string DICT_FILE_NAME = "dictionary.txt";
    const string OUTPUT_PATH = ".\\databases_processed\\";
    const int LONGEST_WORDS_IN_PARA = 100;						//段落最长字数
    const int S1 = 0XB0,S2 = 0XA1,E1 = 0XF8,E2 = 0XFF;			//ANSI汉字区编码 
    ///数据结构// 
    struct Second{
    	string key;												//词尾(不含字)
    	Second *next;
    	Second(string k = "",Second *n = 0):key(k),next(n){}
    };
    struct Head{
    	int size;
    	string key;												//字
    	vector<Second*>tail;									//词尾指针
    	Head(string k = "",int s = 0):key(k),size(s){}
    };
    class Dictionary{
    private:
    	ifstream 		fin;
    	ofstream 		fout;
    	ifstream 		fdict;
    	int 			hash[E1-S1][E2-S2];						//字的标号
    	vector<Head> 	wordList;								//字的词尾表
    	void 			LoadDict();
    	int 			GetNum();
    	void 			AddWord(string str,int k);				//将词尾加入对应字的词尾表
    	void 			InsertWord(string str,int k);			//词尾是按照词的字数升序插入(无字典序)
    	bool			isWord(string str,int k,int t);
    	bool 			isChinese(char ch);
    	void 			splitSentence(string str); 
    public:
    	Dictionary(string dictFileName);
    	int 			BinarySearch(string str,int k);
    	void 			SegmentWords(string inputFileName,string outputFileName,string outputPath); 
    };
    ///功能函数/// 
    inline void 		CmdPrompt(string str,bool checked = false); 
    vector<string> 		GetListOfDatabaseFile(string tPath); 
    string 				filter(string str);
    //bool			isEC(char ch);
    //void			skipMeaningless(string& str,stack<string>& s);
    //函数实现///
    inline void CmdPrompt(string str,bool checked){
    	cout<<(checked?"[*] ":"[+] ")<<str;
    	if(checked){
    		if(str.length()<CMD_LINE_CNT){
    			for(int i=0;i<CMD_LINE_CNT-str.length()-4;i++)putchar('.');
    			cout<<"[OK]";
    		}
    	} 
    	else if(str.length()<CMD_LINE_CNT){
    		for(int i=0;i<CMD_LINE_CNT-str.length();i++)putchar('.');
    	}
    	putchar('\n');
    } 
    
    vector<string> GetListOfDatabaseFile(string tPath){
    	long hFile = 0;
    	struct _finddata_t fileInfo;
    	string pathName,exdName,tFileName;
    	vector<string> DBFiles;
    	if(!~(hFile = _findfirst(pathName.assign(tPath).append("\\*.txt").c_str(),&fileInfo)))return DBFiles;
    	do{
    		tFileName = fileInfo.name;
    		DBFiles.push_back(tFileName);
    	}while(!_findnext(hFile,&fileInfo));
    	_findclose(hFile);
    	return DBFiles; 
    }
    
    #define PUNC_LEN 11
    const string punc[]={"。",";",",","!","…","—","“","”","《","》","?",":"}; 
    string filter(string str){
    	string::size_type len = str.length();
    	for(int i=0;i<PUNC_LEN;i++){
    		string::size_type pos = 0;
    		while((pos=str.find(punc[i]))!=string::npos)
    			str.replace(pos,2," ");
    //		cout<<str<<endl;
    	}
    	return str;
    }
    
    Dictionary::Dictionary(string dictFileName){
    	CmdPrompt("Dictionary initialization");
    
    	memset(hash,-1,sizeof(hash));
    	wordList.resize(6768); //词库汉字个数
    	fdict.open(dictFileName.c_str());
    
    	CmdPrompt("Dictionary initialization completed",true);
    
    	LoadDict();
    }
    
    void Dictionary::LoadDict(){
    	CmdPrompt("Parsing the dictionary library, please wait a moment");
    
    	char cstr[LONGEST_WORDS_IN_PARA];
    	string str;
    	int i,j,k = -1,length;
    	while(fdict.getline(cstr,LONGEST_WORDS_IN_PARA)){
    		i = (unsigned char)cstr[0]-S1;
    		j = (unsigned char)cstr[1]-S2;
    		hash[i][j] = ++k; 													//汉字id 
    		wordList[k].key = cstr;
    		length = GetNum();
    		for(i = 0; i < length;i++){
                fdict.getline(cstr,LONGEST_WORDS_IN_PARA);
    			str = cstr;
    			str = str.substr(2,str.length()-2);								//去'\n' 
    	    	AddWord(str,k);
    		}
    	}	
    
    	CmdPrompt("Dictionary library successfully completed parsing",true);
    }
    
    bool Dictionary::isChinese(char ch){
    	unsigned value = unsigned((unsigned char)ch);
    	return value>=S1&&value<E1;
    }
    
    bool Dictionary::isWord(string str,int k,int pos){
    	Second *tp = wordList[k].tail[pos];
    	while(tp){
    		if(tp->key == str)return true;
    		if(tp->key.length()>str.length()) break;
    		tp = tp->next;
    	}return false;
    } 
    
    int Dictionary::GetNum(){
    	char cstr[LONGEST_WORDS_IN_PARA];
    	fdict.getline(cstr,LONGEST_WORDS_IN_PARA);
    	int n = 0,len = strlen(cstr);
    	for(int i = 0;i < len;i++)
    		n = (n<<3)+(n<<1)+(cstr[i]-'0');
    	return n;
    }
    
    void Dictionary::AddWord(string str,int k){
    	if(str.length()>wordList[k].size){
    		wordList[k].size = str.length();
    		Second *t = new Second(str);
    		wordList[k].tail.push_back(t);
    	}else InsertWord(str,k);
    }
    
    //仅二分同长度的位置 
    int Dictionary::BinarySearch(string str,int k){
    	int len = str.length();
    	int L=0,R=wordList[k].tail.size()-1,M;
    	while(L <= R){
    		M = (R-L)/2+L;
    		if(wordList[k].tail[M]->key.size()==len)return M;
    		else if(wordList[k].tail[M]->key.size()<len)L = M + 1;
    		else R = M - 1;
    	}return -1;
    }
    
    void Dictionary::InsertWord(string str,int k){
    	int pos = BinarySearch(str,k);
    	if(!~pos){
    		int L = 0,R = wordList[k].tail.size()-1;
    		int len = str.length();
    		while(L <= R && len > wordList[k].tail[L]->key.size())L++;
    		wordList[k].tail.resize(wordList[k].tail.size()+1);
    		for(int i=R+1;i>L;i--)
    			wordList[k].tail[i] = wordList[k].tail[i-1];
    		Second *t = new Second(str);
    		wordList[k].tail[L] = t;
    	}else{//存疑? 
    		Second *pre,*t = wordList[k].tail[pos];
    		while(t){pre = t,t = t->next;}
    		pre->next = new Second(str);
    	}
    }
    

    核心代码如图,其他文件私信作者获取。

    • Python实现版
      main.py
    # -*- coding: utf-8 -*-  
    from utils import loadStopwords
    from utils import wordCount
    from utils import getFileList
    from utils import calcCosDis
    from utils import drawSimiHist
    from utils import drawWordCloud
    
    stopwords = loadStopwords() #加载停用词表
    undetectedFilePath = input("请输入要检测的文档路径:")
    termFreq = wordCount(undetectedFilePath,stopwords)
    similarity = {} 
    dataFiles = getFileList()
    for dataFile in dataFiles:
        corpusTermFreq = wordCount(dataFile,stopwords)
        similarity[dataFile] = calcCosDis(termFreq,corpusTermFreq)
        print("待检测文件与{}的余弦相似性为:{:.2f}%".format(dataFile,100*calcCosDis(termFreq,corpusTermFreq)))
    simiDoc = sorted(similarity.items(),key=lambda a:a[1],reverse=True)
    drawSimiHist(simiDoc) #画相似文献(Top10)的图
    text = open(undetectedFilePath,'r').read()
    drawWordCloud(text)
    

    settings.py

    # -*- coding: utf-8 -*-  
    class Settings():
        def __init__(self):
            self.databasePath = './databases/'   # 资料库
            self.stopwordsPath = './stopwords/'  # 停用词表
    

    utils.py

    # -*- coding: utf-8 -*-  
    import os
    import jieba
    import math
    import pygal
    from settings import Settings
    from wordcloud import WordCloud
    import matplotlib.pyplot as plt
    
    #获取基本配置
    init_setting = Settings()
    
    #获取资料库文件列表
    def getFileList(path = init_setting.databasePath):
        fileList = []
        for fileName in os.listdir(path):  
            file_path = os.path.join(path,fileName)  
            fileList.append(file_path)
        return fileList
    
    #加载停用词表
    def loadStopwords():
        resFiles = getFileList(path = init_setting.stopwordsPath)
        stopwords = []
        for resFile in resFiles:
            lines = open(resFile,"r").readlines()
            for line in lines:
                line = line.strip()
                if line not in stopwords:
                    stopwords.append(line) 
        return stopwords
    
    #对于文件进行分词并进行词频统计
    def wordCount(resFile,stopwords):
        counts = {}
        txt = open(resFile,"r").read()
        words = jieba.lcut(txt) #使用了jieba库的分词方法
        for word in words:
            if word not in stopwords:
                if len(word) == 1: #去单字和标点
                    continue
                else:
                    counts[word] = counts.get(word,0)+1
        dict = sorted(counts.items(),key=lambda a:a[1],reverse=True)
        return dict
    
    def getCommonVector(dict1,dict2):
        comVec = []
        for ch in range(len(dict1)):
            comVec.append(dict1[ch][0])
        for ch in range(len(dict2)):
            if dict2[ch][0] not in comVec:
                comVec.append(dict2[ch][0])
        return comVec
    
    def getTermVec(dict,comVec):
        TF = [0] * len(comVec)
        for ch in range(len(dict)):
            word = dict[ch][0]
            freq = dict[ch][1]
            i = 0
            while i < len(comVec):
                if word == comVec[i]:
                    TF[i] = freq
                    break
                else:
                    i = i + 1
        return TF
    
    #两个文档TF-IDF余弦相似度的计算 (适用于短文本)
    def calcCosDis(dict1,dict2):
        comVec = getCommonVector(dict1,dict2)
        vec1 = getTermVec(dict1,comVec)
        # print("文档1向量化得到的向量如下:{}".format(vec1))
        vec2 = getTermVec(dict2,comVec)
        # print("文档2向量化得到的向量如下:{}".format(vec2))
        length = len(vec1)
        B = 0
        i = 0
        while i < length:
            B = vec1[i]*vec2[i] + B
            i = i + 1
        A = 0
        A1 = 0
        A2 = 0
        i = 0
        while i < length:
            A1 = A1 + vec1[i]*vec1[i]
            i = i + 1
        i = 0
        while i < length:
            A2 = A2 + vec2[i]*vec2[i]
            i = i + 1
        A = math.sqrt(A1) * math.sqrt(A2)
        return float(B)/A
    
    def drawSimiHist(simiDoc):
        hist = pygal.Bar()
        hist.title = '相似文献汇总(Top 10)'
        x,y = [],[]
        for file in simiDoc:
            x.append(file[0][12:-4])
            y.append(file[1])
        hist.x_title = '相似文献'
        hist.y_title = '相似度'
        hist.x_labels = x[:10]
        hist.x_label_rotation = -45
        hist.add('文献相似度',y[:10])
        hist.render_to_file('相似文献汇总(Top 10).svg')
    
    def drawWordCloud(text):#text:空格隔开的词表
        mytext = jieba.lcut(text,cut_all=False)
        wt = " ".join(mytext)
        wc = WordCloud(
            background_color = 'white',
            max_words = 20,
            font_path = "simsun.ttf",
            max_font_size = 50,
            random_state = 30,
        )
        wordcloud = wc.generate(wt)
        plt.imshow(wordcloud)
        plt.axis('off')
        plt.show()
    
    展开全文
  • 请采用相应的数据结构实现大整数的加、减、乘、除和指数运算,以及大整数的输入和输出。 【基本要求】 1.要求采用链表来实现大整数的存储和运算,不允许使用标准模板类的链表类(list)和函数。 同时要求可以从键盘...
  • 数据结构与算法实训课程实训报告XXXX学院课程实训报告课程名:数据结构与算法实训学号:姓名:班级:指导老师:时间:设计任务、要求及所用软件环境(1)设计任务:成绩管理:设计一个程序进行学生成绩管理。...

    《数据结构与算法实训课程实训报告

    XXXX学院课程实训报告

    课程名:数据结构与算法实训

    学号:

    姓名:

    班级:

    指导老师:

    时间:

    设计任务、要求及所用软件环境

    (1)设计任务:

    成绩管理:设计一个程序进行学生成绩管理。假设对某个班的学生5门课程的学习成绩进行管理,实现以下功能:(1)求每门课程的平均成绩;(2)输出每门课程成绩优秀(>=90分)的学生名单及成绩;(3)输出只有一门课程不及格的学生名单及每门成绩;(4)对5门课程中可以按照任一门课程的成绩进行排序。

    (2)设计要求: 1)学生成绩采用链表存储方式;

    2)学生人数和学生的成绩从键盘输入;

    3)排序方法可以任选一种。

    (3)所用软件环境:Microsoft Visual C++ 6.0 (二级C语言专用版)

    问题的模型化描述以及求解问题的算法简要描述

    通过开发一个学生成绩管理信息系统,掌握与数组有关的算法、函数的调用、结构体类型变量的定义和使用,提高实际运用能力。

    开始进入登录界面,根据输入的操作选项,可分别进行各项操作:可完成学生成绩信息的输入,求平均成绩,查询每门课程成绩优秀(>=90分)的学生名单及成绩,查询只有一门课程不及格的学生名单及每门成绩,对5门课程中可以按照任一门课程的成绩进行排序等功能。

    所选择的存储结构及基本运算、设计的模块构成、各模块的简要说明、流程图、调用关系表。

    用Microsoft Visual C++ 6.0 (二级C语言专用版)编写,完成学生成绩的链表存储,任意学生成绩的插入、查询、排序。

    (1)输入形式和输入范围:建立成绩管理时,需要指定元素个数和每个元素的值,然后按元素的顺序建立一个链式成绩管理系统;排序时,需要确定排序方法;查找操作时需要元素的范围;在所有输入中,元素的值都是整数。

    (2)输出的形式:在所有操作中都显示操作是否正确以及操作后链表的内容。

    设计的模块构成:

    4.程序组成

    基本操作及流程图:

    (1)结构图:

    (2)函数average()的流程图:

    (3)函数Excellent()的流程图:

    所设计软件的组成(程序文件)及使用说明。

    main():主函数

    average():求课程的平均成绩

    Excellent():查找所有个人平均分超过90分的学生,并将其学号输出

    Fail():查找有成绩不及格的学生,并输出其信息

    Sort():对班级学生按某门课程成绩排名

    各函数间关系如下:

    average()

    Excellent()

    main() Fail()

    Sort()

    5.程序清单

    程序清单:

    #include"stdio.h"

    #include"stdlib.h"

    #define NUM 5 //课程数

    #define NULL 0

    typedef struct node //学生的结构体定义

    {

    int id; //学号

    char name[16]; //姓名

    int subject[NUM]; //课程数据组

    float aver; //学生个人课程平均分

    struct node *next;

    }student;

    student *head = NULL; //head为学生连表的头指针

    int n;

    void Sort() //对班级学生按某门课程成绩排名

    {

    int j; //课程序号

    student *p1, *p2, *p3;

    printf("请输入需要排序的课程序号(1~5):\n");

    scanf("%d",&j);

    //由大到小排序,排序方法采用冒泡排序法

    if(head != NULL)

    {

    p1=p2=p3=head;

    while(p2->next!=NULL)

    {

    p1=p2=p3=head;

    p2=p1->next; //将p2移到p1下一个节点

    //如果前一个节点大于下一个节点,p1和p2都往下移一个节点,p3移到p1原本指着的节点

    while(p2->next!=NULL && p1->subject[j-1] >= p2->subject[j-1])

    {

    p3=p1;

    p1

    展开全文
  • 整个视频打包下载地址:史上最全的数据结构视频教程系列分享之《数据结构(邓俊辉)》,转载请保留出处和链接! 更多优秀资源请访问:我是码农 数据结构是计算机专业的必修课程之一,也是编写高性能算法的必要前提...
  • 整个视频打包下载地址:史上最全的数据结构视频教程系列分享之《(东南大学 王茜)数据结构 (64讲)》,转载请保留出处和链接!...数据结构课程的主要目的是介绍一些常用的数据结构,阐明数据结构内在的逻辑关系...

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 242
精华内容 96
关键字:

优秀的数据结构课程设计

数据结构 订阅