数据结构第二章 线性表.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第二章 线性表 一、通信录管理 1. 题目要求: 利用链表结构解决通讯录的使用问题,通过菜单实现其常用的几种功能: 1、? 菜单内容 ???? 程序运行后,给出6个菜单项的内容和输入提示; 1、? 通讯录链表的建立 2、? 通讯录结点的插入 3、? 通讯录结点的查询 4、? 通讯录结点的删除 5、? 通讯录结点的输出 ??? 0、? 退出管理系统 请选择0—5: 2、设计要求 使用数字0—5来选择菜单项,执行相应的操作,其他输入则不起作用。 2. 算法分析: 按照单链表的结构,设计单链表的建立、结点的插入、结点的查找、结点的删除和链表的输出等相应的子函数。为实现菜单的调用功能,需要设计一个函数用于输出提示信息和处理输入,并将返回值提供给主函数实现相应的子函数调用。 二、约瑟夫生死者游戏 1.题目要求: 约瑟夫游戏的大意是:每30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分。因此船长告诉乘客,只有将全船一半的旅客投入海中,其余人才能幸免于难。无奈,大家只能同意这种办法,并议定30个人围成一圈,由第一个人数起,依次报数,数到第9个人,便把他投入海中,然后再从他的下一个数起,数到第9人,再将他投入海中,如此循环进行,直到剩下15人为止。 要求采用单循环链表实现,利用结点的数据域存放位置。 2.算法分析: 采用单循环链表解决这一问题。将链表结点的数据域存放位置,然后将它们组成一个单循环链表。为了不失一般性,将人数用n表示,报数上限用k表示。算法描述如下: 1、创建含有n个结点的单循环链表; 2、生者与死者的选择: ?? p指向链表第一个结点,初始i置1; ?? while(i=n/2)? ?? { 从p指向的结点沿链前进k-1步; ???? 删除第k个结点(q所指向的结点);p指向q的下一个结点; ???? 输出其位置q-data; ???? i自增1; ??? } 3、输出所有生者的位置。 三、链表的综合应用设计要求 1.题目要求: 设计一个程序,实现链表的以下功能: 1.建立单链表(头插法,不带头结点); 2.建立单链表(头插法,带头结点); 3.建立单链表(尾插法,不带头结点); 4.建立单链表(尾插法,带头结点); 5.逆置单链表; 6.有序链表插入; 7.有序链表删除重复元素; 8.无序链表删除重复元素; 9.两链表合并并排序; 10.两链表并集。 2.算法分析: 设计一个菜单,通过菜单项的调用,实现题目要求的各项功能。 四、哲学家就餐问题 1.题目要求: 一群哲学家围做在一个圆桌,从1开始编号,每人手上持有密码m。取初值m,哲学家从1开始报数,报到m的哲学家停止吃饭,退出圆桌,并取他手上的密码为新的m,继续数数。求哲学家退出的顺序。要求:n和初值m由玩家输入,手上的密码随机产生。最后要打印出编号对应的密码,输出哲学家离开的先后顺序。 2.算法分析: 可用循环链表实现,链表数据类型为结构体,记录编号和相应密码,另外设标志哲学家报数的变量mouth,它的值和哲学家嘴上报的数相等,则如果mouth和m相等,该哲学家就应该离开,离开前取他的密码交给m,同时将他的编号放另一单链表numbsave保存。注意编号要从numbsave的最后节点插入。当循环链表指向自身时停止比较,这个哲学家即是最后离开的一个。依次打印出numbsave中的数即为按编号哲学家离开的先后顺序。 五、纸牌游戏 1.题目要求: (纸牌游戏)编号为1~52张牌,正面向上,从第二张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后从第三张牌开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;直到以52为基数的翻过,输出:这时输出正面向上的牌有哪些? 2.算法分析: data key next由于翻牌时有正面向上的牌,也有反面向上的牌,而且最后要计算正面向上的牌数,所以设置了标志位key来表示正面向上的牌的编号,key=1表示正面向上,未翻牌的一直是key=1;经过翻牌就key=0,此时表示经过翻牌,属于是反面向上。设计的单链表的存储结构为: data key next 每个结点应包括三个域:存储该结点所对应的牌的编号信息data域、表示牌的正反面的标志的key域、存储其直接后继的存储位置的next域(指针域)。 可以使用尾插法建立单链表。因为编号为1-52的52张牌不一定存储在相邻的存储单元中,且在翻牌操作时要对编号依次进行判断,用指针来进行操作很简单。选用单链表这种数据结构来对52张牌进行链接存储。该链表中的每一个结点只有一个指针域。将编号为1到52的结点依次链接起来,就形成了利用尾插法建立单链表的操作。

文档评论(0)

132****9295 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档