- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《数据结构》实验指导书
PAGE
PAGE 19
数据结构实验指导书
编
淮阴工学院计算机系
二OO五年九月
目 录
实验一 线性表及其应用…………… ……………………2
实验二 栈和队列及其应用…………………………………5
实验三 二叉树及其应用……………………………………7
实验四 图及其应用…………………………………………9
实验五 查找……………… ………………………………11
实验六 排序………………… ……………………………13
实验一 线性表及其应用
实验目的
加深对线性表的结构特性的理解;
熟练掌握线性表的链式存储结构的描述方法及基本操作;
掌握线性表的链式存储结构的应用方法;
从时间和空间的角度对操作算法进行分析。
培养程序的设计能力和调试能力。
实验学时:建议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可用随机数产生。这样事前无法确定谁是最后一人
编写的代码:
#includestdio.h
#includestdlib.h
typedef struct Joseph
{
int num;
int key;
struct Joseph *next;
} Joseph1;
Joseph1 *CreatList(int n)
{
Joseph1 *R,*p,*q;
int i,k;
R=p=(Joseph1*)malloc(sizeof(Joseph1));
p-next=NULL;
for(i=0;in-1;i++){
q=(Joseph1*)malloc(sizeof(Joseph1));
p-num=i+1;
scanf(%d,k);
if(k=0)
{
printf(输入信息有误!);
exit(0);
}
p-key=k;
p-next=q;
p=q;
}
q-num=n;
scanf(%d,k);
if(k=0)
{
printf(输入信息有误!);
exit(0);
}
q-key=k;
q-next=R;
R=q;
return(R);
}
void DeleList(int n,Joseph1 *P,int m)
{
Joseph1 *q,*t;
q=P;
int i,j;
for(i=1;in;i++)
{
for(j=1;jm;j++)
q=q-next;
t=q-next;
q-next=t-next;
m=t-key;
printf(删除的第%d个数是:,i);
printf(%d\n,t-num);
free(t);
}
printf(删除的最后一个数是:%d\n,q-num);
free(q);
}
void main()
{
int m,n;
Joseph1 *P;
printf(请输入参加的人数: );
scanf(%d,n);
if(n=0)
{
pri
文档评论(0)