数据结构课程设计扑克牌的排序.doc
《数据结构课程设计扑克牌的排序.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计扑克牌的排序.doc(22页珍藏版)》请在三一办公上搜索。
1、课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目:扑克牌的排序目 录1 课程设计介绍11.1 课程设计内容11.2 课程设计要求12 课程设计原理22.1 课设题目粗略分析22.2 原理图介绍22.2.1 功能模块图22.2.2 流程图分析33 数据结构分析63.1 存储结构63.2 算法描述64 调试与分析124.1 调试过程124.2 程序执行过程12参考文献15附 录(关键部分程序清单)16 1 课程设计介绍1.1 课程设计内容编写算法能够用基数排序算法对扑克牌进行排序。应能够选择按花色优先或按面值优先,初始扑克牌牌序要求能自动生成(随机生成)。 1.2 课程设计要求1花
2、色的符号可自定,输出要求给出初始牌序和结果牌序。 2参考相应资料,独立完成课程设计任务。3交规范课程设计报告和软件代码。2 课程设计原理2.1 课设题目粗略分析根据课设题目要求,拟将整体程序分为三大模块。此三个模块相互独立,没有嵌套调用的情况,以下是三个模块的大体分析:1建立一个结构体数组存放整副扑克。2根据要求的扑克数及生成的随机数建立一个结构体数组存放需要排序的扑克。3用基数排序的方法对随机生成的扑克进行相应要求的排序 2.2 原理图介绍2.2.1 功能模块图初始化生成整副扑克随机生成需排序的扑克对扑克按花色优先排序并输出对扑克按面值优先排序并输出图2. 1 功能模块图 2.2.2 流程图
3、分析1随机生成需排序的扑克函数流程图,如图2.2所示:开始i=1i=tn=rand() Yri.huase=pokern.huaseri.num=pokern.numri.order=pokern.orderri.key0=pokern.huaseri.key1=pokern.orderk=(n+2)%13ri.huase=pokern.huaseri.num=pokern.numri.order=pokern.orderri.key0=pokern.huaseri.key1=pokern.orderk=(n+2)%13NK=0,1,11,122111111Y以%d输出value以%c输出va
4、luei+结束图2.2生成随机扑克的流程图利用一个for循环及随机函数rand(),利用每次循环生成的随机数对应的数值num建立初始的无序扑克,同时将huase、value分别赋给关键字key0、key1以对其进行排序2. 对扑克进行花色优先排序的函数流程图,如图2.3所示:开始Yin-1i=0Yrn.next=0i=0ri.next=i+1i+Ni=1 Y调用distribute()、collect() 函数i+i=r0.nextINi!=0Y结束输出人ri.huaseri.value图2.3对扑克进行花色优先排序的流程图对长为n的数组R,利用next域建立为静态链表,进行关键字先key1(
5、面值)后key0(花色)的基数排序,排序后的数组按关键字key0(花色)优先的顺序存放,利用静态链表依次将其输出。3. 对扑克进行面值优先排序的函数流程图如图2.4所示:开始i=0Yi=0Y调用distribute()、collect() 函数i-i=r0.nextINi!=0Y结束输出人ri.huaseri.value图2.4对扑克进行面值优先排序的流程图对长为n的数组R,利用next域建成静态链表,进行关键字先key0(花色)后key1(面值)的基数排序,排序后的数组按关键字key1(面值)优先的顺序存放,利用静态链表依次将其输出。3 数据结构分析3.1 存储结构typedef struc
6、t int value ; / 扑克面值 char huase; / 扑克花色 int num; / 控制面值输出形式 int order; / 在同一花色扑克的位置 int key2; / 排序用的关键字 int next; / 下一个扑克的位置apoker; / 定义一个结构体表示一张扑克apoker poker52; / 定义一个大小为52的结构体数,组存放整副扑克apoker unsortpokermax ; / 定义一个足够大的结构体数组,存放需排序的扑克typedef int tempradix; / 大小为关键字的基数的整形数组,用于基数排序的分配、收集3.2 算法描述1初始化建
7、立扑克的算法描述说明如下:结构体名定义为apoker,poker52,unsortpokermax是apoker类型,对其赋上每个结点的名字,每个名字对应自己的一个num,以控制面值的输出形式,value对应扑克的面值,huase对应扑克的花色。for(i=0;i52;i+)/*建立整副扑克*/ j=i/13;/*将扑克分为四种花色*/k=(i+2)%13; /*控制面值的输出形式*/m=i%13;/*同一花色中所处的位置*/ pokeri.order=m;if(j=0) pokeri.huase=3;/*花色赋值*/ else if(j=1) pokeri.huase=4; else if(
8、j=2) pokeri.huase=5; else pokeri.huase=6;if(k=0) pokeri.value=75;/*面值赋值*/ else if(k=1) pokeri.value=65; else if(k=11) pokeri.value=74; else if(k=12) pokeri.value=81; else pokeri.value=k;pokeri.num=i;2随机生成初始扑克的算法描述如下:利用一个for循环及随机函数rand(),利用每次循环生成的随机数对应的数值num建立初始的无序扑克,同时将huase、value分别赋给关键字key0、key1以对其
9、进行排序。根据num控制扑克value的输出格式。for(i=1;i=t;i+)/*生成t张扑克*/ n=rand()%51; /*随机生成52以内的数*/ unsortpokeri.huase=pokern.huase;/*结构体赋值*/ unsortpokeri.value=pokern.value; unsortpokeri.num=pokern.num; unsortpokeri.order=pokern.order; unsortpokeri.key0=unsortpokeri.huase; /*关键字赋值*/ unsortpokeri.key1=unsortpokeri.order
10、; k=(n+2)%13; /*用num控制value输出形式*/ if(k=0|k=1|k=11|k=12) printf (%c%c ,pokern.huase,pokern.value); else printf (%c%d ,pokern.huase,pokern.value); 3按第i个关键字对记录分配算法如下:按第i位关键字keyi建立radix个队列,同一队列中的keyi相同。headi和taili分别指向各队列中第一个和最后一个记录。headj=0表示相应队列为空队列。 void distribute(apoker r,int i,temp head,temp tail) i
11、nt j,p;for(j=0;jradix;j+)headj=0;tailj=0; /*将个队列初始化为空队列*/p=r0.next; /*p指向链表中的第一个记录*/while(p!=0)j=rp.keyi;/*用记录中第i位关键字求相应队列号*/if(headj=0)headj=p;/*将p所指向的结点加入第i个结点中*/else rtailj.next=p; tailj=p;p=rp.next;4将分配后记录收集、连接算法如下:从0到radix-1依次扫描各队列,将所有非空队列首尾相接,重新链接成一个链表。void collect(apoker r,temp head,temp tail
12、)int j;int t;j=0;while(headj=0)/*找第一个非空队列*/j+;r0.next=headj;t=tailj;while(jradix-1)/*寻找并串接所有非空队列*/j+;while(jradix-1)&(headj=0)/*找下一个非空队列*/j+; if(headj!=0)/*链接非空队列*/ rt.next=headj; t=tailj; rt.next=0;/*t指向最后一个非空队列中的最后一个结点*/ 5按面值优先对扑克排序接算法如下:对长为len的数组R进行关键字先key0(花色)后key1(面值)的基数排序,排序后的数组按关键字key1(面值)优先的
13、顺序存放,利用num控制输出格式将其输出。void valuepresort(apoker r,int len)int i,n,k;n=len;temp head,tail;n=len;for(i=0;i=n-1;i+)ri.next=i+1;/*构造静态链表*/rn.next=0;for(i=0;i=1;i+)/*从最低位关键字开始,进行分配收集*/distribute(r,i,head,tail);collect(r,head,tail);printf(按面值优先排序后的扑克:n);for(i=r0.next;i!=0;i=ri.next) k=(ri.num+2)%13; /*用num控
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 扑克牌 排序
链接地址:https://www.31ppt.com/p-2396705.html