数据结构课程设计报告纸牌游戏.docx
- 文档编号:7416945
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:17
- 大小:35.21KB
数据结构课程设计报告纸牌游戏.docx
《数据结构课程设计报告纸牌游戏.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告纸牌游戏.docx(17页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告纸牌游戏
课题设计2:
扑克牌游戏
1、问题描述
编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后…从第4张开始,以4为基数,是4的倍数的牌翻一次,直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到以52为基数的翻过,输出:
这时正面向上的牌有哪些?
存储结构:
源程序:
#include
voidmain()
{
inti,j,a[52];
for(i=2;i<=52;i++)
for(j=i-1;j<52;j+=i)
a[j]=!
a[j];
printf("正面向上的牌有:
");
for(i=0;i<52;i++)
if(a[i])
printf("%4d",i+1);
}
测试结果:
正面向上的牌有:
14916253649
算法的时间复杂度:
T(n)=O(n2)
课题设计3:
joseph环
一.需求分析:
利用单向循环链表存储结构模拟此过程,按照出列的顺序输出各个人的编号。
首先创建一个空链表,初始化链表,构造出一个只有头结点的空链表,建立好一个约瑟夫环。
1.输入的形式和输入值的范围
本程序中,输入报数上限值m和人数上限l,密码,均限定为正整数,输入的形式为一个以“回车符”为结束标志的正整数。
2.输出的形式
从屏幕显示出列顺序。
3.程序功能
提供用户从键盘输入,Joseph约瑟夫环的必要数据,并显示出列顺序。
二、 概要设计
以单向循环链表实现该结构。
1.抽象数据类型的定义为:
ADTLNode
{
数据对象:
D={ai|ai∈CharSet,i=1,2,…,n,n≥0}
数据关系:
R1={<ai-1,ai>|ai∈D,I=2,…,n}
三.源程序:
#include
#include
typedefstructNode
{
intkey;//每个人持有的密码
intnum;//这个人的编号
structNode*next;//指向下一个节点
}Node,*Link;
voidInitList(Link&L)//创建一个空的链表
{
L=(Node*)malloc(sizeof(Node));
if(!
L)exit
(1);
L->key=0;
L->num=0;
L->next=L;
}
voidCreater(intn,Link&L)//初始化链表
{
Linkp,q;
q=L;
for(inti=1;i<=n;i++)
{
p=(Node*)malloc(sizeof(Node));
if(!
p)exit
(1);
printf("thekey_%dis:
",i);
scanf("%d",&p->key);
p->num=i;
L->next=p;
L=p;
}
L->next=q->next;
free(q);
}
voidmain()
{
LinkL,p,q;
intn,x;
L=NULL;
InitList(L);//构造出一个只有头结点的空链表
printf("pleaseinputthetotlenumberofpeople:
");
scanf("%d",&n);//总共的人数n
printf("thestartkeyis:
");
scanf("%d",&x);//初始密码为x
Creater(n,L);//建立好一个约瑟夫环
p=L;
for(inti=1;i<=n;i++)
{
for(intj=1;j p=p->next; q=p->next; x=q->key; printf("%d",q->num); p->next=q->next; free(q); } } 四、测试数据: m的初值为20,n=7,7个人的密码依次为3,1,7,2,4,7,4 输出: 6741532 课题设计4: 商品货架管理 1、需求分析: 设计一个算法,每一次上货后始终保持生产日期越近的商品越靠近栈底。 求货架上剩余货物M、每天销售件数N、员工每天上货工作时间T,三者之间有何关系及T的最小值。 2、源程序: #include #include"string.h" #include"stdio.h" constintmaxsize=100; constintk=10; #defineelemtypechar typedefstruct { intMonth; intDay; intYear; }DATE; typedefstruct { intnum; DATEdate; }Node; classseqstack { public: Nodestack[maxsize]; inttop; voidinistack() { top=0; } voidpush(intx,intday,intmonth,intyear) { if(top==maxsize) cout<<"货架已满"< else { top++; stack[top].num=x; stack[top].date.Day=day; stack[top].date.Month=month; stack[top].date.Year=year; } } voidpop() { if(top==0) cout<<"货架已空"< else top--; } elemtypegettop() { if(top==0) cout<<"货架已空"< else returntop;} boolempty() { returntop==0; } }; voidmain() { seqstackc[k+1];//存放k种商品的数组,用c[0]来做中介货架 intTxq[k+1];//第i种取货用的时间 intTxs[k+1];//第i种上货用的时间 intNx[k+1];//第i种每天的销售数量 intN=0;//每天销售总量 intTx[k+1];//第i种每天上货的总时间 intT=0;//每天上货用的总时间 charyn='Y'; for(inti=1;i<=k;i++) { cout<<"******************************"< cout<<"商品货架管理系统"< cout<<"******************************"< Nodestore[20]; charyear,month; intcount;//货架上第i种商品的数目 intx,d,m,y;//x为第i种商品的序号 cout<<"请输入货架上第"< "< cout<<"(序号,生产日期(年、月、日如2006.2.13),现在货架上的存货数目,上货用时和取货用时)"< cin>>x>>y>>year>>m>>month>>d>>count>>Txs[i]>>Txq[i]; Nx[i]=maxsize-count; cout<<"货架上还需上"< Tx[k]=Txs[i]*(maxsize+count)+2*Txq[i]*count; cout<<"该货架满货需要用时"< cout<<"是否要上货? (Y/N)"< cin>>yn; if(yn=='Y'||yn=='y') { intnumbers,nian,yue,ri; cout<<"请输入要上货物的数目及生产日期(年、月、日)"< cin>>numbers>>nian>>yue>>ri; if(numbers>maxsize-count) { cout<<"要上的货物数目超出了货架的最大容量,请重新输入"< cin>>numbers>>nian>>yue>>ri; } for(intj=1;j<=numbers;j++) { } } N+=Nx[i]; T+=Tx[i]; } cout<<"每天销售总量为: "< cout<<"每天上货用的总时间为: "< } 3、测试结果: 五、课程设计5: 航空客运订票系统 1、需求分析: 对于本设计,可采用基数排序法对于一组具有结构特点的飞机航班号进行排序,利用二分查找法对排好序的航班记录按航班号实现快递查找,按其他次关键字的查找可采用最简单的顺序查找方法进行,因为它们用的较少。 2、源程序: #include #include #definemaxspace100 #definekeylen7 #defineradix_n10 #defineradix_c26 typedefcharkeytype; typedefstruct { charstart[6]; charend[6]; charsche[10]; chartime1[5]; chartime2[5]; charmodel[4]; intprice; }infotype; typedefstruct { keytypekeys[keylen]; infotypeothers; intnext; }slnode; typedefstruct { slnodesl[maxspace]; intkeynum; intlength; }sllist; typedefintarrtype_n[radix_n]; typedefintarrtype_c[radix_c]; voiddistribute(slnode*sl,inti,arrtype_nf,arrtype_ne) { intj,p; for(j=0;j { f[j]=e[j]=0; } for(p=sl[0].next;p;p=sl[p].next) { j=sl[p].keys[i]%48; if(! f[j]) f[j]=p; else sl[e[j]].next=p; e[j]=p; } } voidcollect(slnode*sl,inti,arrtype_nf,arrtype_ne) { intj,t; for(j=0;! f[j];j++); sl[0].next=f[j]; t=e[j]; while(j { for(j=j+1;j f[j];j++); if(f[j]) { sl[t].next=f[j]; t=e[j]; } } sl[t].next=0; } voiddistribute_c(slnode*sl,inti,arrtype_cf,arrtype_ce) { intj,p; for(j=0;j { f[j]=e[j]=0; } for(p=sl[0].next;p;p=sl[p].next) { j=sl[p].keys[i]%65; if(! f[j]) f[j]=p; else sl[e[j]].next=p; e[j]=p; } } voidcollect_c(slnode*sl,inti,arrtype_cf,arrtype_ce) { intj,t; for(j=0;! f[j];j++); sl[0].next=f[j]; t=e[j]; while(j { for(j=j+1;j f[j];j++); if(f[j]) { sl[t].next=f[j]; t=e[j]; } } sl[t].next=0; } voidradixsort(sllist&l)//链式 { inti; arrtype_nfn,en; arrtype_cfc,ec; for(i=0;i l.sl[i].next=i+1; l.sl[l.length].next=0; for(i=l.keynum-1;i>=2;i--) { distribute(l.sl,i,fn,en); collect(l.sl,i,fn,en); } for(i=1;i>=0;i--) { distribute_c(l.sl,i,fc,ec); collect_c(l.sl,i,fc,ec); } } voidarrange(sllist&l)//重新整理 { intp,q,i; slnodetemp; p=l.sl[0].next; for(i=1;i { while(p p=l.sl[p].next; q=l.sl[p].next; if(p! =i) { temp=l.sl[p]; l.sl[p]=l.sl[i]; l.sl[i]=temp; l.sl[i].next=p; } p=q; } } intbinsearch(sllistl,keytypekey[]) { intlow,high,mid; low=1; high=l.length; while(low<=high) { mid=(low+high)/2; if(strcmp(key,l.sl[mid].keys)==0) returnmid; elseif(strcmp(key,l.sl[mid].keys)<0) high=mid-1; else low=mid+1; } return0; } voidseqsearch(sllistl,keytypekey[],inti) { intj,k,m=0; printf("*************************************************************\n"); printf("*航班号起点站终点站航班期起飞时间到达时间机型票价*\n"); for(j=1;j<=l.length;j++) { switch(i) { case2: k=strcmp(key,l.sl[j].others.start);break; case3: k=strcmp(key,l.sl[j].others.end);break; case4: k=strcmp(key,l.sl[j].others.time1);break; case5: k=strcmp(key,l.sl[j].others.time2);break; } if(k==0) { m=1; printf("*%-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d*\n",l.sl[j].keys,l.sl[j].others.start,l.sl[j].others.end,l.sl[j].others.sche,l.sl[j].others.time1,l.sl[j].others.time2,l.sl[j].others.model,l.sl[j].others.price); } } if(m==0) printf("*无此航班信息,可能是输入错误! *\n"); printf("*************************************************************\n"); } voidsearchcon(sllistl) { keytypekey[keylen]; inti=1,k; while(i>=1&&i<=5) { printf("\n********************\n"); printf("*航班信息查询系统*\n"); 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): "); scanf("%d",&i); printf("\n"); switch(i) { case1: printf("输入要查询的航班号(字母要大写): "); scanf("%s",key); k=binsearch(l,key); printf("*************************************************************\n"); if(k==0) printf("*无此航班信息,可能是输入错误! *\n"); else { printf("*航班号起点站终点站航班期起飞时间到达时间机型票价*\n"); printf("*%-8s%-7s%-6s%-11s%-9s%-7s%-5s%4d*\n",l.sl[k].keys,l.sl[k].others.start,l.sl[k].others.end,l.sl[k].others.sche,l.sl[k].others.time1,l.sl[k].others.time2,l.sl[k].others.model,l.sl[k].others.price); } printf("*************************************************************\n"); break; case2: printf("输入要查询的航班起点站名: "); scanf("%s",key); seqsearch(l,key,i); break; case3: printf("输入要查询的航班终点站名: "); scanf("%s",key); seqsearch(l,key,i); break; case4: printf("输入要查询的航班起飞时间: "); scanf("%s",key); seqsearch(l,key,i); break; case5: printf("输入要查询的航班到达时间: "); scanf("%s",key); seqsearch(l,key,i); break; case0: printf("\n\n\n再见\n\n\n"); } } } voidinputdata(sllist&l) { inti=++l.length; charyn='y'; while(yn=='y'||yn=='Y') { printf("航班号起点站终点站航班期起飞时间到达时间机型票价\n"); scanf("%s%s%s%s%s%s%s%d",l.sl[i].keys,l.sl[i].others.start,l.sl[i].others.end,l.sl[i].others.sche,l.sl[i].others.time1,l.sl[i].others.time2,l.sl[i].others.model,&l.sl[i].others.price); ++i;getchar(); radixsort(l); arrange(l); printf("继续输入吗? y/n: "); scanf("%c",&yn); } l.length=i-1; } voidmain() { sllistl; l.keynum=6; l.length=0; inputdata(l); searchcon(l); } 3、测试结果: 航班信息: 航班号起点站终点站航班期起飞时间到达时间机型票价 输入: CA1544合肥北京1.2.4.510551240733960 提示: 继续输入吗? y/n: y 显示: 航班号起点站终点站航班期起飞时间到达时间机型票价 MU5341上海广州每日14201615M901280 提示: 继续输入吗? y/n: y …… 提示: 继续输入吗? y/n: n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 纸牌 游戏