数据结构课程设计报告纸牌游戏.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;jp=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;jf[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;jf[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;il.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