2024年10月大二数据结构课程设计报告(《数据结构 课程设计》表达式求值 实验报告)

 更新时间:2024-10-12

  ⑴大二数据结构课程设计报告(《数据结构课程设计》表达式求值实验报告

  ⑵《数据结构课程设计》表达式求值实验报告

  ⑶算术表达式求值演示一、概述数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次的课程设计中我选择的题目是算术表达式求值演示。表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。二、系统分析.以字符列的形式从终端输入语法正确的、不含变量的整数表达式。利用已知的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。.一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编出程序,进行测试,调试直至得到想要的答案。对于算术表达式这个程序,主要利用栈,把运算的先后步骤进行分析并实现简单的运算!为实现算符优先算法,可以使用两个栈,一个用以寄存运算符,另一个用以寄存操作数和运算结果。.演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言的转化。.程序执行时的命令:本程序为了使用具体,采用菜单式的方式来完成程序的演示,几乎不用输入什么特殊的命令,只需按提示输入表达式即可。(要注意输入时格式,否者可能会引起一些错误.测试数据。算术表达式求值演示一、概述数据结构课程设计,要求学生在数据结构的逻辑特性和物理表示、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。在这次的课程设计中我选择的题目是算术表达式求值演示。表达式计算是实现程序设计语言的基本问题之一,也是栈的应用的一个典型例子。设计一个程序,演示用算符优先法对算术表达式求值的过程。深入了解栈和队列的特性,以便在解决实际问题中灵活运用它们,同时加深对这种结构的理解和认识。二、系统分析.以字符列的形式从终端输入语法正确的、不含变量的整数表达式。利用已知的算符优先关系,实现对算术四则混合运算表达式的求值,并仿照教科书的例子在求值中运算符栈、运算数栈、输入字符和主要操作的变化过程。.一般来说,计算机解决一个具体问题时,需要经过几个步骤:首先要从具体问题抽象出一个适当的数学模型,然后设计一个解决此数学模型的算法,最后编出程序,进行测试,调试直至得到想要的答案。对于算术表达式这个程序,主要利用栈,把运算的先后步骤进行分析并实现简单的运算!为实现算符优先算法,可以使用两个栈,一个用以寄存运算符,另一个用以寄存操作数和运算结果。.演示程序是以用户于计算机的对话方式执行,这需要一个模块来完成使用者与计算机语言的转化。.程序执行时的命令:本程序为了使用具体,采用菜单式的方式来完成程序的演示,几乎不用输入什么特殊的命令,只需按提示输入表达式即可。(要注意输入时格式,否者可能会引起一些错误.测试数据。操作集合:()voidInitStack(SqStack&S);//声明栈建立函数()voidInitStack(SqStack&S);//声明栈建立函数()voidevaluate(SqStack&S,SqStack&S);//确定如何入栈函数()voidPush(SqStack&S,chare);//声明入栈函数()voidPush(SqStack&S,floate);//声明入压栈函数()charGetTop(SqStack&S);//声明取栈顶元素函数()floatGetTop(SqStack&S);//声明取栈顶元素函数()charPop(SqStack&S);//声明出栈函数()floatPop(SqStack&S);//声明出栈函数()charpare(charm,charn);//声明比较函数()floatOperate(floata,charrheta,floatb);//声明运算函数()voidDispStack(SqStack&S);//从栈底到栈顶依次输出各元素()voidDispStack(SqStack&S);//从栈底到栈顶依次输出各元素}ADTSqStack结构分析:栈中的数据节点是通过数组来存储的。因为在C语言中数组是用下标从零开始的,因此我们在调用他们的数据是要特别注意。指针变量的值要么为空(NULL),不指向任何结点;要么其值为非空,即它的值是一个结点的存储地址。注意,当P为空值时,则它不指向任何结点,此时不能通过P来访问结点,否则会引起程序错误。如果输入的数字不符合题目要求,则会产生错误结果。算法的时空分析:时间和空间性能分析:时间上,对于含n个字符的表达式,无论是对其进行合法性检测还是对其进行入栈出栈操作n次,因此其时间复杂度为O(n)。空间上,由于是用数组来存储输入的表达式,用栈来存储运算中的数据和运算符,而栈的本质也用到的数组,数组在定义时必须确定其大小。在不知表达式长度的情况下确定数组的长度确非易事,此时极易造成空间的浪费,因此空间性能不是很好。

  ⑷数据结构的课程设计报告要怎么写啊

  ⑸晕/////真麻烦。。。。。数据结构实习报告规范实习报告的开头应给出题目、班级、姓名、学号和完成日期,并包括以下七个内容:、需求分析以无歧义的陈述说明程序设计的任务,强调的是程序要做什么?明确规定:(输入的形式和输入值的范围;(输出的形式;(程序所能达到的功能;(测试数据:包括正确地输入及其输出结果和含有错误的输入及其输出结果。、概要设计说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用关系。、详细设计实现概要设计中定义的所有数据类型,对每个操作只需要写出伪码算法;对主程序和其他模块也都需要写出伪码算法(伪码算法达到的详细程度建议为:按照伪码算法可以在计算机键盘直接输入高级程序设计语言程序;画出函数的调用关系图。、调试分析内容包括:(调试过程中遇到的问题是如何解决的以及对设计与实现的回顾讨论和分析;(算法的时空分析(包括基本操作和其他算法的时间复杂度和空间复杂度的分析和改进思想;(经验和体会等。、用户使用说明说明如何使用你编写的程序,详细列出每一步操作步骤。、测试结果列出你的测试结果,包括输入和输出。这里的测试数据应该完整和严格,最好多于需求分析中所列。、附录题目:约瑟夫-实习报告尺寸:约瑟夫-实习报告.doc目录:一、需求分析二、概要设计三、程序具体设计及函数调用关系四、调试分析五、测试结果原文:实习报告题目:约瑟夫(Joseph问题的一种描述是:编号为,,......,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数。一开始任选一个整数作为报数上限值m,从第一个人开始按顺时针方向自开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个开始重新从报数,如此下去,直至年有人全部出列为止。试设计一个程序求出出列顺序。班级:姓名:学号:完成日期:一、需求分析.本演示程序中,利用单向循环链表存储结构存储约瑟夫环数据(即n个人的编号和密码。.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息“之后,由用户在键盘上输入演示程序中需要输入的数据,运算结果显示在其后。.程序执行的命令包括:)构造单向循环链表;.测试数据m的初值为;n=,个人的密码依次为:,,,,,,,首先m值为(正确的出列顺序为,,,,,,,。二、概要设计.单向循环链表的抽象数据类型定义为:ADTList{数据对象:D={ai|ai∈正整数,I=,,......,n,n≥}数据关系:R={《ai-,ai》|,ai-,ai∈D,I=,,......,n}基本操作:InitList(&L)操作结果:构造一个空的线性表L。ListInsert(&L,i,e)初始条件:线性表L已存在,≤i≤ListLength(L)+.操作结果:在L中第i个位置之前插入新的数据无素e,L长度加。ListDelete(&L,i,&e)初始条件:线性表L存在非空,≤i≤ListLength(L).操作结果:删除L的第i个元素,并用e返回其值,L长度减。.程序包含四个模块:主程序模块:

  ⑹我正好在做课设,我把我的总结给你。数据结构是计算机程序设计的重要理论技术基础,它不仅是计算机科学的核心课程,而且也已经成为其他理工专业的热门选修课。随着高级语言的发展,数据结构在计算机的研究和应用中已展现出强大的生命力,它兼顾了诸多高级语言的特点,是一种典型的结构化程序设计语言,它处理能力强,使用灵活方便,应用面广,具有良好的可移植性。紧张的两周数据结构实训很快就过去了,通过这两周的实践学习,不仅使我们巩固了以前的知识并在此基础上还对数据结构的特点和算法有了更深的了解,使我们在这门课程的实际应用上也有了一个提高。首先这两周的学习,使我们在巩固了原有的理论知识上,又培养了灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力,使我们体会到自身知识和能力在实际中的应用和发挥。其次,它激发了我们创新意识,开发创造的能力和培养沟通能力。另外,让我们进一步熟悉了数据结构的设计应用。每一处编码都是在反复的熟悉数据结构的结构特性,及其语法、函数和程序设计思想的过程,对我们数据结构的学习和提高很有益处,并且使我们明白了程序设计过程,如解决一些实际问题,从解决实际问题的角度,我们可以这样来看:第一要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;第二,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的数据结构的基本类型——线性表、栈、队列、串、数组、广义表、树和二叉树以及图等,然后确定处理过程——算法,通过在编译环境中的编译与调试,可到最终的程序。最后,在这次的实训过程中,我们深刻的认识到了自己在学习方面的不足之处,我知道我还有太多的基本的思想没有真正的理解,当然我们不会灰心,我们会在以后的日子里努力弥补我们的不足。在两周的实训中,我们也体会到了团队合作的重要性,从最初的查阅资料到最后的程序的成功运行,我们组有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。两个礼拜的时间我们经历了很多,也收获了很多。与其说这次的实训是体力与脑力的作业,不如说它是合作精神和毅力的考验。经过这次课程设计,我们不仅学到了很多知识和技能,更重要的是我们学会了如何运用所学知识去解决实际问题。总之,两个礼拜的课程设计让我们受益匪浅。我们深深认识到,要学好一门学科,没有刻苦钻研的精神是不行的,只有在不断的尝试中,经历失败,从失败中总结经验,然后再不断的尝试,才能获得成功。

  ⑺求一份数据结构课程设计报告

  ⑻//classode.h#ifndef__ODE_H__#define__ODE_H__#include《iostream》usingnamespacestd;structstData//出生年月结构{intm_nYear;intm_nMonth;intm_nDay;};structstResult//五门课成绩结构{doublem_dSubject_;//自己改成绩的名称doublem_dSubject_;doublem_dSubject_;doublem_dSubject_;doublem_dSubject_;};structstStudent//声明学生信息的结构{stringm_strNumber;//学生学号stringm_strName;//姓名charm_chSex;//性别structstDatam_stData;//出生年月stringm_strAppearance;//政治面貌structstResultm_stResult;//五门课成绩};typedefclassode{private:structstStudentm_stStudent;ode*m_Next;public:ode();//构造函数~ode();//析构函数voidSetNodeData();//设置结点内容的函数成员stStudentGetNodeData();//获取结点内容的函数成员voidSetNodeNext(ode*_Next);//设置结点Next指针的函数成员voidShowNodeData();//输出结点内容的函数成员ode*GetNodeNext();//获取结点Next指针的函数成员}LinkNode;#endif//classCLinkList#ifndef__CLINKLIST_H__#define__CLINKLIST_H__#include“ode.h“typedefclassCLinkList{private:LinkNode*m_Head;//链表的头指针LinkNodem_Node;//链表的头结点public:CLinkList();//构造函数~CLinkList();//析构函数voidCreateList();//初始化链表的函数成员LinkNode*GetListNode(int_nIndex);//按位置查找指定位结点的成员函数voidInsertList(int_nIndex);//插入结点的成员函数voidDeleteList(int_nIndex);//删除某一结点的成员函数LinkNode*GetHeadList();//获取头指针的成员函数voidSetListData(int_nIndex);//设置链表中某一结点的值的成员函数voidShowListData(int_nIndex);//这个是现实链表中某一结点值的函数成员voidDestroyList(int_nIndex);//销毁某一位置以后链表的成员函数voidShowList();//显示链表的成员函数}LinkList;#endif//classCLinkList#include“CLinkList.h“#include“ode.h“CLinkList::CLinkList(){cout《《“这个是构造函数“《《endl;m_Head=&m_Node;//链表的头指针指向头结点m_Node.SetNodeNext(NULL);//将头结点的Next指针设置为NULL;}CLinkList::~CLinkList(){cout《《“这个是析构函数“《《endl;}voidCLinkList::CreateList()//以向后追加的方式创建一个链表,输入退出{intnTemp=;//定义一个临时变量用于标志程序结束cout《《“欢迎来创建链表!“《《endl;ode*pTemp=NULL;//定义一个临时结点指针,用来增加新结点用ode*pNode=m_Head;//定义一个标记指针,首先叫其指向头结点while(){pTemp=newLinkNode;cout《《“请输入下一个结点的内容!“《《endl;pTemp-》SetNodeData();//设置链表中结点的内容cout《《“如果想继续输入下一个学生的信息请输入,否则输入“《《endl;cin》》nTemp;if(’’==nTemp){break;}pNode-》SetNodeNext(pTemp);//让链尾的Next指向新建的结点pNode=pTemp;//将结尾元素向后移}cout《《“创建链表结束“《《endl;}LinkNode*CLinkList::GetListNode(int_nIndex){cout《《“这个是按位置查找指定位结点的成员函数“《《endl;LinkNode*pNode=m_Head-》GetNodeNext();//定义一个临时的结点指针,初始化指向头结点intTemp=;//定义一个临时的变量,用来标记已检查结点的个数的if(-==_nIndex)//返回头结点(即头指针{returnm_Head;}if(_nIndex《-)//_nIndex控制条件{cout《《“您输入的是错误的位置!“《《endl;return;}while(pNode!=NULL){if(_nIndex==Temp){returnpNode;}pNode=pNode-》GetNodeNext();//临时结点向后移动++Temp;}returnpNode;//没找到结点就返回NULL}voidCLinkList::ShowListData(int_nIndex);voidCLinkList::InsertList(int_nIndex)//插入结点的函数成员{cout《《“这个是插入结点的成员函数“《《endl;LinkNode*pNode=GetListNode(_nIndex-);//定义一个结点类的指针,指向的是要插入位置的前一指针LinkNode*pTemp=newode;//定义一个临时结点指针,用来增加新结点用pTemp-》SetNodeData();//设置插入结点的内容pTemp-》SetNodeNext(pNode-》GetNodeNext());pNode-》SetNodeNext(pTemp);}voidCLinkList::DeleteList(int_nIndex){cout《《“这个是删除某一结点的成员函数“《《endl;LinkNode*pNode=GetListNode(_nIndex-);//定义一个结点类的指针,指向的是要删除位置的前一指针LinkNode*pTemp=NULL;//定义一个临时结点指针,用来指向要删除的结点pTemp=pNode-》GetNodeNext();//把pTemp指向要删除的结点pNode-》SetNodeNext(pTemp-》GetNodeNext());//把pNode指向要删除的结点的后一个结点deletepTemp;//删除结点pTemp=NULL;}LinkNode*CLinkList::GetHeadList(){cout《《“这个是获取头指针的成员函数“《《endl;returnm_Head;}voidCLinkList::SetListData(int_nIndex){cout《《“这个是设置链表中某一结点的值的成员函数“《《endl;ode*pNode=GetListNode(_nIndex);//定义一个结点类的指针,指向的是要修改内容位置的结点pNode-》SetNodeData();//修改内容}voidCLinkList::ShowListData(int_nIndex){cout《《“这个是显示链表中某一结点值的成员函数“《《endl;ode*pNode=GetListNode(_nIndex);//定义一个结点类的指针,指向的是要获取内容位置的结点pNode-》ShowNodeData();//返回想要得到位置的结点内容}voidCLinkList::DestroyList(int_nIndex){cout《《“这个是销毁某一位置以后链表的成员函数“《《endl;LinkNode*pTemp=GetListNode(_nIndex-);//定义一个结点指针,指向要销毁位置的前一结点LinkNode*pNode=pTemp-》GetNodeNext();//定义一个结点指针,指向要销毁位置的结点while(pTemp-》GetNodeNext()!=NULL)//销毁动作的结束条件或初始条件{pTemp-》SetNodeNext(pNode-》GetNodeNext());//把需要销毁的位置的前结点的Next指向销毁位置的下一个结点deletepNode;//销毁结点pNode=pTemp-》GetNodeNext();//把pNode重新指向要销毁位置的结点}}voidCLinkList::ShowList(){cout《《“这个是显示链表的成员函数“《《endl;intnTemp=;//定义一个临时的整形变量用来控制输入的个数LinkNode*pTemp=m_Head-》GetNodeNext();//定义一个结点类指针,指向第位的结点if(NULL==pTemp){cout《《“这是个空链“《《endl;}while(pTemp!=NULL){pTemp-》ShowNodeData();++nTemp;if(==nTemp%&&nTemp!=)//控制每行只能输出个结点的内容{cout《《endl;}pTemp=pTemp-》GetNodeNext();}}//classode#include“ode.h“ode::ode()//构造函数{//m_stStudent={};m_Next=NULL;}ode::~ode()//析构函数{}voidode::SetNodeData(){char*pNumber=newchar;//用来接收字符串的临时变量char*pName=newchar;char*pAppearance=newchar;cout《《“学生学号:“《《endl;cin》》pNumber;m_stStudent.m_strNumber=pNumber;cout《《“姓名:“《《endl;cin》》pName;m_stStudent.m_strName=pName;cout《《“性别:“《《endl;cin》》m_stStudent.m_chSex;cout《《“出生年月:“《《endl;cout《《“m_stData.m_nYear“《《endl;cin》》m_stStudent.m_stData.m_nYear;cout《《“m_stData.m_nMonth“《《endl;cin》》m_stStudent.m_stData.m_nMonth;cout《《“m_stData.m_nDay“《《endl;cin》》m_stStudent.m_stData.m_nDay;cout《《“政治面貌:“《《endl;cin》》pAppearance;m_stStudent.m_strAppearance=pAppearance;cout《《“五门课成绩:“《《endl;cout《《“m_dSubject_:“《《endl;cin》》m_stStudent.m_stResult.m_dSubject_;cout《《“m_dSubject_:“《《endl;cin》》m_stStudent.m_stResult.m_dSubject_;cout《《“m_dSubject_:“《《endl;cin》》m_stStudent.m_stResult.m_dSubject_;cout《《“m_dSubject_:“《《endl;cin》》m_stStudent.m_stResult.m_dSubject_;cout《《“m_dSubject_:“《《endl;cin》》m_stStudent.m_stResult.m_dSubject_;deletepNumber;//释放内存pNumber=NULL;//指针置空deletepName;//释放内存pName=NULL;deletepAppearance;//释放内存pAppearance=NULL;}stStudentode::GetNodeData()//返回结点内容(即学生信息{returnm_stStudent;}voidode::SetNodeNext(ode*_Next){m_Next=_Next;}voidode::ShowNodeData(){constchar*pNumber=m_stStudent.m_strNumber.c_str();//用来接收字符串的临时变量constchar*pName=m_stStudent.m_strNumber.c_str();constchar*pAppearance=m_stStudent.m_strAppearance.c_str();cout《《“学生学号:“《《pNumber《《’ ’《《“姓名:“《《pName《《’ ’《《“性别:“《《m_stStudent.m_chSex;cout《《“出生年月:“《《m_stStudent.m_stData.m_nYear《《’,’《《m_stStudent.m_stData.m_nMonth《《’,’《《m_stStudent.m_stData.m_nDay;cout《《“政治面貌:“《《pAppearance《《“五门课成绩:“《《endl;cout《《“m_dSubject_:“《《m_stStudent.m_stResult.m_dSubject_《《endl;cout《《“m_dSubject_:“《《m_stStudent.m_stResult.m_dSubject_《《endl;cout《《“m_dSubject_:“《《m_stStudent.m_stResult.m_dSubject_《《endl;cout《《“m_dSubject_:“《《m_stStudent.m_stResult.m_dSubject_《《endl;cout《《“m_dSubject_:“《《m_stStudent.m_stResult.m_dSubject_《《endl;}ode*ode::GetNodeNext(){returnm_Next;}#include“CLinkList.h“#include“ode.h“voidText();//测试函数声明intmain(){cout《《“这是mian函数“《《endl;Text();return;}voidText(){cout《《“这个是测试函数“《《endl;LinkList*pList=newLinkList;//创建一个内存链表对象cout《《“------------------CreateList-----------------------------“《《endl;pList-》CreateList();//初始化链表的函数成员pList-》ShowList();cout《《endl;cout《《“------------------GetListNode-----------------------------“《《endl;LinkNode*pNode=NULL;//定义一个临时的结点类指针用于检测查找函数成员pNode=pList-》GetListNode();//按位置查找指定位结点的成员函数的测试if(pNode){cout《《“用按位置查找的方法找到了指定位结点“《《endl;}else{cout《《“对不起,用按位置查找的方没有找到指定位结点“《《endl;}cout《《endl;cout《《“------------------InsertList-----------------------------“《《endl;pList-》InsertList();//插入结点的成员函数的测试pList-》ShowList();cout《《endl;cout《《“------------------DeleteList-----------------------------“《《endl;pList-》DeleteList();//删除某一结点的成员函数的测试pList-》ShowList();cout《《endl;cout《《“------------------GetHeadList-----------------------------“《《endl;pNode=NULL;pNode=pList-》GetHeadList();//获取头指针的成员函数的测试if(pNode){cout《《“已经返回了头指针“《《endl;}else{cout《《“对不起,头指针为空“《《endl;}cout《《endl;cout《《“------------------GetHeadList-----------------------------“《《endl;pList-》SetListData();//设置链表中某一结点的值的成员函数的测试pList-》ShowList();cout《《endl;cout《《“------------------GetListData-----------------------------“《《endl;cout《《“pList-》ShowListData()=“;pList-》ShowListData();//获取链中某一结点值的成员函数的测试cout《《endl;cout《《“------------------DestroyList()-----------------------------“《《endl;pList-》DestroyList();//销毁第位置以后链表的成员函数的测试pList-》ShowList();cout《《endl;cout《《“------------------DestroyList()-----------------------------“《《endl;pList-》DestroyList();//销毁第位置以后链表的成员函数的测试pList-》ShowList();cout《《endl;deletepList;//释放内存pList=NULL;//指针置空}你的要求太多,没仔细看,我把我给别人写的赋值给你吧,我已经写的很全了,程序有问题可以给我留言

  ⑼数据结构课程设计分析报告

  ⑽我有份数据结构的课程设计报告已经发到你邮箱,请参考下吧,以下是代码部分课程设计步骤简介.系统架构建模以及工具的选择利用MicrosoftVisio建模工具规划GUI,为后面的工具选择提供参照(如下图所示。.调试核心排序算法.插入排序算法privatevoidinsertSort(inta){//插入排序算法for(inti=;i《a.length;i++)for(intj=;j《i;j++)//查找插入位置{if(a){intt=a;for(intk=i;k》j;k--)//移动a;a=t;}}}.冒泡排序算法privatevoidbubbleSort(intshuzu){for(intj=;j《shuzu.length-;j++)for(inti=;i《(shuzu.length-)-j;i++)if(shuzu)//升序排序{inttemp=shuzu=temp;}//交换}.快速排序算法privatevoidquickSort(inta,intleft,intright){if(left《right){intpoint=quick(a,left,right);quickSort(a,point+,right);//分割点右边排序quickSort(a,left,point-);//分割点左边排序}}privatestaticintquick(intarr,intleft,intright){inti,j,point,temp;intarray=arr;i=left;j=right;point=array;//设置分割点while(i《j){while(i《j&&array》=point)//左移{--j;}array;while(i《j&&array《=point)//右移{++i;}array;}//换回分割点array=point;returnj;}.选择排序算法privatevoidchoseSort(inta){intmin,temp,len=a.length;for(inti=;i《len-;i++){min=i;for(intj=i+;j《len;j++)if(a)min=j;if(min!=i)//最值是否有变化{temp=a=temp;}}}.合并排序算法privatevoidmergeSort(inta,intp,intr){intq;if(p!=r){//若子序列A中不止一个元素q=(int)((p+r-)/);//计算中间下标,将子序列A分为左子序列和右子序列mergeSort(a,p,q);//对左子序列进行合并排序mergeSort(a,q+,r);//对右子序列进行合并排序merge(a,p,q,r);//对左子序类和右子序列进行合并}}privatevoidmerge(intz,intp,intq,intr){inttemp;inti,j,t;t=p;//序列temp的下标计数器,从p开始i=p;//左子序A的下标计数器,从p开始j=q+;//右子序A的下表计数器,从q+开始//合并序列while(t《=r)if(i《=q&&(j》r||z))temp;elsetemp;//将temp中的序列赋值给Afor(i=p;i《=r;i++)z;}.二分插入排序算法privatevoidhalfSort(inta){for(inti=;i《a.length;i++){intleft=,right=i-;inttemp=a;while(left《=right){intmiddle=(left+right)/;if(temp《a)right=middle-;elseleft=middle+;}for(intj=i-;j》=left;j--)a;a=temp;}}.设计常产生随机数的算法publicintranddata(){intchoice=jboBox.getSelectedIndex();intindex={,,,};int;java.util.Randomr=newjava.util.Random();//利用java产生随机数的函数switch(choice){//产生的随机数在-之间case:{for(inti=;i《;i++)//产生个随机数组data=Math.abs(r.nextInt())%;break;}case:{for(inti=;i《;i++)//产生个随机数组data=Math.abs(r.nextInt())%;break;}case:{for(inti=;i《;i++)//产生个随机数组data=Math.abs(r.nextInt())%;break;}case:{for(inti=;i《;i++)//产生个随机数组data=Math.abs(r.nextInt())%;}}//endswhitchreturndata;//回传产生的随机数组

  ⑾数据结构课程设计报告树的遍历:文件目录结构的显示

  ⑿数据结构课程设计报告树的遍历:文件目录结构显示专业计算机科学与技术(软件工程学生姓名施利华班级M计算机学号指导教师吴素芹起止日期..-..目录简介算法说明测试结果分析与探讨小结参考文献附录附录源程序清单树的遍历:文件目录结构的显示简介.树形结构树形结构是一类十分重要的非线性结构,它可以很好地描述客观世界中广泛存在的具有分支关系或层次特性的对象,如操作系统的文件构成、人工智能搜索算法的模型表示以及数据库系统的信息组织形式等。.输入要求:输入数据包含几个测试案例。每一个案例由几行组成,每一行都代表了目录树的层次结构。第一行代表了目录的根节点。若是目录节点,那么它的孩子节点将在第二行中被列出,同时用一对圆括号“(”界定。同样,如果这些孩子节点中某一个也是目录的话,那么这个目录所包含的内容将在随后的一行中列出,由一对圆括号将首尾界定。目录的输入格式为:*namesize,文件的输入格式为:namesize,其中*代表当前节点是目录,表示文件或目录的名称,由一串长度不大于的字符组成,并且name字符串中不能含有‘(’,‘,’‘和’*‘。size是该文件/目录的大小,为一个大于的整数。每一个案例中最多只能包含层,每一层最多有个文件/目录。.输出要求:对每一个测试案例,输出时要求:第d层的文件/目录名前需要插入*d个空格,兄弟节点之间要在同一列上。不要使用Tab(制表符来统一输出的缩进。每一个目录的大小(size是它所包含的所有子目录和文件大小以及它自身大小的总和。.输入例子:*/usr(*mark*alex)(hw.c*course)(hw.c)(aa.txt)*/usr()表示有两个不同的根目录,目录名都是/usr,第一个根目录/usr下包含mark和alex两个子目录,mark目录下包含大小为的文件hw.c和子目录course,alex目录下有一个大小为的文件hw.c,子目录course下包含文件aa.txt,其大小为;第二个根目录/usr下为空。.输出例子:|_*/usr|_*mark||_hw.s||_*course||_aa.txt|_*alex|_hw.c|_*/usr算法说明typedefstructTreeNode{intdata;TreeNode*left;TreeNode*right;}TreeNode,*Tree;先序:voidfirst(Tree*root){printf(“%d“,root-》data);first(root-》left);first(root-》right);}中序:voidmid(Tree*root){mid(root-》left);printf(“%d“,root-》data);mid(root-》right);}后序:voidlast(Tree*root){last(root-》left);last(root-》right);printf(“%d“,root-》data);}测试结果将代码打入MicrosoftVisualC++.软件中,改完相关错误后运行代码,开始不能出现正确的运行结果,在相关文件中新建文本文件,文件命名为”input.txt“。在文本文件中,打入输入数据,得出下列截图。图-输入数据得出”input.txt”记事后,重新运行代码,在相关文件夹的“output.txt”会出现相关的正确的输出结果,此时得出下列两张截图。图-输出结果图-输出结果输入正确的代码后运行程序,得出下列截图。图-运行结果分析与探讨目录结构是一种典型的树形结构,为了方便对目录的查找,遍历等操作,可以选择孩子兄弟双亲链表来存储数的结构。程序中要求对目录的大小进行重新计算,根据用户的输入来建立相应的孩子兄弟双亲链表,最后输入树形结构。可以引入一个Tree类,将树的构造,销毁,目录大小的重新计算(reSize,建立树形链表结构(parse,树形结构输出(outPut等一系列操作都封装起来,同时对于每一个树的借点,它的私有变量除了名称(Name,大小(Size和层数(Depth之外,根据孩子兄弟双亲链表表示的需要,还要设置三个指针,即父指针(Tree*parent,下一个兄弟指针(Tree*NextSibling和第一个孩子指针(Tree*Firstchild。下面是几个主要函数的实现。.建立树形链表结构的函数parse()根据输入来确定树形关系是,首先读取根借点目录/文件名和大小值,并根据这些信息建立一个新的节点;然后读入后面的各行信息,对于同一括号中的内容,即具有相同父节点的那些节点建立兄弟关联。这个函数实际上是采用层数遍历建立树形链表结构。定义一个Tree*类型的数组treeArray中。.目录大小重新计算函数reSize()输入数据中对目录大小的初始化值一般为,而目录的真正大小应该是自身的大小和它包含的所有文件及子目录的大小之和。因此,在计算目录大小的时候,需要遍历它下面所有的文件和子目录,可以采用递归嵌套的后序遍历方式。另外要注意,采用孩子兄弟双亲链表表示时,父目录下的所有子目录和子文件都在该父目录的左子树上(右字数第一个节点是该目录的兄弟节点,所以遍历的时候只需要遍历目录的左字数即可。.输出树形结构的函数outPut()输出是一个线序遍历的过程。为完成对树形的输出,兄弟目录之前需要相同的缩进,用’|’上下相连,而斧子目录或父目录和子文件之间需要设定正确的缩进,子目录或子文件要比父目录向右缩进个空格。设置一个标志数组flag=时则输出“”,这样就可以保证兄弟节点之间有相同的缩进,而子节点总比父节点享有缩进个空格。treeArray.消除输入总多余空格的函数skipwhiteSpace(string&s,int*i从用户输入数据中读入一行后,调用该函数来跳过s字符串中s之后的空格,以方便后面的处理。此外,关于读入目录名称,大小,以及将string类型的Size值转换成int类型的函数的实现,相对比较简单,此外不再赘述。图-数据异常测试案例小结参考文献机械工业出版社,年月谭浩强.C程序设计(第三版.清华大学出版社,年月严蔚敏,吴伟民.数据结构(C语言版.清华大学出版社,年月吴文虎.程序设计基础.清华大学出版社,年王立柱.C/C++与数据结构.清华大学出版社,年顾元刚.数据结构简明教程.东南大学出版社,年郭福顺,王晓芬,李莲治.数据结构(修订本.大连理工大学出版社,年严蔚敏,陈文博.数据结构及应用算法教程.清华大学出版社,年附录附录源程序清单#include《string》#include《iostream》#include《fstream》usingnamespacestd;strings=““;intstartPos=;ofstreamoutfile;ifstreaminfile;/**构造Tree类**/classTree{stringName;/*树的根结点名称*/intSize;/*树的大小,用于统计这棵树本身及其包含的所以子树大小的总和*/Tree*FirstChild;/*指向它的第一个孩子结点*/Tree*NextSibling;/*指向它的下一个兄弟结点*/Tree*parent;/*指向双亲结点*/public:Tree(stringName=““,intSize=);/*构造函数*/voidparse();/*根据输入数据来建立树形结构*/voidreSize();/*重新统计树结点的大小*/voidoutPut();/*输出树形结构*/~Tree();/*析构函数*/};/***树结点数组treeArray,以及用来标注双亲结点位置的head和目录结点的rear***/Tree*treeArray;inthead=,rear=;/***建立只有一个结点的树,其三个指针域均为空***/Tree::Tree(stringName,intSize){this-》Name=Name;this-》Size=Size;FirstChild=NULL;NextSibling=NULL;parent=NULL;}/***析构函数,删除同一根结点下的各个子结点,释放空间***/Tree::~Tree(){Tree*temp;Tree*temp;temp=FirstChild;while(temp!=NULL){temp=temp;temp=temp-》NextSibling;deletetemp;}}/*先序遍历根结点下的所有结点,将每一个结点的Size值都加到根结点的Size中去**/voidTree::reSize(){Tree*temp=this;/***如果当前的结点没有孩子结点,则它的Size值不变,即为输入时候的值***/if(temp-》FirstChild!=){temp=temp-》FirstChild;while(temp!=){temp-》reSize();Size+=temp-》Size;temp=temp-》NextSibling;}}}/***检查Name中有无非法字符**************/boolcheckName(strings){if(s!=’*’&&s.length()》)returnfalse;if(s==’*’&&s.length()》)returnfalse;if(s’))returnfalse;for(inti=;i《s.length();i++){if(s’)returnfalse;}returntrue;}/***按照先序遍历的方式有缩进地来输出树形结构***/voidTree::outPut(){Tree*temp;/*用来指向当前结点的祖先结点*/Tree*temp;boolflag;/*用来标志输出缩进、层次情况的数组*/inti;outfile.open(“output.txt“,ios::app);if(!outfile){cout《《“cannotappendtheoutputfile.

  ⒀“;exit();}if(!checkName(Name)){cout《《“inputerror!--“《《Name《《endl;exit();}outfile《《“|_“《《Name《《“

  ⒁“;outfile.close();/*输出当前的结点信息*/temp=FirstChild;/*用来指向当前结点的子结点*/while(temp!=NULL){outfile.open(“output.txt“,ios::app);if(!outfile){cout《《“cannotappendtheoutputfile.

  ⒂“;exit();}i=;temp=temp;while(temp-》parent!=NULL){/*当前temp指针所指的结点如果有兄弟结点,则置flag数组值为,否则置为;并由此结点反复查询它的祖先结点的情况,直到根结点为止*/if(i》=){//检查当前的父目录包含的子文件(或目录数)是否大于;cout《《“inputerror!--dictionarycontainsmorethanlevels.“《《endl;exit();}temp=temp-》parent;if(temp-》NextSibling!=NULL)flag=true;elseflag=false;}/*兄弟结点之间有相同的缩进,子结点比父结点向右缩进个空格*/while(i--){if(flag==true)outfile《《“|“;elseoutfile《《““;}outfile.close();temp-》outPut();temp=temp-》NextSibling;}}/***跳过字符串s中,第(*i)个之后多余的空格***/voidskipWhiteSpace(string&s,int*i){while(s==’’)(*i)++;}/***获取输入行中一对’()’之间的字符串,即为同一双亲结点下的子结点***/stringgetSubDir(string&line,int*startPos){stringres=““;skipWhiteSpace(line,startPos);while(line!=’)’)res+=line;res+=line;skipWhiteSpace(line,startPos);returnres;}/***由于用户输入时候目录的大小Size值为String类型,因此需要将它转变成integer类型***/intstringToNum(strings){intnum=;unsignedinti=;while(i《s.length()){num*=;num+=s-’’;}returnnum;}/***提取目录/文件的名称***/stringgetName(string&s,int*i){stringname=““;while(s!=’ ’)name+=s;returnname;}/***提取目录/文件的大小,然后将string类型转换成integer类型***/intgetSize(string&s,int*i){stringsize=““;while((unsignedint)(*i)《s.length()&&s!=’)’)size+=s;returnstringToNum(size);}/***根据用户的输入字符串来构建树的结构***/voidTree::parse(){Tree*temp;stringline;stringname;intsize;/***head值用来标记当前结点的双亲结点位置;如果当前处理的结点是目录类型,则将它放在treeArray中***/while(getline(infile,line,’

  ⒃’)){startPos=;while(){s=getSubDir(line,&startPos);inti=;skipWhiteSpace(s,&i);if(s!=’)’){skipWhiteSpace(s,&i);name=getName(s,&i);skipWhiteSpace(s,&i);size=getSize(s,&i);temp=treeArray-》FirstChild=newTree(name,size);temp-》parent=treeArray;if(name==’*’)treeArray=temp;skipWhiteSpace(s,&i);}while(s!=’)’){skipWhiteSpace(s,&i);name=getName(s,&i);skipWhiteSpace(s,&i);size=getSize(s,&i);temp-》NextSibling=newTree(name,size);skipWhiteSpace(s,&i);temp=temp-》NextSibling;temp-》parent=treeArray;if(name==’*’)treeArray=temp;}head++;/***测试是否一行扫描完毕***/if((unsignedint)startPos》=line.length())break;}/***只有一个根结点的情况***/if(head==rear)break;}}/////////////////////////////////////////////////////////////****主测试文件main.cpp******///////////////////////////////////////////////////////////////intmain(){Tree*fileTree;strings;stringname;intsize;outfile.open(“output.txt“);if(!outfile){cout《《“cannotopentheoutputfile!

  ⒄“;exit();}outfile《《“Theresultisasfollows:

  ⒅“;outfile.close();infile.open(“input.txt“,ios::out);if(!infile){cout《《“cannotopentheinputfile!

  ⒆“;exit();}while(getline(infile,s,’

  ⒇’)){inti=;skipWhiteSpace(s,&i);name=getName(s,&i);skipWhiteSpace(s,&i);size=getSize(s,&i);fileTree=newTree(name,size);if(name==’*’){treeArray=fileTree;fileTree-》parse();}fileTree-》reSize();fileTree-》outPut();deletefileTree;}infile.close();return;}

  ⒈数据结构课程设计报告

  ⒉元稀疏多项式相加详细设计.程序头的设计:#include《stdio.h》#include《malloc.h》typedefstructpnode{intcoef;/*系数*/intexp;/*指数*/structpnode*next;/*下一个指针*/}pnode;.用头插法生成一个多项式,系数和指数输入时退出输入pnode*creat(){intm,n;pnode*head,*rear,*s;/*head为头指针,rear和s为临时指针*/head=(pnode*)malloc(sizeof(pnode));rear=head;/*指向头*/printf(“inputcoef:“);/*输入系数*/scanf(“%d“,&n);printf(“inputexp:“);/*输入指数*/scanf(“%d“,&m);while(n!=)/*输入就退出*/{s=(pnode*)malloc(sizeof(pnode));s-》coef=n;s-》exp=m;s-》next=NULL;rear-》next=s;/*头插法*/rear=s;printf(“inputcoef:“);/*输入系数*/scanf(“%d“,&n);printf(“inputexp:“);/*输入指数*/scanf(“%d“,&m);}head=head-》next;/*第一个头没有用到*/returnhead;}.显示一个多项式voiddisplay(pnode*head){pnode*p;intone_time=;p=head;while(p!=NULL)/*不为空的话*/{if(one_time==){if(p-》exp==)/*如果指数为的话,直接输出系数*/printf(“%d“,p-》coef);/*如果系数是正的话前面就要加+号*/elseif(p-》coef==||p-》coef==-)printf(“x^%d“,p-》exp);/*如果系数是的话就直接输出+x*//*如果系数是-的话就直接输出-x号*/elseif(p-》coef》)/*如果系数是大于的话就输出+系数x^指数的形式*/printf(“%dx^%d“,p-》coef,p-》exp);elseif(p-》coef《)/*如果系数是小于的话就输出系数x^指数的形式*/printf(“%dx^%d“,p-》coef,p-》exp);one_time=;}else{if(p-》exp==)/*如果指数为的话,直接输出系数*/{if(p-》coef》)printf(“+%d“,p-》coef);/*如果系数是正的话前面就要加+号*/}elseif(p-》coef==)printf(“+x^%d“,p-》exp);elseif(p-》coef==-)printf(“x^%d“,p-》exp);/*如果系数是的话就直接输出+x号*/elseif(p-》coef》)/*如果系数是大于的话就输出+系数x^指数的形式*/printf(“+%dx^%d“,p-》coef,p-》exp);elseif(p-》coef《)/*如果系数是小于的话就输出系数x^指数的形式*/printf(“%dx^%d“,p-》coef,p-》exp);}p=p-》next;/*指向下一个指针*/}printf(“

  ⒊“);.两个多项式的加法运算pnode*add(pnode*heada,pnode*headb){pnode*headc,*p,*q,*s,*r;/*headc为头指针,r,s为临时指针,p指向第个多项式并向右移动,q指向第个多项式并并向右移动*/intx;/*x为系数的求和*/p=heada;/*指向第一个多项式的头*/q=headb;/*指向第二个多项式的头*/headc=(pnode*)malloc(sizeof(pnode));r=headc;/*开辟空间*/while(p!=NULL&&q!=NULL)/*个多项式的某一项都不为空时*/{if(p-》exp==q-》exp)/*指数相等的话*/{x=p-》coef+q-》coef;/*系数就应该相加*/if(x!=)/*相加的和不为的话*/{s=(pnode*)malloc(sizeof(pnode));/*用头插法建立一个新的节点*/s-》coef=x;s-》exp=p-》exp;r-》next=s;r=s;}q=q-》next;p=p-》next;/*个多项式都向右移*/}elseif(p-》exp《q-》exp)/*p的系数小于q的系数的话,就应该复制q接点到多项式中*/{s=(pnode*)malloc(sizeof(pnode));s-》coef=q-》coef;s-》exp=q-》exp;r-》next=s;r=s;q=q-》next;/*q向右移动*/}else/*p的系数大于q的系数的话,就应该复制p接点到多项式中*/{s=(pnode*)malloc(sizeof(pnode));s-》coef=p-》coef;s-》exp=p-》exp;r-》next=s;r=s;p=p-》next;/*p向右移动*/}}当第个多项式空,第个数不为空时,将第一个数剩下的全用新节点产生while(p!=NULL){s=(pnode*)malloc(sizeof(pnode));s-》coef=p-》coef;s-》exp=p-》exp;r-》next=s;r=s;p=p-》next;}当第个多项式空,第个数不为空时,将第个数剩下的全用新节点产生while(q!=NULL){s=(pnode*)malloc(sizeof(pnode));s-》coef=q-》coef;s-》exp=q-》exp;r-》next=s;r=s;q=q-》next;}r-》next=NULL;/*最后指向空*/headc=headc-》next;/*第一个头没有用到*/returnheadc;/*返回头接点*/.两个多项式的减法运算,和加法类似,不同的地方已经注释pnode*sub(pnode*heada,pnode*headb){pnode*headc,*p,*q,*s,*r;intx;p=heada;q=headb;headc=(pnode*)malloc(sizeof(pnode));r=headc;while(p!=NULL&&q!=NULL){if(p-》exp==q-》exp){x=p-》coef-q-》coef;/*系数相减*/if(x!=){s=(pnode*)malloc(sizeof(pnode));s-》coef=x;s-》exp=p-》exp;r-》next=s;r=s;}q=q-》next;p=p-》next;}elseif(p-》exp《q-》exp)/*p的系数小于q的系数的话*/{s=(pnode*)malloc(sizeof(pnode));s-》coef=-q-》coef;/*建立的接点的系数为原来的相反数*/s-》exp=q-》exp;r-》next=s;r=s;q=q-》next;}else{s=(pnode*)malloc(sizeof(pnode));s-》coef=p-》coef;s-》exp=p-》exp;r-》next=s;r=s;p=p-》next;}}while(p!=NULL){s=(pnode*)malloc(sizeof(pnode));s-》coef=p-》coef;s-》exp=p-》exp;r-》next=s;r=s;p=p-》next;}while(q!=NULL){s=(pnode*)malloc(sizeof(pnode));s-》coef=-q-》coef;/*建立的接点的系数为原来的相反数*/s-》exp=q-》exp;r-》next=s;r=s;q=q-》next;}r-》next=NULL;headc=headc-》next;returnheadc;.界面设计:printf(“

  ⒋****************************************

  ⒌“);printf(“

  ⒍**************puter*************

  ⒎“);printf(“

  ⒏********Class:two****Num:*********

  ⒐“);printf(“

  ⒑***********Name:xiepan**********

  ⒒“);printf(“

  ⒓****************************************

  ⒔“);printf(“

  ⒕--------------:add-------------

  ⒖“);printf(“

  ⒗--------------:sub-------------

  ⒘“);printf(“

  ⒙--------------:exit------------

  ⒚“);printf(“

  ⒛****************************************

  “);.连接程序:case:add_main();break;/*加法*/case:sub_main();break;/*减法*/case:break;/*退出*/

您可能感兴趣的文章:

相关文章