汽车牌照排序与查找课程设计报告.doc

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
合肥学院 计算机科学与技术系 课程设计报告 2009 ~20010 学年第 二 学期 课程 数据结构与算法 课程设计名称 汽车牌照的排序与查找问题 学生姓名 闵晓龙 学号 0804012025 专业班级 08计本(2)班 指导教师 王昆仑 20010年6月 题目:汽车牌照的排序与查找问题,实现对汽车牌照按多关键字排序及快速查找。其中汽车牌照有汉字、字母和数字混合排列,例如:皖A12345。使用基数排序方法进行排序,并在排序的基础上,利用二分查找思想实现对汽车牌照按多关键字的查找。 一、问题分析和任务定义 此程序要完成如下要求:选择一种数据结构来存储每个车辆的信息(如车主姓名,汽车等),在此基础上进行基数排序,而汽车牌照是由汉字、字母以及数字组成,即多关键字,其中字母和数字的比较是比较容易实现的,考虑到汉字的存储等各方面原因,对汉字的排序并不是很容易就能完成的,故不能直接对汉字排序。经过分析可知,汽车牌照中的汉字是各个省市自治区的简称,共有34个。这些汉字可以根据其汉语拼音的规则进行排序,然后预先存放到字符串数组中,这样每个汉字就对应着一个数组下标,只要对数组下标进行排序就可以实现对汉字的排序了。在对车牌号进行查找时,先对车牌号进行排序,然后将车牌号中的汉字及字符均转换成一个长整形数据存储在一个预先定义的一个一维数组中并把需要查找的车牌号码也转换成一个长整型数据,然后在原先的一维数组中使用二分查找来查找该车牌号码对应的车辆信息。 二、数据结构的选择和概要设计 1、数据结构的选择: 程序要求实现对汽车牌照的排序与查找,而如果仅仅进行牌照的排序与查找,则显得程序没有太大的实用性,所以考虑在程序中加入例如车主的姓名以及车子的品牌等内容来增加程序的实用性。为了能够更好的完成这些功能,在这里选用链表来存储所有车辆的信息,用链表中的单个节点来存储一辆汽车的信息,而对应的各个节点的域中则存储其对应的车辆信息(如车牌号码、车主姓名、车的品牌等信息)。在存储汽车牌照中的汉字时,由于汉字在内存中占用两个字节,需要使用字符串数据来存储。其中的26个字母则使用一个一维字符数组来存储。车主的姓名及车子的品牌则使用一维字符数组来存储。在基数排序时,每趟的数据收集由两个链队列来完成,链队列的个数为基数的个数,两个链队列的队列指针分别指向每组链队列的队头和队尾。 2、概要设计 为了实现上述功能,需要使用一下函数: main():主函数 Setlist():添加车辆函数 Distribute():进行基数排序每一趟的分配函数 Collect():进行基数排序每一趟的收集函数 find():二分查找函数 menu():菜单函数 print():输出所有车辆信息函数 insort():基数排序函数 图1 各函数间关系如下: 图2 主函数main()流程图 图3 添加车辆函数SetList(p)流程图 图4 排序子函数paixu(p)的流程图 图5 查找子函数find(p)的流程图 三、详细设计和编码 1、文件的的读取: 在这个程序当中采取了文件的读取,主要实现的功能是从文件当中读取所要处理的数据,即为车牌的信息资料。如一个车牌的信息包括:车牌号(皖A12345)、车主姓名(张三)和车的品牌(宝马)三个内容,在程序的操作过程过程是对文件进行一个一个读取,用fscanf(f1,”%s%s%s”,p-key,p-name,p-paizi)语句来实现,就是将车牌号(皖A12345)读入到p-key当中,将车主姓名读入到p-name当中,将车的品牌读入到p-paizi当中。读入之后就可以对其进行操作了。由于文件尾默认为-1结束,所以对文件读取的控制采用while(fscanf(f1,%s%s%s,p-key ,p-name ,p-paizi)!=EOF)来实现 还有就是读入方法,这个程序是采用链表的存储方式来存取信息的,所以读入方式可以采取头插法建立链表的方法来对每个文件进行读取。头插法的具体操作为 head=NULL; p=(Rnode *)malloc(sizeof(Rnode)); p-next=NULL; while(fscanf(f1,%s%s%s,p-key,p-name,p-paizi)!=EOF) { if(head==NULL) { l=head=p; } else{ l-next=p; l=p;} p=(Rnode

文档评论(0)

li455504605 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档