数据结构课程设计.doc
《数据结构课程设计.doc》由会员分享,可在线阅读,更多相关《数据结构课程设计.doc(33页珍藏版)》请在咨信网上搜索。
1、 桂林航天工业学院实验报告系(部): 计算机科学与工程系 课程名称: 数据结构 专业班级: 计算机应用技术1班 学 号: 学生姓名: 完成日期: 2016年12月22日一、 运行环境操作系统:Windows10 64位操作系统编译软件:Microsoft Visual C+ 6.0处理器:Intel(R)Core(TM)2 CPU 6320 1.86GHz 1.86GHz安装内存(RAM):2.00GB二、 算法设计的思想和设计分析及流程图1.线性表的顺序存储1插入:算法思想:查找到元素X需要插入到线性表L的位置i,将该位置i后面的元素后移,将要元素X插入到i位置,表长加1。设计分析:先使用i
2、f(L-last=MAXSIZE1-1)提示空间满else if(iL-last+2)提示位置错误函数判断位置i在该线性表L中是否存在,若位置i正确再使用for(j=L-last;j=i-1;j-)L-dataj+1=L-dataj;使该位置i后面的数据元素后移,然后将数据元素插入到位置i,表长加1。流程图:2删除:算法思想:先判断线性表L是否存在数据元素i,然后在线性表L中删除序号为i的数据元素,删除后使序号为 i+1, i+2,., n 的元素变为序号为 i, i+1,.,n-1,删除后新表长=原表长-1。设计分析:先使用if(iL-last+1)提示数据元素不存在判断元素i在线性表L中是
3、否存在,若数据元素i存在再使用for(j=i;jlast;j+)L-dataj-1=L-dataj;L-last-;使数据元素i后面的数据元素前移,将数据元素i覆盖删除,然后表长减1。流程图:3查找:算法思想:调用函数查找数据元素i,如果其调用函数结果返回在线性表L中首次出现的值为i的那个元素的序号或地址,称为查找成功; 否则,在L中未找到值为的数据元素,返回某特殊值表示查找失败。设计分析:先使用while(ylast & L-datay!=x)y+;查找数据元素i在线性表L中的位置,如果查找失败则使用if(yL-last)return -1;返回特殊值,否则使用else return y+1
4、;返回该数据元素的地址。流程图:4Main主函数:算法思想:使用Dowhile实现主函数的菜单界面,使用switchcase实现函数的调用。 设计分析:使用dowhile做出主菜单,使用scanf(%d,&k);getchar();switch(k)case 1: case 2: case 3: case 4: case 5:实现函数的调用。2. 线性表的链式存储1建表:算法思想:使用头插入法建立单链表,该方法从一个空表开始,重复读入数据,生成新结点,将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头上,直到读入结束标志为止。 设计分析: 使用p=(LNode2*)malloc
5、(sizeof(LNode2);开辟一个动态空间使用p-data=c; p-next=head;进行赋值和使指针后移,再用head=p;使head与p同指向。流程图:2按序号查找:算法思想:调用函数查找数据元素i,从链表的头指针出发,顺链域next逐个结点往下搜索,直到搜索到第i个结点为止。设单链表的长度为n,要查找表中第i个结点,仅当1in时,i的值是合法的。但有时需要找头结点的位置,故我们将头结点看做是第0 个结点。设计分析: 使用while(p-next & jnext; j+;进行地址和指针后移,再用if (i=j) return p; else return NULL;返回查找结果。
6、流程图:3插入:算法思想:插入运算是将值为x的新结点插入到表的第i个结点的位置上首先找到ai-1的存储位置p,然后生成一个数据域为x的新结点*q,并令结点*p的指针域指向新结点,新结点的指针域指向结点ai。设计分析: 使用p=Get_LinkList(L,i-1);if(p=NULL)printf(位置错误);return 0;判断i的是否存在,若存在,则使用q=(LNode*)malloc(sizeof(LNode);q-data=x;q-next=p-next;p-next=q;进行插入,再用return 1返回插入结果。流程图:4删除:算法思想:将表的第i个结点删去,是在单链表中结点ai
7、的存储地址是在其直接前趋结点a a i-1的指针域next中,所以我们必须首先找到a i-1的存储位置p。然后令pnext指向ai的直接后继结点,即把ai从链上摘下。最后释放结点ai的空间。设计分析: 使用p=Get_LinkList(L,i-1); if(p-next=NULL)return 0;判断i的是否存在,若存在,则使用q=p-next;p-next=q-next;free(q);进行删除和释放,再用return 1返回删除结果。流程图:5Main主函数:算法思想:使用Dowhile实现主函数的菜单界面,使用ifelse实现函数的调用。 设计分析:使用dowhile做出主菜单,使用s
8、canf(%d,&k);getchar();if (k=1)else if (k=2)else if (k=3)实现函数的调用。3. 栈的应用1置空栈:算法思想:使链栈的头指针指向空。设计分析:使用top=NULL; 将头指针赋值为空。流程图:2链式进栈:算法思想:在栈顶插入新的元素,先使栈顶指针top加1,再给top赋值设计分析:使用p=(LinkStack3)malloc(sizeof(StackNode3);建立新结点,使用p-data =x; p-next=top; top=p;实现栈顶top的加1和赋值。 流程图:3链式入栈:算法思想:先使栈顶指针top减1,再释放删除的数据i。设计
9、分析:使用*x=top-data ; p=top; top=top-next ; free(p);实现栈顶top的减1和释放。 流程图:4Main主函数:算法思想:使用Dowhile实现主函数的菜单界面,使用switchcase实现函数的调用。 设计分析:使用dowhile做出主菜单,使用scanf(%d,&k);getchar();switch(k)case 1: case 2: case 3: case 4: case 5:实现函数的调用。4. 队列的应用1置空队:算法思想:对头指针front和队尾指针rear指向同一个位置设计分析:使用Q-rear=Q-front=T; T-next=N
10、ULL 将头指针front和队尾指针rear指向同一个位置T,再把T的next指向NULL。流程图:2进队列:算法思想:入队时将新元素插入队尾指针rear所指的位置,然后将队尾指针rear加设计分析:使用p-data=x;新元素插入队列,再使用p-next=NULL; Q-rear-next=p; Q-rear=p; rear指针加1 流程图:3出队列:算法思想:出队时先判断元素是否存在,若存在则将队尾指针rear减,再释放元素。设计分析:使用if(queueempty(Q) 判断元素是否存在,若存在再使用p=Q-front; x=p-next-data; Q-front=p-next;fre
11、e(p); 将队尾指针rear减和释放元素。流程图:4Main主函数:算法思想:使用Dowhile实现主函数的菜单界面,使用switchcase实现函数的调用。 设计分析:使用dowhile做出主菜单,使用scanf(%d,&k);getchar();switch(k)case 1: case 2: case 3: case 4: case 5:实现函数的调用。5. 二叉树的遍历和应用1建二叉树算法思想:对一般的二叉树,首先添加若干个虚结点,使其成为完全二叉树,然后依次输入结点信息,若输入结点非虚结点,则建立一个新结点;若是第一个则令其为根结点,否则将新结点链接到它的双亲结点上。如此反复直到输
12、入结束信息为止。设计分析:使用scanf(%d,&x);if (x=0) 判断输入结点结束,再使用T=(BTree5 *)malloc(sizeof(BTree5) ;T-data=x;printf( 请输入 %d 结点的左孩子:,T-data);T-LChild=CreatBTree();printf( 请输入 %d 结点的右孩子:,T-data);T-RChild=CreatBTree();二叉树的前序遍历的递归算法建立二叉树。流程图:2前序递归遍历二叉树算法思想:访问根结点,先序遍历左子树,先序遍历右子树。设计分析:使用printf(%d ,T-data); 访问根结点 使用PreOrd
13、er(T-LChild) ; 递归遍历左子树 使用PreOrder(T-RChild) ; 递归遍历右子树流程图:3中序递归遍历二叉树算法思想:中序遍历左子数,访问根节点,中序遍历右子树设计分析:使用InOrder(T-LChild) ; 递归遍历左子树 使用printf(%d ,T-data); 访问根结点 使用InOrder(T-RChild) ; 递归遍历右子树流程图:4后序递归遍历二叉树算法思想:后序遍历左子树,访问根节点,后序遍历右子树设计分析:使用postOrder(T-LChild) ; 递归遍历左子树 使用postOrder(T-RChild) ; 访问根结点 使用printf
14、(%d ,T-data); 递归遍历右子树流程图:5Main主函数:算法思想:使用Dowhile实现主函数的菜单界面,使用ifelse实现函数的调用。 设计分析:使用dowhile做出主菜单,使用scanf(%d,&k);getchar();if (k=1)else if (k=2)else if (k=3)实现函数的调用。三、 源代码1. 一级菜单#include 实验1.c#include 实验2.c#include 实验3.c#include 实验4.c#include 实验5.cvoid main() int k; do printf(nnnn);printf(ttt 数据结构课程设计
15、一级菜单n);printf(tt*n);printf(tt* 1-线性表的顺序存储 *n);printf(tt* 2-线性表的链式存储*n);printf(tt* 3-栈的应用 *n);printf(tt* 4-队列的应用 *n);printf(tt* 5-二叉树的遍历和应用*n);printf(tt* 0-返回 *n);printf(tt*n);printf(tt 请选择菜单项(05):);scanf(%d,&k);getchar();switch(k)case 1: main1(); /线性表的顺序存储break; case 2: main2(); /线性表的链式存储break;case
16、3: main3(); /栈的应用break;case 4: main4(); /队列的应用break;case 5: main5(); /二叉树的遍历和应用break;while(k!=0);2. 实验1-线性表的顺序存储#include stdio.h#include malloc.h#define MAXSIZE1 200 /线性表允许的最大长度#define datatype1 inttypedef struct /定义线性表的结构 datatype1 dataMAXSIZE1; /表示线性表(a1,a2,.,an) int last; /last表示线性表的实际长度 SeqList1
17、; /* 线性表初始化:Init_List(L)初始条件:表L不存在操作结果:构造一个空的线性表 */SeqList1 *insert_SeqList( ) SeqList1 *L; L=(SeqList1 *)malloc(sizeof(SeqList1);/L=new SeqList; L-last=-1; return L;/* 插入操作:Insert_List(L,i,x)初始条件:线性表L存在,插入位置正确 (1=ilast=MAXSIZE1-1)printf(空间满);return 0; else if(iL-last+2)printf(位置错误);return 0;for(j=L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【a199****6536】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【a199****6536】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。