数据结构设计报告设计.doc
《数据结构设计报告设计.doc》由会员分享,可在线阅读,更多相关《数据结构设计报告设计.doc(16页珍藏版)》请在沃文网上搜索。
1、数据结构课程设计报告数据结构课程设计报告专 业 计算机科学与技术 班 级 0902班 学 号 2009115010207 姓 名 夏丽霞 指 导 教 师 夏端峰老师 时 间 湖 北 师 范 学 院计 算 机 科 学 与 技 术 学 院目 录1、 链表的应用1.1设计要求61.2设计分析81.3算法实现101.4程序代码121.5测试结果151.6结论分析17第一章 链表的应用线性表(linear_list)是最常用而且最简单的一种数据结构。简言之,一个线性表是n个数据元素的有限序列,每个数据元素的具体含义在不同情况下各不相同。一个数据元素可以由若干个数据项(item)组成。线性表有顺序和链式两
2、种存储结构,后者是用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。链表的结点(code)包括两个域,即数据域(存储数据元素信息的域)和指针域(存储该结点直接后继存储位置的域),在本章实验中数据域是为了描述通讯者的相关信息。有性表m同素_list 1.1 设计要求本章实验的设计要求如下: 建立一个通讯录管理系统,用以实现集中操作功能,如:但通讯录链表的建立、通讯者的插入、通讯者的查询、通讯者的删除以及通讯录表的输出等。1.2 设计分析为了实现通讯录管理系统的几种操作功能,首先做出如下总体设计框架 显示菜单项内容及输入提示 (用菜单函数的返回值经主函数后进入
3、下列相应的功能)查询通讯者信息删除通讯者信息退出管理系统显示所有通讯者信息创建通讯录链表添加新的通讯者1.3 算法实现由设计分析中的总体框架分模块来讨论算法实现u 实现循环和功能选择首先需要编写一个主控菜单驱动程序,输入05以进入相应的选择项。假设输入选择用变量mn存储,它作为menu()函数的返回值提供给主函数中的switch语句,使用for循环来实现重复选择,并在主函数中完成这一系列操作。例如:如上所述,需要设计一个函数menu用来输出信息和处理输入,而该函数必须返回一个mn值给主函数中的switch语句。 该函数如下: int Menu()int mn;printf(通讯录管理系统n);
4、printf(=n);printf( 1.通讯录链表的建立n);printf( 2.通讯者结点的插入n);printf( 3.通讯者结点的查询n);printf( 4.通讯者结点的删除n);printf( 5.通讯录链表的输出n);printf( 0.退出管理系统n);printf(=n);printf(请选择0-5: ); for(; ;)scanf(%d,&mn);if(mn5)printf(n输入错误,重选0-5:);elsebreak;return mn;使得mn的输入值对应主函数中switch语句的case1case5,并由此完成各种功能操作。对于那些不合法的输入(比如mn的输入值大
5、于5或者小于0)则提示“输入错误”信息并要求重新输入。u 通讯录连表的建立(1)建立链表的方法有两种:头插法和尾插法头插法:头结点head有head -next=NULL再插入新结点p的循环语句中,用p-next=head -next;head -next=p; 两个语句来尾插法:定义指针 p=head;用While循环语句去实现新结点的插入并不断修改指针p的指向,以保证p一直指向单链表的最后一个结点。 (p1为新插入的结点) p-next=p1; p=p1;(2)要建立一个带头结点的单链表,首先要生成结点,本实验我采用尾插法来建立链表,因此其算法描述如下:使链表的头尾指针head、rear指
6、向新生成的头结点(当然也是链表的尾结点);置结束标志为0(假);while(结束标志不为真); P指向新生成的结点; 读入一个通讯者数据至p的数据域; 将新结点插到尾结点之后; 修改指针:使尾指针指向新插入的结点; 提示信息:是否结束链表的建立,并读入一个结束标志,看是否结束循环; 尾结点指针域置空;u 通讯者信息的插入为了将一个通讯者数据结点按其编号的次序插入有序通讯录表中的相应位置,以确保通讯录链表的有序性。首先要找准插入的位置,方法:用两个指针变量p1和p2分别指向当前刚访问过的结点和下一个即将访问的结点,循环顺序查找单链表,寻找插入位置,其中p1指向待插入位置的前一个结点。算法描述如下
7、:用p1指向原通讯链表的头结点,p2指向链表的第二个结点,p为即将要插入的新结点;while(p2!=NULL& p2-data.numdata.num) p1=p2; p2=p2-next; 插入新结点p-next=p2;u 通讯者的查找要查找指定通讯者,首先必须输入要查找的通讯者的编号或是姓名,从单链表的表头开始顺序访问表中每一个结点,如果查找成功则返回一个指向该结点的指针;如果查找失败则返回一个空指针。注: 按编号查找时,由于通讯录链表是按编号进行有序排列的,故若所查找的通讯者编号不在表中则不一定需要循环从通讯链表表头比较到表尾; 而按姓名查找时则需要循环比较到表尾方可确定查不到的情况!
8、u 通讯者的删除本功能比较容易实现,值得注意的是通讯连表上结点的删除操作需要先调用查找函从表头循环比较到表尾查找到要删除的结点方可顺利完成!u 通讯录链表的输出本功能也比较容易实现,只要定义一个指针变量p且它等于链表头指针,然后用p顺序向后扫描单链表,直至表尾即可。1.4 程序代码#include#include#include#define SIZE sizeof(ListNode)typedef struct /定义数组分别存放数据域中各成员的相关信息:num name sex /phone addrchar num6; char name9;char sex3; char phone13
9、;char addr31;DataType;/结点类型定义typedef struct nodeDataType data; struct node *next; ListNode,*LinkList; /定义一个struct类型的变量ListNode和一个指向/struct的指针变量LinkList head,p;/11111111111菜单int Menu()int mn;printf(通讯录管理系统n);printf(=n);printf( 1.通讯录链表的建立n);printf( 2.通讯者结点的插入n);printf( 3.通讯者结点的查询n);printf( 4.通讯者结点的删除n
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 结构设计 报告 设计