- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《算法与数据结构
CQJT UNIVERSITY
课程实习报告
题 目: 重名剔除(Deduplicate)
学生姓名 席源江
学生学号 631306020114
专业班级 电子信息工程1班
指导老师 刘君
完 成 日 期 2015/5/16
一、需求分析
本程序要求采用散列算法,输入提名清单的数目(不要超过113)和每一项提名(字符数不要超过20)。
输出重复的提名,若有多次重复提名,只输出一次重复的提名,并将无重复提名的清单输出。
程序所要达到的功能是重名剔除并无重名输出。
二、概要设计
抽象数据类型
为实现上述程序的功能,应以整数存储用户的输入的提名清单数目,用字符串接受清单名字及输出无重名清单。
算法的基本思想
根据题目要求,采用散列法来保存清单。散列法分为两部分:
散列函数:除留余数法. 我特意将清单的数目记为113,113是素数,运用该方法比较好,我们的关键字是一个字符串,我们首先求出字符串的长度,即所含字符的个数,接着把每个字符的ASCII码累加到无符号整量h上,因为怕h超出范围,故h为无符号长整形,并在每次累加前把h的值左移3个二进制;
处理冲突的方法:开放定址法 冲突的处理并未考虑堆积,本例数目较少,故开放定址法是合适的。
程序的流程
程序由三个模块组成:
输入模块:主函数中我们接受数目和每一项清单名字。
计算模块:通过函数hash找出重名的清单名字,并将清单散列,该模块包括了部分输出的模块。
输出模块:部分包含在hash函数中,另一部分是将无重名的清单输出。
三、详细设计
物理数据类型
题目要求输入的正整数的取值范围在(0, 113)之间,且每一项的名字最多为20个字符,为了能够存储,采用C语言中的长整型定义变量。
typedef long elemtype
算法的时空分析
算法的运行时间依赖与待输入的数目和每项清单名字的字符,若设它们分别为n、m,则可以大致求出时间为O(nm)。
输入和输出的格式
输入
Please input the length of nomination list(less than 113). //提示
等待输入
Then input the nomination(each nomination is given in each line,each nominationlength less than 20 characters). //提示
等待输入
输出
The duplication of name is: //提示
输出结果
The list: //
输出结果
四、调试分析
五、测试结果
实验心得
通过这次的实验,让我对散列有了一定的了解,散列是我之前没有学过的,此次通过视频以及查阅相关书籍学习,编程过程中遇到了不少困难,但在不断努力下,最终一一解决,由此可见,坚持才是最后的胜利。我们会在今后的学习中积极搜集知识,自己刻苦学习。
七、附录
程序部分:
// last.cpp : Defines the entry point for the console application.
//
#include stdafx.h
#include string.h
#include iostream.h
#include stdio.h
#include stdlib.h
void hash(struct node array1[],struct node array2[],int n,int m);
void output(char a[]);
void list(struct node array2[]);
int trans;
typedef char elemtype;
struct node
{
elemtype s[20];
int pos;
int flag;
};
void hash(struct node array1[],struct node array2[],int n,int m)
{
int len,i,j,buff,initial;
unsigned long h=0;
coutThe
您可能关注的文档
最近下载
- 牛奶过敏的诊断、管理和预防意见书(2024).pdf VIP
- 西安2初一新生分班(摸底)数学模拟考试(含答案).doc VIP
- 2025年新版人教版四年级上册英语 四上Unit 4 Helping in the community单元整体教学设计.pdf VIP
- 中国碳化钨项目创业投资方案.docx VIP
- 内能的利用的学案.doc VIP
- 建筑与市政工程防水通用规范试题(含答案).doc
- 《中国儿童生长激素使用情况研究》.pdf VIP
- 万华化学经营分析报告.docx VIP
- 2025年中国PVB中间膜项目商业计划书.docx VIP
- 政府间国际科技创新合作重点专项2017年第二批项目.doc VIP
文档评论(0)