ImageVerifierCode 换一换
格式:DOCX , 页数:30 ,大小:102.45KB ,
资源ID:6486253      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6486253.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告册.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告册.docx

1、数据结构课程设计报告册 数据结构课程设计实验报告题 目 有关查找的操作 学 院 专 业 信息管理和信息系统 班 级 学 号 学生姓名 同组成员 指导教师 编写日期 2011年7月8日 目 录一、问题描述 21、顺序表的查找问题描述 22、有序表的查找问题描述 23、哈希表的查找问题描述 34、二叉树排序数的查找问题描述 35、界面设计模块问题描述 3二、问题分析 4三、数据结构描述 4四、算法设计 61.程序功能模块图 62. 算法设计 6五、详细程序清单 11六、程序运行结果 31七、使用说明 32八、心得体会 32一、问题描述1、顺序表的查找问题描述顺序查找又称线性查找,它是一种最简单、最

2、基本的查找方法。它从顺序表的一端开始,依次将每一个数据元素的关键字值与给定Key进行比较,若某个数据元素的关键字值等于给定值Key,则表明查找成功;若直到所有数据元素都比较完毕,仍找不到关键字值为Key的数据元素,则表明查找失败。2、有序表的查找问题描述 所谓“折半”也称为“二分”,故二分查找又称为折半查找。作为二分查找对象的数据必须是顺序存储的有序表,通常假定有序表是按关键字值从小到大排列有序,即若关键字值为数值,则按数值有序,若关键字值为字符数据,则按对应的Unicode码有序。二分查找的基本思想是:首先取整个有序表的中间记录的关键字值与给定值相比较,若相等,则查找成功;否则以位于中间位置

3、的数据元素为分界点,将查找表分成左、右两个子表,并判断待查找的关键字值key是在左子表还是在右子表,再在左或右子表中重复上述步骤,直到找待查找的关键字值为key的记录或子表长度为0.3、哈希表的查找问题描述在哈希表上进行查找的过程和哈希表构造的过程基本一致。给定要查找的关键字K的值,根据构造哈希表时设定的哈希函数求得哈希地址,若此哈希地址上没有数据元素,则查找不成功;否则比较关键字,若相等,则查找成功;若不相等,则根据构造哈希表时设置的处理冲突的方法找下一个地址,直至某个位置上为空或关键字比较相等为止。从哈希表的查找过程可见,虽然哈希表是在关键字和存储位置之间直接建立了映像,然而由于冲突的产生

4、,哈希表的查找过程仍然是一个和关键字比较的过程。因此,仍需用平均查找长度来衡量哈希表的查找效率。查找过程中与关键字比较的次数取决于构造哈希表时选择的哈希函数和处理冲突的方法。哈希函数的“好坏”首先影响出现冲突的频率,假设哈希函数是均匀的,即它对同样一组随机的关键字出现冲突的可能性是相同的。因此,哈希表的查找效率主要取决于构造哈希表时处理冲突的方法。4、二叉树排序数的查找问题描述在顺序表的3中查找方法中,二分查找具有最高的查找效率,但是由于二分查找要求表中记录按关键字有序,且不能用链表做存储结构,因此当表的插入、删除操作非常频繁时,为维护表的有序性,需要移动表中很多记录。这种由移动记录引起的额外

5、时间开销,就会抵消二分查找的优点。这里讨论的不仅是二叉排序树具有二分查找的效率,同时又便于在查找表中进行记录的增加和删除操作。5、界面设计模块问题描述设计一个菜单式界面,让用户可以选择要解决的问题,同时可以退出程序。界面要求简洁明了,大方得体,便于用户的使用,同时,对于用户的错误选择可以进行有效的处理。二、问题分析本人负责的是为用户设计菜单界面,使用户可以根据菜单进行选择其中的某个问题进行处理。对于一个菜单界面,首先要求界面简单明了,使得用户可以轻松通过界面知道如何获取自己想要的操作。其次,我们不能保证用户每次的选择都是有效的,即用户的选择是在我们提供的服务范围之内,所以要设计容错操作,即当用

6、户的选择超出我们提供的范围时,提示用户重新选择。最后,要保证用户选择相应的操作后,程序能正确的按照用户的选择运行下去,完成用户的要求。三、数据结构描述 public SeqList(int maxSize) this.r = new RecordNodemaxSize; / 为顺序表分配maxSize个存储单元 this.curlen = 0; / 置顺序表的当前长度为0 / 求顺序表中的数据元素个数并由函数返回其值 public int length() return curlen; / 返回顺序表的当前长度 public int getCurlen() return curlen; pub

7、lic void setCurlen(int curlen) this.curlen = curlen; 4、算法设计1.程序功能模块图 2. 算法设计 public int binarySearch(Comparable key) if (length() 0) int low = 0, high = length()-1 ; /查找范围的下界和上界 while (low 0) /给定值更小 high = mid - 1; /查找范围缩小到前半段 else low = mid + 1; /查找范围缩小到后半段 return -1; /查找不成功 public class Search sta

8、tic SeqList ST=null; public static void createSeachList() throws Exception int maxSize=20; ST=new SeqList(maxSize); int curlen; System.out.print(请输入中文字的长度:); Scanner sc=new Scanner(System.in); curlen=sc.nextInt(); KeyType k= new KeyTypecurlen; System.out.print(输入数组:); for(int i=0;icurlen;i+) ki=new

9、KeyType(sc.nextInt(); for(int i=0;icurlen;i+) RecordNode r=new RecordNode(ki); ST.insert(i, r); /从1号存储单元开始存放数据元素 public static void main(String args) throws Exception createSeachList(); System.out.print(请输入要查找的关键字:); Scanner sc=new Scanner(System.in); KeyType key1=new KeyType(sc.nextInt(); KeyType k

10、ey2=new KeyType(sc.nextInt(); System.out.println(binaryseqSearch(+key1.getKey()+)=+ST.binarySearch(key1); System.out.println(binaryseqSearch(+key2.getKey()+)=+ST.binarySearch(key2);五、详细程序清单1、xuanze类import java.util.Scanner;public class xuanze static SeqList ST=null; static void createSeachList() thr

11、ows Exception int maxSize=20; ST=new SeqList(maxSize); int curlen; System.out.print(Please input table length:); Scanner sc=new Scanner(System.in); curlen=sc.nextInt(); KeyType k= new KeyTypecurlen; System.out.print(Please input keyword sequence:); for(int i=0;icurlen;i+) ki=new KeyType(sc.nextInt()

12、; for(int i=0;icurlen;i+) RecordNode r=new RecordNode(ki); ST.insert(i, r); /从1号存储单元开始存放数据元素 static HashTable ht=null;public static void main(String args) throws Exception System.out.println(/*/); System.out.println( 1.顺序表的查找操作 ); System.out.println( 2.有序表的查找操作 ); System.out.println( 3.哈希表的查找操作 ); S

13、ystem.out.println( 4.其它查找算法 ); System.out.println( 5.退出 ); System.out.println(/*/); System.out.println(请选择1-5,谢谢!); Scanner sc=new Scanner(System.in); while(true) switch(sc.nextInt() case 1: createSeachList(); System.out.print(Please input search keyword:); Scanner sc1=new Scanner(System.in); KeyTyp

14、e key1=new KeyType(sc.nextInt(); KeyType key2=new KeyType(sc.nextInt(); System.out.println(seqSearch+key1.getKey()+)=+ST.seqSearch(key1); System.out.println(seqSearch(+key2.getKey()+)=+ST.seqSearch(key2); System.out.println(如需其他操作,请继续选择,如不需要,请按5,谢谢!); break; case 2: createSeachList(); System.out.pri

15、nt(Please input search keyword:); Scanner sc2=new Scanner(System.in); KeyType key3=new KeyType(sc.nextInt(); KeyType key4=new KeyType(sc.nextInt(); System.out.println(binaryseqSearch(+key3.getKey()+)=+ST.binarySearch(key3); System.out.println(binaryseqSearch(+key4.getKey()+)=+ST.binarySearch(key4);

16、System.out.println(如需其他操作,请继续选择,如不需要,请按5,谢谢!); break; case 3:String name =Wang,Li,Zhang,Liu,Chen,Yang,Huang,Zhao,Wu,Zhou,Du; HashTable ht=new HashTable(7); String elem1,elem2; System.out.print(插入元素:); for(int i=0;iname.length;i+) ht.insert(namei); System.out.print(namei+); System.out.print(n原哈希表:);

17、ht.printHashTable(); elem1=name2; System.out.print(查找+elem1+,+(ht.contain(elem1)?:不)+成功); elem2=san; System.out.print(查找+elem2+,+(ht.contain(elem1)?:不)+成功); System.out.print(删除+elem1+,+(ht.remove(elem1)?:不)+成功); System.out.print(删除+elem2+,+(ht.remove(elem2)?:不)+成功); System.out.println(新哈希表:); ht.pri

18、ntHashTable(); System.out.println(如需其他操作,请继续选择,如不需要,请按5,谢谢!); break; case 4: BSTree bstree=new BSTree(); intk=50,13,63,8,36,90,5,10,18,70; String item=Wang,Li,Zhang,Liu,Chen,Yang,Huang,Zhao,Wu,Zhou; KeyType key=new KeyTypek.length; ElementType elem=new ElementTypek.length; System.out.println(原序列:);

19、for(int i=0;ik.length;i+) keyi=new KeyType(ki); elemi=new ElementType(itemi); if(bstree.insertBST(keyi,elemi) System.out.print(+keyi+,+elemi+); System.out.println(n中根遍历二叉排序树:); bstree.inOrderTraverse(bstree.root); System.out.println(); KeyType keyvalue=new KeyType(); keyvalue.setKey(63); RecordNode

20、found=(RecordNode)bstree.searchBST(keyvalue); if(found!=null) System.out.println(查找关键码:+keyvalue+,成功!对应姓氏为:+found.getElement(); else System.out.println(查找关键码:+keyvalue+,失败!); keyvalue.setKey(39); found=(RecordNode)bstree.searchBST(keyvalue); if(found!=null) System.out.println(查找关键码:+keyvalue+,成功!对应姓

21、氏为:+found.getElement(); else System.out.println(查找关键码:+keyvalue+,失败!); keyvalue.setKey(13); found=(RecordNode)bstree.removeBST(keyvalue); if(found!=null) System.out.println(删除关键码:+keyvalue+,成功!对应姓氏为:+found.getElement(); else System.out.println(删除关键码:+keyvalue+,失败!); System.out.println(n删除关键码:+keyval

22、ue+,后的中根遍历序列:); bstree.inOrderTraverse(bstree.root); System.out.println(); System.out.println(如需其他操作,请继续选择,如不需要,请按5,谢谢!); break; case 5: System.out.println(已成功退出!); return; 2、Record Node类 class RecordNode private Comparable key; /关键字 private Object element; /数据元素 public Object getElement() return el

23、ement; public void setElement(Object element) this.element = element; public Comparable getKey() return key; public void setKey(Comparable key) this.key = key; public RecordNode(Comparable key) /构造方法1 this.key = key; public RecordNode(Comparable key, Object element) /构造方法2 this.key = key; this.eleme

24、nt = element; public String toString() /覆盖toString()方法 return + key + , + element + ; 3、KeyType类class KeyType implements Comparable private int key; /关键字 public KeyType() public KeyType(int key) this.key = key; public int getKey() return key; public void setKey(int key) this.key = key; public int co

25、mpareTo(KeyType another) /覆盖Comparable接口中比较关键字大小方法 int thisVal = this.key; int anotherVal = another.key; return (thisVal anotherVal ? -1 : (thisVal = anotherVal ? 0 : 1); 4、SeqList类class SeqList private RecordNode r; /顺序表记录结点数组 private int curlen; /顺序表长度,即记录个数 / 顺序表的构造方法,构造一个存储空间容量为maxSize的顺序表 publi

26、c SeqList(int maxSize) this.r = new RecordNodemaxSize; / 为顺序表分配maxSize个存储单元 this.curlen = 0; / 置顺序表的当前长度为0 / 求顺序表中的数据元素个数并由函数返回其值 public int length() return curlen; / 返回顺序表的当前长度 public int getCurlen() return curlen; public void setCurlen(int curlen) this.curlen = curlen; / 在当前顺序表的第i个结点之前插入一个RecordNo

27、de类型的结点x /其中i取值范围为:0ilength()。 /如果i值不在此范围则抛出异常,当i=0时表示在表头插入一个数据元素x, /当i=length()时表示在表尾插入一个数据元素x public void insert(int i, RecordNode x) throws Exception if (curlen = r.length) / 判断顺序表是否已满 throw new Exception(顺序表已满); if (i curlen) / i小于0或者大于表长 throw new Exception(插入位置不合理); for (int j = curlen+1; j i; j-) rj = rj - 1; / 插入位置及之后的元素后移 ri = x; / 插入x this.curlen+; / 表长度增1 5、seqSearch类(顺序查找算法)public int seqSearch(Comparable key) int i=0,n=length(); while(in&ri.getKey().compareTo(key)!=0) i+; if(in) return i; else return -1; 6、binarySearc

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1