数据结构课程设计-扑克牌的排序.doc_第1页
数据结构课程设计-扑克牌的排序.doc_第2页
数据结构课程设计-扑克牌的排序.doc_第3页
数据结构课程设计-扑克牌的排序.doc_第4页
数据结构课程设计-扑克牌的排序.doc_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

此文档收集于网络 如有侵权 请联系网站删除 精品文档 课课 程程 设设 计计 报报 告告 课程设计名称 数据结构课程设计数据结构课程设计 课程设计题目 扑克牌的排序扑克牌的排序 此文档收集于网络 如有侵权 请联系网站删除 精品文档 目目 录录 1 课程设计介绍课程设计介绍 1 1 1 课程设计内容 1 1 2 课程设计要求 1 2 课程设计原理课程设计原理 2 2 1 课设题目粗略分析 2 2 2 原理图介绍 2 2 2 1 功能模块图 2 2 2 2 流程图分析 3 3 数据结构分析数据结构分析 6 3 1 存储结构 6 3 2 算法描述 6 4 调试与分析调试与分析 12 4 1 调试过程 12 4 2 程序执行过程 12 参考文献参考文献 15 附附 录 关键部分程序清单 录 关键部分程序清单 16 此文档收集于网络 如有侵权 请联系网站删除 精品文档 1 课程设计介绍课程设计介绍 1 1 课程设计内容课程设计内容 编写算法能够用基数排序算法对扑克牌进行排序 应能够选择按花色优 先或按面值优先 初始扑克牌牌序要求能自动生成 随机生成 1 2 课程设计要求课程设计要求 1 花色的符号可自定 输出要求给出初始牌序和结果牌序 2 参考相应资料 独立完成课程设计任务 3 交规范课程设计报告和软件代码 此文档收集于网络 如有侵权 请联系网站删除 精品文档 2 课程设计原理课程设计原理 2 1 课设题目粗略分析课设题目粗略分析 根据课设题目要求 拟将整体程序分为三大模块 此三个模块相互独立 没有嵌套调用的情况 以下是三个模块的大体分析 1 建立一个结构体数组存放整副扑克 2 根据要求的扑克数及生成的随机数建立一个结构体数组存放需要排序 的扑克 3 用基数排序的方法对随机生成的扑克进行相应要求的排序 2 2 原理图介绍原理图介绍 2 2 1 功能模块图功能模块图 随机生成需排序的扑克 对扑克按花色优先排序 并输出 对扑克按面值优先排序并 输出 图 2 1 功能模块图 初始化生成整副扑克 此文档收集于网络 如有侵权 请联系网站删除 精品文档 2 2 2 流程图分析流程图分析 1 随机生成需排序的扑克函数流程图 如图 2 2 所示 Y Y 图 2 2 生成随机扑克的流程图 开始 i i 1 i t n rand r i huase poker n huase r i num poker n num r i order poker n order r i key 0 poker n huase r i key 1 poker n order k n 2 13 K 0 1 11 12 2111111 以 c 输出 value 以 d 输 出 value N 结束 r i huase poker n huase r i num poker n num r i order poker n order r i key 0 poker n huase r i key 1 poker n order k n 2 13 此文档收集于网络 如有侵权 请联系网站删除 精品文档 利用一个 for 循环及随机函数 rand 利用每次循环生成的随机数对应的 数值 num 建立初始的无序扑克 同时将 huase value 分别赋给关键字 key 0 key 1 以对其进行排序 2 对扑克进行花色优先排序的函数流程图 如图 2 3 所示 Y 图 2 3 对扑克进行花色优先排序的流程图 开始 i 0 i n 1 r i next i 1 i r n next 0 i 0 i 1 调用 distribute collect 函数 i i 0 输出人 r i huase r i value 结束 i r 0 next I Y Y N Y N 此文档收集于网络 如有侵权 请联系网站删除 精品文档 对长为 n 的数组 R 利用 next 域建立为静态链表 进行关键字先 key 1 面值 后 key 0 花色 的基数排序 排序后的数组按关键字 key 0 花色 优先的顺序存放 利用静态链表依次将其输出 3 对扑克进行面值优先排序的函数流程图如图 2 4 所示 Y 图 2 4 对扑克进行面值优先排序的流程图 开始 i 0 i 0 调用 distribute collect 函数 i i 0 输出人 r i huase r i value 结束 i r 0 next I Y Y N Y N 此文档收集于网络 如有侵权 请联系网站删除 精品文档 对长为 n 的数组 R 利用 next 域建成静态链表 进行关键字先 key 0 花色 后 key 1 面值 的基数排序 排序后的数组按关键字 key 1 面值 优先的顺序存放 利用静态链表依次将其输出 3 数据结构分析数据结构分析 3 1 存储结构存储结构 typedef struct int value 扑克面值 char huase 扑克花色 int num 控制面值输出形式 int order 在同一花色扑克的位置 int key 2 排序用的关键字 int next 下一个扑克的位置 apoker 定义一个结构体表示一张扑克 apoker poker 52 定义一个大小为 52 的结构体数 组存放整副扑克 apoker unsortpoker max 定义一个足够大的结构体数组 存放需排序的扑 克 typedef int temp radix 大小为关键字的基数的整形数组 用于基数排 序的分配 收集 3 2 算法描述算法描述 1 初始化建立扑克的算法描述说明如下 结构体名定义为 apoker poker 52 unsortpoker max 是 apoker 类型 对 其赋上每个结点的名字 每个名字对应自己的一个 num 以控制面值的输出 形式 value 对应扑克的面值 huase 对应扑克的花色 for i 0 i 52 i 建立整副扑克 j i 13 将扑克分为四种花色 此文档收集于网络 如有侵权 请联系网站删除 精品文档 k i 2 13 控制面值的输出形式 m i 13 同一花色中所处的位置 poker i order m if j 0 poker i huase 3 花色赋值 else if j 1 poker i huase 4 else if j 2 poker i huase 5 else poker i huase 6 if k 0 poker i value 75 面值赋值 else if k 1 poker i value 65 else if k 11 poker i value 74 else if k 12 poker i value 81 else poker i value k poker i num i 2 随机生成初始扑克的算法描述如下 利用一个 for 循环及随机函数 rand 利用每次循环生成的随机数对应的 数值 num 建立初始的无序扑克 同时将 huase value 分别赋给关键字 key 0 key 1 以对其进行排序 根据 num 控制扑克 value 的输出格式 for i 1 i t i 生成 t 张扑克 n rand 51 随机生成 52 以内的数 unsortpoker i huase poker n huase 结构体赋值 unsortpoker i value poker n value unsortpoker i num poker n num unsortpoker i order poker n order unsortpoker i key 0 unsortpoker i huase 关键字赋值 unsortpoker i key 1 unsortpoker i order k n 2 13 用 num 控制 value 输出形式 此文档收集于网络 如有侵权 请联系网站删除 精品文档 if k 0 k 1 k 11 k 12 printf c c poker n huase poker n value else printf c d poker n huase poker n value 3 按第 i 个关键字对记录分配算法如下 按第 i 位关键字 key i 建立 radix 个队列 同一队列中的 key i 相同 head i 和 tail i 分别指向各队列中第一个和最后一个记录 head j 0 表示相应 队列为空队列 void distribute apoker r int i temp head temp tail int j p for j 0 j radix j head j 0 tail j 0 将个队列初始化为空队列 p r 0 next p 指向链表中的第一个记录 while p 0 j r p key i 用记录中第 i 位关键字求相应队列号 if head j 0 head j p 将 p 所指向的结点加入第 i 个结点中 else r tail j next p tail j p p r p next 4 将分配后记录收集 连接算法如下 从 0 到 radix 1 依次扫描各队列 将所有非空队列首尾相接 重新链接成 一个链表 void collect apoker r temp head temp tail 此文档收集于网络 如有侵权 请联系网站删除 精品文档 int j int t j 0 while head j 0 找第一个非空队列 j r 0 next head j t tail j while j radix 1 寻找并串接所有非空队列 j while j radix 1 if head j 0 链接非空队列 r t next head j t tail j r t next 0 t 指向最后一个非空队列中的最后一个结点 5 按面值优先对扑克排序接算法如下 对长为 len 的数组 R 进行关键字先 key 0 花色 后 key 1 面值 的基数排序 排序后的数组按关键字 key 1 面值 优先的顺序存放 利用 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 r i next i 1 构造静态链表 r n next 0 for i 0 i 1 i 从最低位关键字开始 进行分配收集 distribute r i head tail collect r head tail printf 按面值优先排序后的扑克 n for i r 0 next i 0 i r i next k r i num 2 13 用 num 控制 value 输出形式 if k 0 k 1 k 11 k 12 printf c c r i huase r i value else printf c d r i huase r i value 6 按花色优先对扑克排序算法如下 对长为 len 的数组 R 进行关键字先 key 1 面值 后 key 0 花色 的基数排序 排序后的数组按关键字 key 0 花色 优先的顺序存放 利用 num 控制输出格 式将其输出 void huasepresort apoker r int len int i n k n len temp head tail n len for i 0 i 0 i 从最低位关键字开始 进行分配收集 此文档收集于网络 如有侵权 请联系网站删除 精品文档 distribute r i head tail collect r head tail printf 按花色排序后的扑克 n for i r 0 next i 0 i r i next k r i num 2 13 用 num 控制 value 输出形式 if k 0 k 1 k 11 k 12 printf c c r i huase r i value else printf c d r i huase r i value 此文档收集于网络 如有侵权 请联系网站删除 精品文档 4 调试与分析调试与分析 4 1 调试过程调试过程 在调试过程中 使用函数 rand 时 出现 rand undeclared identifier 意识到 是由于没有添加 includes这个头文件造成的 修改后就可以运行了 还 有一个出现的问题是 在一个 for 循环中将 i 错写为 j 导致程序无法正常运行 通过单步跟踪 找出问题 在字符 ch 的输入时少写了取地址符 使程序无法运 行 加上后程序运行正常 4 2 程序执行过程程序执行过程 首先要输入需生成的扑克数 如图 4 1 所示 图 4 1 进入系统的界面 此文档收集于网络 如有侵权 请联系网站删除 精品文档 生成需要张数的扑克如图 4 2 所示 图 4 2 随机生成的扑克 选择按花色优先排序后的扑克 如图 4 3 所示 图 4 3 按花色优先排序后的扑克 此文档收集于网络 如有侵权 请联系网站删除 精品文档 选择按面值优先排序后的扑克 如图 4 4 所示 图 4 4 按面值优先排序后的扑克 直到输入操作选 C 退出系统 算法结束 如图 4 5 所示 图 4 5 退出系统后的界面 此文档收集于网络 如有侵权 请联系网站删除 精品文档 参考文献参考文献 1 严蔚敏 吴伟民 数据结构 M 北京 清华大学出版社 2007 2 张长海 陈娟 C 程序设计 M 北京 高等教育出版社 2004 3 谭浩强 C 程序设计 M 北京 清华大学出版社 2005 4 苏士华 黄学俊 数据结构 解析 习题 课程设计 M 合肥 中国科学技术大学 出版社 2009 5 张瑞军 数据结构 M 北京 清华大学出版社 2009 6 刘怀亮 数据结构 习题解析与实验指导 M 北京 冶金出版社 2009 此文档收集于网络 如有侵权 请联系网站删除 精品文档 附附 录 关键部分程序清单 录 关键部分程序清单 程序代码程序代码 include include include define radix 13 typedef struct int value char huase int num int order int key 2 int next apoker apoker poker 52 typedef int temp radix apoker createpoker apoker unsortpoker int t int i j k m int n for i 0 i 52 i j i 13 k i 2 13 m i 13 poker i order m if j 0 poker i huase 3 else if j 1 poker i huase 4 else if j 2 poker i huase 5 else poker i huase 6 if k 0 poker i value 75 else if k 1 poker i value 65 else if k 11 poker i value 74 else if k 12 poker i value 81 else poker i value k poker i num i printf 随机生成的扑克 n 此文档收集于网络 如有侵权 请联系网站删除 精品文档 for i 1 i t i n rand 51 unsortpoker i huase poker n huase unsortpoker i value poker n value unsortpoker i num poker n num unsortpoker i order poker n order unsortpoker i key 0 unsortpoker i huase unsortpoker i key 1 unsortpoker i order k n 2 13 if k 0 k 1 k 11 k 12 printf c c poker n huase poker n value else printf c d poker n huase poker n value return unsortpoker void distribute apoker r int i temp head temp tail int j p for j 0 j radix j head j 0 tail j 0 p r 0 next while p 0 j r p key i if head j 0 head j p else r tail j next p tail j p p r p next void collect apoker r temp head temp tail int j int t j 0 while head j 0 j 此文档收集于网络 如有侵权 请联系网站删除 精品文档 r 0 next head j t tail j while j radix 1 j while j radix 1 if head j 0 r t next head j t tail j r t next 0 void valuepresort apoker r int len int i n k n len temp head tail n len for i 0 i n 1 i r i next i 1 r n next 0 for i 0 i 1 i distribute r i head tail collect r head tail printf 面值优先排序排序后的扑克 n for i r 0 next i 0 i r i next k r i num 2 13 if k 0 k 1 k 11 k 12 printf c c r i huase r i value else printf c d r i huase r i value void huasepresort apoker r int len int i n k n len temp head tail 此文档收集于网络 如有侵权 请联系网站删除 精品文档 n len for i 0 i 0 i distribute r i head tail collect r head tail printf 花色优先排序后的扑克 n for i r 0 next i 0 i r i next k r i num 2 13 if k 0 k 1 k 11 k 12 printf c c r i huase r i value else printf c d r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论