用C语言实现查找算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用C语言实现查找算法
学生姓名:*** 指导老师:***
摘要查找同人们每天的生活和工作息息相关,例如从电话号码本中查找某个电话号码,从成绩表中查找某个同学的成绩,从图书目录中查找某本书,从工资表中查找工资,从铁路时刻表中查找铁路时刻等。对于小规模的查找可以使用人力,对于大规模的查找活动使用计算机会更快、更准确【1】。因此,理解并会应用各种查找算法非常重要,本程序融合顺序查找,二分查找,二叉排序树,哈希算法等多种查找方法,我们可以从中比较并依据不同数据的特点使用不同的查找方法,具有较高的实用价值。C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。既可用于系统软件的开发,也适合于应用软件的开发。此外,C语言还具有效率高,可移植性强等特点。因此,用C语言实现查找算法具有很高的实用性。
本程序主要包括四大块包括:(1)顺序查找;(2)二分查找;(3)二叉排序树;(4)哈希查找。
本程序根据实际生活的需要,满足各方的要求,因此,运用空间还可进一步提高。在课程设计中,程序的开发平台是Windows XP,程序设计语言采用C 语言,程序应用平台为Windows 2000/XP。采用自定义函数、数组和结构体来解决管理系统中的各种问题。程序经过调试和修改,基本实现了设计目标。
关键词程序设计;自定义函数;数组;结构体;查找算法
1 引言
1.1课题背景
在现代计算机应用中,程序设计占据重要地位,如学生成绩管理、万年历、网上问卷调查等等。用C语言实现查找算法要求实现顺序查找、二分查找、二叉排序树、哈希查找等多种查找方法。如何解决这些问题成为我研究的课题之一。作为一名学计算机的学生,光有理论知识是远远不够的,更重要的是我们的实际动手能力。学习计算机,理论能够指导我们的实践,能让我们在实践的应用过程中得心应手;反过来说,实践也能使我们对理论知识有更深刻的理解和体会,会促使我们更好的发现问题和解决问题,同时也使我在专业知识上的视野得到了很好的扩展。因此,综上所述,学计算机,最好的方法就是需要理论结合实际。而我们最缺乏的就是实践,因此,本次的课程设计给我们提供了一个很好的实践的机会。
程序设计实践课程设计是非常重要的综合性实践教学环节。通过该课程设计,进一步熟悉了软件开发的基本理论知识,了解了软件设计的一般步骤,掌握了软件开发的常用技巧,并且学会了更多的解决软件开发过程常见问题的方法。运用所学的数据结构的基本原理、基本知识和基本技巧,解决某一具体的实际问题,培养我们综合分析和解决问题的能力,为今后分析、设计、开发和调试程序打下坚实的基础【3】。
1.2程序设计目的
1、巩固面数据结构的基本理论知识
2、进一步熟悉Visual C++6.0的编程环境,掌握相关控件的使用方法
3、更深层次的理解自定义函数、数组和各种查找算法
4、增强实践操作能力
1.3程序设计内容
用C语言实现各种查找算法的想法来源于生活和工作中的需要。如今,随着社会的飞速发展,信息时代改变着人们的各种生活方式。人们的联系信息、联系方式变得复杂而多样化,人们的日常生活中也要求各类查找,由于传统的查找不方便、功能单一等缺陷已经无法胜任它的“时代使命”,因而,用计算机编程来实现各种查找方法已成为时代的迫切需要。此程序只是一个初步构想,可以将其应用到人们日常生活中的各种查找,很有现实意义。
用C语言实现各类查找,它的内容对于电子产品来说是至关重要的,它能够为电子产品的使用者提供充足的信息和快捷的查询手段。用Visual C++6.0构建的各种查找方法,包括顺序查找、二分查找、二叉排序树、哈希查找等。本程序设计合理、操作方便、运行稳定、功能完备,具有较高的实用价值。
2 设计思路与方案
2.1查找算法整体结构
系统需要实现顺序查找、二分查找、二叉排序树、哈希查找四个模块,其中这四个模块又由其子程序实现,如图2.1所示:
图2.1 功能模块图
2.2 设计方案
编写一个程序,模拟查找算法管理系统。该系统主要有以下几个功能:(1)顺序查找子模块的实现:
顺序查找包括建立顺序表、输入表中数据、打印查找表、用哨兵查找法查找等几个内容,通过自定义函数,最终实现顺序查找的目的。
(2)二分查找法的实现:
二分查找法又叫折半查找法,它需要把无序表变为有序表(用Sort(SSTable *table )函数实现)之后再进行查找,设定3个变量——low、mid和high,以实现二分查找法的功能。折半查找过程是以处于区间中间位置记录的关键字和给定值比较,若相等,则查找成功,若不等,则缩小范围,直至新的区间中间位置记
录的关键字等于给定值或者查找区间的大小小于零时为止【2】。
(3)二叉排序树的实现:
从主菜单进入二叉排序树功能,用户可根据提示输入相应信息,包括二叉排序树的建立、输出、插入、删除、查找等,可以充分利用二叉排序树的特点,实现查找的功能,可以提高查找效率。
(4)哈希查找的实现:
从主菜单进入哈希查找功能,根据除留余数法构建哈希表,用二次探测法解决冲,用SearHash(HashTable H,int key,int *p)函数进行查找。
3 详细设计
3.1 主菜单模块
通过四个自定义函数——printSeq()、printBin()、printTree()、printHash()——简化了主菜单,使其更加简洁明了,同时采用模块化的结果,是程序更加清晰,增强了它的易读性。
3.2 顺序查找子模块
首先输入元素个数,然后输入这几个元素的值,用户再输入需要查询的数字即可得出查找结果,如果查找成功则显示出关键字所在的位置,否则显示“查找失败,表中无此数据”,如图3.2所示:
图3.2