ImageVerifierCode 换一换
格式:DOCX , 页数:71 ,大小:395.11KB ,
资源ID:899296      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/899296.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(完整word版广义表的应用.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

完整word版广义表的应用.docx

1、完整word版广义表的应用软件综合课程设计 广义表的应用图书借阅管理系统 二一四 年 六 月广义表的应用一、问题陈述由于广义表在结构上较线性表复杂得多,因此,广义表的运算也不如线性表简单。本设计要求实现的广义表的建立、查找、输出、取表头和取表尾以及求深度、求逆表等。本设计用一个主控菜单程序控制,共分为6个子系统。(1)建立广义表(2)输出广义表(3)结点的查找(4)求广义表表头(5)求广义表表尾(6)求广义表的深度二、需求分析1.菜单函数 使用数字0-6来选择菜单项,超出此范围时,提示输入错误,并重新输入。运行程序时,先输入一个广义表,回车后,调用各功能函数,则出现功能菜单,输入的一个数字,该

2、数字用sn存储,使用choose()接受数字输入,该函数的返回值提供给主函数;则主函数使用while循环实现重复选择,以实现不同的广义表菜单功能。2.主函数 包含的功能函数有:输出广义表、广义表深度、广义表表头、广义表表尾、广义表查找、广义表逆置6个函数。运行程序时,首先执行主函数,根据提示,建立广义表,广义表中的元素应单独输入,每输入一个字符,回车,广义表输入完成时,应再次输入“)”,表示输入结束,这是由于CreateGList函数递归的原因,回车,此时调用choose()函数,出现功能菜单,提示用户进行相关操作,进入任一操作,通过switch(choose()对用户所输入的信息进行匹配,匹

3、配后调用相关的子函数,从而实现各项函数的功能。3.创建广义表函数函数中,先定义一个整型数据i=0和一个数组a10,构建时,先输入一个字符,如果输入字符的是#,则广义表为空,否则输出第一个左括号。接下来的元素项如果是子表,则递归调用CreateGList(),若是原子,则直接输出,并将输入的数据保存在数组ai中,同时i+,然后继续输入保存用户所输入的数据,若是,则递归调用CreateGList()函数,继续执行第一步,当遇到)时,结束。4. 广义表的输出此函数实现的是输出功能,它直接关联到后面的取表头、表尾运算。函数中,分为原子和子表,若是子表,则利用头结点指针,递归输出子表。若是原子,则直接输

4、出该原子的数值。然后判断下一结点是否为空,不为空则输出“,”,继续递归输出,执行上一步的操作。5. 结点的查找运行时,输入要查找的元素,将该元素与数组中的元素进行比较,若相等,则查找成功,输出此元素的位置信息,当查找超出范围时,输出查找失败信息。6求广义表的表头表头分为子表和原子。当表头为子表时,先输出左括号,再通过递归调用依次输出表头,最后输出右括号。当表头为原子时,直接输出原子数值。7. 求广义表的表尾若广义表非空,则广义表中除去表头后其余元素构成的子表为表尾。函数中,定义指针p、q,q用于指向广义表表头,q-next为广义表表尾,并赋值给p,因p也是广义表,则可调用广义表输出函数Prin

5、tGList(),输出表尾。8. 广义表的逆置逆置即将表头和表尾倒置,因此算法中,先后调用取表尾函数和取表头函数,先输出表尾,再输出表头,以此实现逆置功能。9. 广义表的深度广义表深度的递归定义式:它等于所有子表中表的最大深度加1。若一个表为空,则深度为1。定义dep表示任一子表的深度,max为所有子表中的最大深度,则广义表的深度为max+1。函数中,当广义表L为空表或由单元素组成时,不进行递归调用,返回1;否则,当广义表含有子表时,利用头结点指针,递归求出深度,将最大深度的子表的dep赋值给max,返回max+1即为广义表深度。三、概要设计程序的开始,先定义广义表的结点类型,采用枚举类型区分

6、原子ATOM和子表LIST。采用联合体定义原子结点的值域atom和表头指针域hp。再输入一个广义表,在程序中可以定义一个数组用来存放广义表中的关键字。编写各个功能函数时,先了解算法的思想,绘出流程图,根据流程图进一步编写。之后编写一个功能选择函数choose(),并在此函数中打印运行界面,通过输入代码,来进行不同功能的操作。在运行界面中,通过一个while循环,能让用户进行循环操作,直至退出系统。四、详细设计1.菜单函数int choose() int sn; cout-endl; cout 广义表的应用 endl; cout 1.广义表输出 2.结点的查找 endl; cout 3.广义表表

7、头 4.广义表表尾 endl; cout 5.广义表逆置 6.广义表深度 endl; cout 0.退出系统 endl; cout-endl; cout请输入代码06:sn; if( sn 6) coutendl输入错误,重选06:endl; else break; return sn;2.主函数int main() GList *L; char ch; printf(建立广义表,结束请多输一个右括号!n); CreateGList(&L); /创建广义表 while(1) switch(choose() case 1: cout输出广义表:; PrintGList(L); coutendl;

8、 break; case 2: coutch; Locate(L, ch); coutendl; break; case 3: cout广义表取表头:; GListHead(L); coutendl; break; case 4: cout广义表取表尾:; cout(; GListTail(L); cout)endl; break; case 5: printf(广义表的逆表:); TraverseList(L); coutendl; break; case 6: cout广义表的深度为:; couthp)endl; break; case 0: cout退出!ch; /输入数据 if(ch

9、= #) /如果输入的是#表示为空 *L = NULL; else if(ch = () /如果是左括号就递归构建子表 *L = (GList *)malloc(sizeof(GList); (*L)-tag =1; /广义表的标志量为LIST CreateGList(&(*L)-hp); /建立此广义表的表头指针所指的元素 else /只有原子的情况下 *L = (GList *)malloc(sizeof(GList); (*L)-tag = 0; /广义表标志量为ATOM (*L)-atom = ch; /元素为所输入数值 ai=ch; /不能写成ai=(*L)-atom; i+; ci

10、nch; /此处输入的必为逗号或者右括 if(ch = ,) /如果是逗号就递归构建下一个子表 CreateGList(&(*L)-next); else if(ch = ) /如果是右括号就结束 (*L)-next =NULL;4.广义表输出函数PrintGList()void PrintGList(GList *L) /输出广义表 if(L-tag = 1) /广义表标志量为LIST couthp = NULL) /表头指针为空 couthp); /递归打印子表 cout); /结束打印右括号 else /标志量为ATOM coutatom; /输出此元素 if(L-next !=NULL

11、) coutnext); /调用此函数,输出广义表下一个元素 5. 广义表查找函数Locate()void Locate(GList *L,char ch) /广义表查找 int j; cinch; /输入要查找关键字 for (j=0;j=i;j+)/用for循环查找 if(aj=ch) /如果找到 cout查找成功,位置为:j+1i) cout查找失败,元素不存在此广义表中!hp; /p指向广义表表头 PrintGListHead(p); /调用表头输出函数7.广义表取表尾函数void GListTail(GList *L) /广义表取表尾 GList *p,*q; q=L-hp; /q指向广义表表头 p=q-next; /p指向广义表表尾 PrintGList(p); 8.广义表逆置函数TraverseList()void TraverseList(GList *L) /广义表逆置 cout(; GListTail(L); /调用取表尾函数 cout,; GListHead(L); /调用取表头函数 coutnext) /max初值为0,元素地址不为空 if(L-tag = 1) /元素标志量为LIST dep = GListDepth(L-hp); /求以L-hp的子表深度 i

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1