线性表的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
┊
┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
目录
一、设计目的 (1)
二、程序流程 (2)
三、功能介绍 (3)
四、设计步骤 (4)
五、设计总结 (7)
六、参考文献 (8)
七、附录 (9)
┊┊
┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊一.设计目的
掌握数据结构的基础技术,学会分析研究计算机加工的数据结构的特性,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,应用相关知识设计设散列表实现电话号码查找系统。
二.程序流程
┊┊
┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊三、功能介绍
1)设每个记录有下列数据项:电话号码、用户名、地址;
2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;
3)采用一定的方法解决冲突;
4)查找并显示给定电话号码的记录;
5)查找并显示给定用户名的记录。
本设计所采用的数据结构(如:链表、栈、树、图等)
核心数据结构用到的结构体要采用动态内存分配和存放记录的散列表.
功能模块详细设计
本程序功能模块根据程序设计的需求,综合程序的实用性、人性化、智能化的考虑,将程序划分为几个部分分别编写:
键盘输入各人的信息: void getin()
显示输入的用户信息: void ShowInformation()
除留余数法构造哈希函数: int Hash1()
构造把字符串转换成整型数哈希函数: int Hash2()
冲突处理函数: Status collision()
以姓名为关键字建表: void CreateHash1()
以姓名为关键字查表: void SearchHash1()
以电话号码为关键字建表: void CreateHash2()
以电话号码为关键字查表: void SearchHash2()
输出菜单函数: int main()
┊
┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊四、设计步骤
1算法思想分析
要用散列表设计实现电话号码查询系统,对存入的联系人的名字电话以及地址进行存储,并在输入电话号码或姓名后得出此记录的所有信息,要求有菜单界面和清屏功能.首先,此程序,多次用到哈希函数,此处先用除留余数法对折叠后的数构造哈希函数,再用二次探测再散列法建立冲突处理函数解决冲突,再以电话号码和姓名为关键字建立散列表(若哈西地址冲突进行冲突处理),在此之前,必须先用一系列输出函数输出一个菜单.整个程序的设计思路到此结束。
2系统测试
1初始界面
图(1)
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊
2:输入1添加用户信息,输入2读取
图(2)3:以姓名建立哈希表,再哈希表法解决冲突
:
图(3)
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊4:以电话号码建立哈希表,再哈希表法解决冲突
图(4)
5:给定用户名查找记录
图(5)
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊6:给定电话号码查找记录
图(6)
五、设计总结
1)通过这次数据结构的编程题目,使我对数据结构有了更深的了解,熟悉了
查找和排序在散列表程序设计中的应用。
2)对查找和排序的时间复杂度和空间复杂度有了进一步了解.从最初的不知
道从何入手到最后编写程序的完成,虽然耗费了我们一定的时间跟精力,
但同时我们也收获硕果累累,一方面使我对函数的运用有了更加深刻的了
解,对面向对象语言更深层次的掌握和应用。
3)在编程过程中,出现了许多的错误,但通过改正,反复思考,对程序的运
行方式有了进一步体会, 对数据结构设计程序有了进一步体会。
4)我更加懂得,对一个手足无措的程序,不要慌慢慢查阅慢慢体会,心静,努力
就有成果.天道酬勤.
┊┊
┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊六、参考文献
[1]《数据结构》(C语言版),严蔚敏,清华大学出版社,2005.
[2]《算法设计与分析》,王晓东主编,清华大学出版社,2005
[3]汪诗林等译,《数据结构、算法与应用》,(美)Sartaj Sahni著,机械工业出版社, 1999
[4]《数据结构与算法分析》,CLIFFORD A. SHAFFER著,张铭、刘晓丹译,电子工业出版社,1998
[5]谭浩强 .C程序设计[Z].北京:清华大学出版社,2001.
[6]薛万鹏.C语言程序设计教程[Z].北京:机械工业出版社,2000.
[7]鲁岩.实用C语言及其程序设计[Z].大连:大连理工大学出版社,1993. [8]袁征.C语言编程序技巧程序集[Z].北京:电子工业出版社,1993.
┊
┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊七、附录
程序设计代码
#include
#include
#include
#include
#define MAXSIZE 20 //电话薄记录数量
#define MAX_SIZE 20 //人名的最大长度
#define HASHSIZE 53 //定义表长
#define SUCCESS 1
#define UNSUCCESS -1
#define LEN sizeof(HashTable)
typedef int Status;
typedef char NA[MAX_SIZE];
typedef struct{//记录
NA name;
NA tel;
NA add;
}Record;
typedef struct{//哈希表
Record *elem[HASHSIZE]; //数据元素存储基址
int count; //当前数据元素个数
int size; //当前容量
}HashTable;
Status eq(NA x,NA y){//关键字比较,相等返回SUCCESS;否则返回UNSUCCESS if(strcmp(x,y)==0)
return SUCCESS;
else return UNSUCCESS;
}
Status NUM_BER; //记录的个数