ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:152.10KB ,
资源ID:6626530      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6626530.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构课程设计报告附源码.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构课程设计报告附源码.docx

1、数据结构课程设计报告附源码数据结构与算法课程设计报告(2012 2013学年 第 3 学期)专 业: 班 级: 姓 名: 学 号: 指导教师: 成 绩: 计算机与信息工程学院2013年7月12日目 录一. 课程设计的目的与要求(含设计指标)2二. 方案实现与调试22.1停车场管理系统2.1.1算法描述及实验步骤1、 问题描述即要求2、 需求分析3、 概要设计4、 详细设计5、 调试分析6、 测试结果7、 用户手册8、 改进方案2.2公共祖先2.2.1算法描述及实验步骤1、 问题描述即要求2、 需求分析3、 概要设计4、 详细设计5、 调试分析6、 测试结果7、 用户手册8、 改进方案2.3叶子

2、节点排序2.3.1算法描述及实验步骤1、 问题描述即要求2、 需求分析3、 概要设计4、 详细设计5、 调试分析6、 测试结果7、 用户手册8、 改进方案2.4插入冒泡2.4.1算法描述及实验步骤1、 问题描述即要求2、 需求分析3、 概要设计4、 详细设计5、 调试分析6、 测试结果7、 用户手册8、 改进方案三课程设计分析与总结11四. 源程序清单11一. 课程设计的目的与要求(含设计指标) 基本要求:学生必须仔细阅读数据结构课程设计指导书,认真主动完成课程设计的要求。有问题及时主动通过各种方式与教师联系沟通。学生要发挥自主学习的能力,充分利用时间,安排好课设的时间计划,并在课程设计过程中

3、不断检测自己的计划完成情况,有困难及时向教师汇报。课程设计按照教学要求需要一周时间完成,一周中每天(按每周5天)上机调试程序时间不少于4小时,总共至少要上机调试程序15小时。根据设计报告要求编写设计报告,主要内容包括目的、意义、原理和实现方法简介、过程分析及说明、实验结果情况说明、结论。二. 方案实现与调试2.1停车场管理系统2.1.1算法描述及实验步骤1.问题描述即要求停车场是一个可停放n辆汽车的狭长通道,并只有一个大门可供汽车进出,汽车在停车场内按车辆到达的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),如车长内已停满n辆汽车,则后来的汽车只能在门外的便道

4、上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用,以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理每一组输入数据包括三个数据项:汽车”到达”或”离去”信息,汽车牌照号码以及到达或离去的时刻(到达或离去的时刻也可用计算机控制)对每一组输入数据进行操作后的输入信息为:如是车辆到达,则输入汽车在停车场内或便道上的停留位置;如是车辆离去,则输入汽车在停车场内停留的时间和应交的费用。2、需求

5、分析 每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场应交纳的费用和它在停车场内停留的时间。3、概要设计 1、系统分为:初始化、有车进入、有车离开、退出四个模块。2、停车场管理程序4 详细设计 菜单函数设计: 分为初始化、有车进入、有车离开、退出。void menu() int n,w; do puts(*MENU*); puts(1.初始化); puts(2.有车进入); puts(3.有车离开); puts(4.退出); printf(请选择你需要的服务(1-4):); scanf(%d,&n); if(n4) w=1; getchar(); else w=0; while(

6、w=1); switch(n) case 1:chushi();break;/*停车函数*/ case 2:jinru();break;/*开车函数*/ case 3:likai();break;/*退出*/ case 4:exit(0);break;/*初始化*/ 初始化模块设计:将车道和停车场内所有的车清空。void chushi()/*初始化*/ int i,j; for(i=0;iN;i+) chni.neikong=0;/*停车场设置为空*/ for(j=0;jM;j+) chwi.waikong=0; printf(已初始化); menu(); 进入函数设计:车辆到达需要给车编号及

7、给出车停的位置和停车时间等。void jinru()/*车辆进入函数*/ int i,a; int h=0; printf(请输入该车系序号(从0开始):); scanf(%d,&a); for(i=0;iparent,然后将q的所有父节点依次和p-parent作比较,如果发现两个节点相等,则该节点就是最近公共祖先,直接将其返回。如果没找到相等节点,则将q的所有父节点依次和p-parent-parent作比较.直到p-parent=root。1.采用二叉链表的存储格式,按先序序列输入右图 二叉树节点的值,用*代表虚结点(空指针),对右图 输入应为AB*DF*J*G*K*C*EH*IL*M*,先

8、序遍历 二叉树,输出节点的值。前序遍历输出正常 2.输入任意两个子节点的值,输出其最小公共祖先, 从二叉树的结构图中可以看出J和H的公共祖先只有根节点,也就是最小公共祖先,故输出A正确。 3.若输入的两个子节点的公共祖先不止一个,则输出两者的所有公共祖先,第一个输出的为最小公共祖先,如输入HM,输出应为:ECA,E为最小公共祖先2.2.2调试过程及实验结果本实验要求掌握二叉树的基本操作,熟悉二叉树的前序、中序、后序遍历操作,并能利用二叉树的基本操作解决相关的程序问题,我选取了数据结构(C语言版)习题集上的一道题目:在二叉树T中求结点*p和*q的共同最小祖先,即LCA问题,作为实验内容进行实验。

9、 如果二叉树结点数据结构中有父指针,那这个问题将变得非常简单,只要分别从两个结点出发向上走到树根,得到两个结点的分支路径,求出这两条路径相互重合部分的最靠下的结点,就是所求的LCA. 但实际情况是,通常二叉树结点中并没有父结点指针,如本实验中采用的就是只有左右孩子指针的二叉链表存储形式,这时候就要遍历二叉树找到这两个结点,并找出它们的LCA.实际上,在遍历二叉树的时候,很容易就能够记录下根结点到任何结点的分支路径,只要有了分支路径,就可以对比找出LCA。 采取前序遍历,即NLR的顺序,使用结构体数组来避免递归并且记录完整的分支路径 。将从根节点开始到这两个子结点之间所有经过的结点分别保存到两个

10、数组中,将两个数组的长度均调整为两个数组之中长度较短的一个的长度,因为两者路径中最小公共祖先及其之前的节点(直到根节点)均相同,这样从最后一个元素开始比较这两个数组中的元素,遇到相同的元素输出,则输出的元素即为两个节点的公共祖先,其中第一个输出的元素为最小公共祖先。 根据上述思想,我设计了算法,经过编程调试,输出正常,说明程序没有错误。虽然上述算法不是最优算法,参阅网上资料可以看到有更好的优化算法,但其综合运用了自己所学的二叉树的建立,遍历,数组结构体等方面的知识,所以对自己巩固所学知识,提高应用能力,还是有很大帮助的。2.3题目:2.3.1算法描述及实验步骤1. 题目要求设计一个算法,把二叉

11、树的叶子结点按从左到右的顺序连成一个单链表。二叉树用二叉链存储,链接时用叶子结点的rchild 域存放指针。2. 应用程序功能程序运行结果如下:3. 输入数据类型、格式和内容限制输入数据为整型,切勿输入整型以外数据类型,否则程序将进入循环。4. 主要算法模块描述流程图:2.4各种排序2.3.1算法描述及实验步骤一、冒泡排序已知一组无序数据a1、a2、an,需将其按升序排列。首先比较a1与 a2的值,若a1大于a2则交换两者的值,否则不变。再比较a2与a3的值,若a2大于a3则交换两者的值,否则不变。再比 较a3与a4,以此类推,最后比较an-1与an的值。这样处理一轮后,an的值一定是这组数据

12、中最大的。再对a1an- 1以相同方法处理一轮,则an-1的值一定是a1an-1中最大的。再对a1an-2以相同方法处理一轮,以此类推。共处理 n-1轮后a1、a2、an就以升序排列了。二、插入排序已知一组升序排列数据a1、a2、an,一组无序数据b1、 b2、bm,需将二者合并成一个升序数列。首先比较b1与a1的值,若b1大于a1,则跳过,比较b1与a2的值, 若b1仍然大于a2,则继续跳过,直到b1小于a数组中某一数据ax,则将axan分别向后移动一位,将b1插入到原来 ax的位置这就完成了b1的插入。b2bm用相同方法插入。(若无数组a,可将b1当作n=1的数组a)优点:稳定,快;缺点:

13、比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。2.3.2调试过程及实验结果三课程设计分析与总结通过本次课程设计,使我对数据结构和算法设计有了新的了解和认识,以前编程只是注重如何编写函数能够完成所要求的功能,只是凭单纯的意识和简单的语句来搭配一段程序,但现在感觉不一样了,在编写一个程序之前,经过仔细考虑,挑选出最适合当前题目的算法。这样,即使在完整的程序还没有写出来之前,自己心中已经有了清晰的构思了,除此之外,也让我真正理解定义数据类型的好处,这样才能用好这样一种数据结构。总之,学习它让我觉得受益匪浅!四. 源程序清单#include

14、#include#include#define N 100/*预设停车场有100个车位*/#define M 100/*预设便道有100各出位*/#define D 1.2/*预设车辆停车费为1.2元每小时*/#define NUMBER 100void menu();void chushi();void jinru();void likai();struct car int carnum; int cararr; int carlef; int carstay;carNUMBER;struct park int neikong;chnN-1;struct changwai int waiko

15、ng;chwM-1;void main() menu();/*菜单*/ void menu() int n,w; do puts(*MENU*); puts(1.初始化); puts(2.有车进入); puts(3.有车离开); puts(4.退出); printf(请选择你需要的服务(1-4):); scanf(%d,&n); if(n4) w=1; getchar(); else w=0; while(w=1); switch(n) case 1:chushi();break;/*停车函数*/ case 2:jinru();break;/*开车函数*/ case 3:likai();bre

16、ak;/*退出*/ case 4:exit(0);break;/*初始化*/ void chushi()/*初始化*/ int i,j; for(i=0;iN;i+) chni.neikong=0;/*停车场设置为空*/ for(j=0;jM;j+) chwi.waikong=0; printf(已初始化); menu();void jinru()/*车辆进入函数*/ int i,a; int h=0; printf(请输入该车系序号(从0开始):); scanf(%d,&a); for(i=0;iN;i+) if(chni.neikong=0)/*无车标记*/ if(chni.neikong

17、=1)/*有车标记*/ h=h+1; if(h=N) printf(停车场内已满!);else cara.carstay=h; chnh.neikong=1; printf(该车应该停在停车场内); printf(请输入该车进停车场时间:); scanf(d%,&cara.cararr); menu();void likai()/*车辆离开函数*/int i,k,choi,time;double fee;printf(请输入离开车辆次序号,&i);scanf(%d,&i);printf(请输入离开时间:);scanf(%d,&cari.carlef);fee=D*(cari.carlef-ca

18、ri.cararr);time=cari.carlef-cari.cararr;printf(次序号为%d的车停时间%d小时,应收费%f元,i,time,fee);printf(便道上现在有车么?(请选择1或2)1.有。2.没有);scanf(%d,&choi);if(choi=2) menu();if(choi=1) printf(请让便道上的第一辆车进场); printf(该车次序号为:); scanf(%d,&cark.cararr); menu();2.#include #include #define null 0#define ERROR 0int counter=0;typede

19、f int TElemType;typedef struct BiTNode TElemType data; struct BiTNode *lchild,*rchild;BiNode, *Bitree;Bitree root;/定义根结点 insert_data(int x) /*生成二叉排序树*/ Bitree p,q,s; s=(Bitree)malloc(sizeof(BiNode); /创建结点 s-data=x; /结点赋值 s-lchild=NULL; s-rchild=NULL; if(!root) root=s; else p=root; while(p) /*如何接入二叉排

20、序树的适当位置*/ q=p; if(p-data=x) /相同结点不能重复插入 printf(data already exist! n); return; else if(xdata) p=p-lchild; else p=p-rchild; if(xdata) q-lchild=s; else q-rchild=s; int FindLowestCommonAncestor(BiNode *root, int v1, int v2) BiNode *n = root; while(1) if (n-datav1& n-datav2) n = n-lchild; else if(n- dat

21、a data rchild; else return n-data; void main() /*先生成二叉排序树*/ BiNode *bt,*p,*q; int x,y,a,b; int i=1; /i记录结点个数,x存放结点值 root=NULL; /*千万别忘了赋初值给root!*/ printf(请输入数据,-9999表示输入结束n); do printf(please input data %d:,i); i+; scanf(%d,&x); /*从键盘采集数据,以-9999表示输入结束*/ if(x=-9999) printf(nNow output data value:n); e

22、lse insert_data(x); /*调用插入数据元素的函数*/ while(x!=-9999); printf(请任意输入树中存在的两个结点:); scanf(%d,%d,&a,&b); y = FindLowestCommonAncestor(root, a, b); printf(输出%d和%d的最低公共祖先:,a,b); printf(%dn,y);3.#include #include typedef int TElemType;typedef struct Node TElemType data; struct Node *lchild,*rchild;Node,*tree;

23、tree root,L,t;/定义根结点 int n=0;void insert_data(int x) /*生成二叉排序树*/ tree p,q,s; s=(tree)malloc(sizeof(Node); /创建结点 s-data=x; /结点赋值 s-lchild=NULL; s-rchild=NULL; if(!root) root=s; else p=root; while(p) /*如何接入二叉排序树的适当位置*/ q=p; if(p-data=x) /相同结点不能重复插入 printf(data already exist! n); return; else if(xdata) p=p-lchild; else p=p-rchild; if(xdata) q-lchild=s; else q-rchild=s; int PreOrderTraverse(tree root) if (root!=NULL) /非空二叉树 if(root-lchild=NULL&root-rchild=NULL) t-rchild=root; t=root; PreOrderTraverse(root-lchild); /递归遍历左子树 PreOrderTraverse(root-rchild); /递归遍历右子树 return(0);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1