1、 1 数据结构课程设计论文数据结构课程设计论文 题目: 1.通讯录管理系统* 7 .建立二叉树,层序、先序遍历 14. 拓扑排序 2013 年 6 月 24 日 2 1.通讯录管理系统通讯录管理系统 开发目的 数据结构旨在使读者学会分析研究数据对象的特性,学会数据的组织方法, 以便选择合适的数据逻辑结构和存储结构,以及相应的运算,把现实世界中的问 题转化为计算机内部的表示和处理。 设计目的 进一步理解和掌握课堂上所学各种基本抽象数据类型的逻辑结构、存储结构 和操作实现算法,以及它们在程序中的使用方法;掌握软件设计的基本内容和设 计方法,并培养规范化软件设计的能力;将理论知识和实际结合起来,锻炼
2、分析 解决实际问题的能力。 设计要求 实现通讯录的建立和输出、通讯者的插入、删除和查询等几种操作功能。 用单链表作存储结构; 用菜单作为应用程序的主要界面, 主界面的主控菜单如下: 通讯录链表通讯录链表 * 1.通讯录链表的建立通讯录链表的建立 2.通讯录结点的插入通讯录结点的插入 3.通讯录结点的查询通讯录结点的查询 4.通讯录结点的删除通讯录结点的删除 5.通讯录链表的输出通讯录链表的输出 0.退出通讯录管理系统退出通讯录管理系统 * 请选择菜单号请选择菜单号: *:使用数字 05 来选择菜单项,其他输入无效,并给出错误提示。 设计功能 程序运行后的功能有: (1)菜单选择界面 (2)建立
3、通讯录记录 (3)插入联系人记录 (4)查找联系人记录(名称和编号查询) (6)删除联系人记录 (7)输出所有联系人记录 (8)退出程序 算法设计算法设计 系统流程图如图所示: 开始 是否继续 添加 主菜单 插入信息 查询记录 删除记录 输出记录 退出 添加各项信息 建立通讯链表 是否已 建表 是否已 建表 是否已 建表 是否已 建表 Y Y Y Y 添加各 项信息 插入成功 主菜单 查询方 式 按 编 号 查 找 按 姓 名 查 找 a b 是否存 在记录 Y 确定 删除 Y 删除成功 N N 查询完毕 N N N N 成功输出 是否 退出 N 退出程序 结束 3 主函数设计 由于主函数设计
4、的是菜单选择项, 所以在程序未退出的的情况下要实现循环 运行,并且要考虑到未建立通讯录链表的情况下其他功能无法实现的情况。故在 实现循环运行的功能时定义一个变量 j=1,在选择退出后再将 j 赋值为 0,要考 虑判定是否建表的情况定义了一个全局变量 flag1=0, 建链表后 flag1 赋值为 1。 为了达到选择各功能,采用 switch 判定选择项并跳转入相应功能函数。 判定是否建表语句: if(flag1!=1) printf(“请先建立表!“); getchar(); system(“cls“); 功能程序设计 为了达到程序各项功能的实现,以及满足菜单选择项的功能,对每个功能的 实现分
5、别用了不同函数,并且有用到函数的嵌套以减少代码的重复。 建立通讯链表设计 要建立链表,首先要生成结点,因此,尾插法建立链表算法描述如下: (1)使链表的头尾指针 head、rear 指向新生成的头结点(也就是尾结点); (2)置结束标志为 0(假); (3)while(结束标志不为真) P 指向新生成的结点; 读入一个通讯者数据至新结点的数据域; 将新结点链到尾结点之后; 主函数设计 主函数设计主函数设计 主函数设计主函数设计 4 实现循环运行的功能时定义一个变量 j=1,在选择退出后再将 j 赋值为 0, 要考虑判定是否建表的情况定义了一个全局变量 flag1=0,建链表后 flag1 赋值
6、 为 1。 为了达到选择各功能,采用 switch 判定选择项并跳转入相应功能函数。 判定是否建表语句: if(flag1!=1) printf(“请先建立表!“); getchar(); system(“cls“); 建立通讯链表设计 要建立链表,首先要生成结点,因此,尾插法建立链表算法描述如下: (1)使链表的头尾指针 head、rear 指向新生成的头结点(也就是尾结点); (2)置结束标志为 0(假); (3)while(结束标志不为真) P 指向新生成的结点; 读入一个通讯者数据至新结点的数据域; 将新结点链到尾结点之后; 使尾指针指向新结点; 提示是否继续建表,读入一个结束的标志; (4)尾结点的指针域置空置 NULL。 具体算法实现如下: /*尾插法建立带头结点的通讯录链表算法*/ LinkList CreateList(void) LinkList