《数据结构》实验指导书(00002).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文档。上传文档
查看更多
数据结构实验指导书 淮阴工学院计算机工程学院 二O一一年八月 目 录 实验1 线性表及其应用…………………………………1 实验2 栈和队列及其应用………………………………5 实验3 二叉树及其应用…………………………………10 实验4 图及其应用………………………………………13 实验5 查找………………………………………………14 实验6 排序………………………………………………16 线性表及其应用 实验目的 加深对线性表的结构特性的理解; 熟练掌握单链表类的描述方法及其C++实现; 掌握线性表的链式存储结构的应用方法; 从时间和空间的角度对操作算法进行分析; 加强程序的设计能力和调试能力。 实验学时:建议2~4学时 实验内容 内容1:制作体育彩票(10选7)的选号器类。 【说明】 体育彩票(10选7)的7个号可以重复; 建议选号器类从单链表类继承。用首尾相连的链式结构,这样可以更逼真地模拟“摇奖”过程;而每个号的“摇动”次数可用随机数来确定。 怎样产生随机数?可以利用C++语言中的种子函数srand( )和产生伪随机数函数rand( )来实现。(includeSTDLIB.H) 首先,给srand(m )提供一个“种子”m,它的取值范围是从0~65535。 然后,调用rand( ),是伪随机数,它会根据提供给srand( )的“种子”值返回一个随机数(在0~32767之间)。 根据需要多次调用rand( ),从而不断地得到新的随机数。 无论何时,你都可以给srand( )提供一个新的“种子”,从而进一步“随机化”rand( )的输出结果。 例如,取m=17,则执行了srand(17)之后,再执行rand( )函数,将得到输出值94;第二次调用rand( ),会得到26,……反复调用rand( )就能产生一系列的随机数。 注意:若m不变,则rand( )的输出系列也不变,总是94,26,602,…等等。所以,建议摇号的“种子”选当前日期或时间,以保证每天的摇号值都不相同。 【选做内容】 实现摇奖和对奖操作。 内容2:约瑟夫(Joseph)环问题 【问题描述】 约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,从1起报到k则出圈,下一个人再从1报起,如此下去直到圈中只有一人为止。求最后剩下的人的编号。 【说明】 建议用循环链表存储方式,设计循环链表类和约瑟夫类。 问题改进:在人数n、k及起始报数人确定的情况下,最后剩下的人的编号事前是可以确定的。若每人有一个密码Ki(整数),留作其出圈后的报到Ki后出圈。密码Ki可用随机数产生。这样事前无法确定谁是最后一人。 【选做内容】 约瑟夫问题的改进算法。 约瑟夫问题的报数方法若采用顺时针报数和逆时针报数交替进行,则如何设计数据结构? 【实现提示】 //结点结构和单循环链表类定义 enum ResultCode{Error,NoMemory,OutOfBounds,Underflow,Overflow}; templateclass T struct Node { Node(){ link=NULL;} Node(T e,Node*next) { data=e; link=next; } T data; Node*link; }; templateclass T class LinkList { private: int n; //表长 NodeT *current,*front; public: LinkList(int mSize); //构造函数,不带表头结点单循环链表 ~LinkList(); //析构函数 T RemoveCurrent(); //删除操作 void movenext(int n); //current后移n次 int CurrentPassword(){return current-password;} T CurrentData(){return current-data;} void toLocatioin(T t); //将current指向元素为t的结点 void Output() const ; //输出链表 }; // Class LinkList //单循环链表类部分成员函数实现 templateclass T LinkListT::LinkList(int mSize) //构造函数 { int i; NodeT *p; current=new NodeT; current-da

文档评论(0)

ipad0c + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档