数据结构课程设计报告模板(算法课程设计报告)

2023-11-16 12:10:02 :39

数据结构课程设计报告模板(算法课程设计报告)

大家好,关于数据结构课程设计报告模板很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于算法课程设计报告的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!

本文目录

算法课程设计报告

题目中要求的功能进行叙述分析,并且设计解决此问题的数据存储结构,(有些题目已经指定了数据存储的,按照指定的设计),设计或叙述解决此问题的算法,描述算法建议使用流程图,进行算法分析指明关键语句的时间复杂度。 给出实现功能的一组或多组测试数据,程序调试后,将按照此测试数据进行测试的结果列出来 。 对有些题目提出算法改进方案,比较不同算法的优缺点。 如果程序不能正常运行,写出实现此算法中遇到的问题,和改进方法; 2 对每个题目要有相应的源程序(可以是一组源程序,即详细设计部分): 源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 程序能够运行,要有基本的容错功能。尽量避免出现操作错误时出现死循环; 3 最后提供的主程序可以象一个应用系统一样有主窗口,通过主菜单和分级菜单调用课程设计中要求完成的各个功能模块,调用后可以返回到主菜单,继续选择其他功能进行其他功能的选择。最好有窗口展示部分。 4 课程设计报告:(保存在word 文档中,文件名要求 按照"姓名-学号-课程设计报告"起名,如文件名为"张三-001-课程设计报告".doc )按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成; 其中包括: a)需求分析: 在该部分中叙述,每个模块的功能要求 b)概要设计 在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义。 c)详细设计 各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现) 源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 d)调试分析 测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。 5. 课设总结: (保存在word 文档中)总结可以包括 : 课程设计 过程的收获、遇到问题、遇到问题解决问题过程的思考、程序调试能力的思考、对数据结构这门课程的思考、在课程设计过程中对C课程的认识等内容; 6.实验报告的首页请参考如下格式: 课程设计实验 起止日期:20 -20 学年 学期 系别 班级 学号 姓名 实验题目 □设计性 □综合性 自我评价 教师评语 能够实现实验要求的功能 □全部 □部分算法有新意 □有 □一般程序运行通过 □全部 □部分 算法注释说明 □完善 □仅有功能说明接口参数说明 □有 □无按期上交打印文档资料及源程序 □所有 □部分综合设计说明报告结构 □合理 □不合理用户使用说明 □完整 □不全现场演示操作有准备 □有 □无问题解答流畅 □流畅 □不流畅独立完成实验 □能 □不能体现团队合作精神。 □能够 □不能 成绩 这是张表格,copy过来时没调整好,不过应该看得明白。我们是这样写的,你可以参考一下。

求具体的数据结构实验报告: 将若干城市的信息存入一个带头结点的单链表,结点中的城市信息包括城市名、

#include 《stdio.h》 #include 《string.h》 #include 《math.h》 typedef int Length; typedef struct { int x; int y; }coordinate; typedef struct cityInfo { char cityName; coordinate cityCoor; struct cityInfo* next; }citylink; void addCity(citylink*); void insertCity(citylink*); void delCity(citylink); void amendCity(char*); void list(void); void coordinateSureCityname(void); void nearerCity(coordinate,Length); void shortestCitys(void); citylink *head; citylink *end; void addCity(citylink* newCity) { end-》 next = newCity; end = newCity; newCity-》 next = NULL; } void insertCity(citylink* newcity) { int number,i; citylink *p,*q; p = head; printf( "insert where\n "); scanf( "%d ",&number); for(i = 1;i 《 number;i++) { p = p-》 next; } q = p-》 next; p-》 next = newcity; newcity-》 next = q; } void delCity() { int number,i; citylink *p; p = head; printf( "please input the number of city you want to del\n "); scanf( "%d ",&number); if(1 == number) { head = head-》 next; } for(i = 2;i 《 number;i++) { p = p-》 next; } p-》 next = p-》 next-》 next; } void amendCity() { int x,y,result; citylink *p; char cityName; printf( "please in put city ’s old name\n "); scanf( "%s ",cityName); fflush(stdin); p = head; while (p) { result = strcmp(p-》 cityName,cityName); if (0 == result) { printf( "please input city ’s new name!!\n "); scanf( "%s ",&p-》 cityName); fflush(stdin); printf( "please input city ’s new coordinate like this 88,99!!\n "); scanf( "%d,%d ",&x,&y); p-》 cityCoor.x = x; p-》 cityCoor.y = y; break; } p = p-》 next; } if (result != 0) { printf( "There have not this city "); } } void coordinateSureCityname(void) { int result; citylink *p; char cityName; p = head; printf( "please in put city ’s name\n "); scanf( "%s ",cityName); fflush(stdin); while (p) { result = strcmp(p-》 cityName,cityName); if (0 == result) { printf( "city ’s coordinate is %d,%d ",p-》 cityCoor.x,p-》 cityCoor.y); } p = p-》 next; } if (result != 0) { printf( "There has not such city "); } } void nearerCity() { citylink* p; int temp,x,y; coordinate coord; int Length; printf( "please input coordinate like this 88,99\n "); scanf( "%d,%d ",&x,&y); coord.x = x; coord.y = y; fflush(stdin); printf( "please input length\n "); scanf( "%d ",&Length); p = head; while(p) { temp = sqrt(pow((coord.x - p-》 cityCoor.x),2) + pow((coord.y - p-》 cityCoor.y),2)); if (temp 《 Length) { printf( "city name : %s\n ",p-》 cityName); } p = p-》 next; } } void list(void) { citylink *p; p = head; while(p) { printf( "city ’s name = %s,citys coordinate = %d , %d\n ",p-》 cityName,p-》 cityCoor.x,p-》 cityCoor.y); p = p-》 next; } } void main(void) { citylink city1; citylink city2; citylink city3; citylink city4; citylink city5; citylink city6; citylink city7head = &city1 city1.cityCoor.x = 12; city1.cityCoor.y = 22; strcpy(city1.cityName, "city1 " ); city1.next = &city2 city2.cityCoor.x = 28; city2.cityCoor.y = 95; strcpy(city2.cityName, "city2 " ); city2.next = &city3 city3.cityCoor.x = 32; city3.cityCoor.y = 17; strcpy(city3.cityName, "city3 " ); city3.next = &city4 city4.cityCoor.x = 58; city4.cityCoor.y = 98; strcpy(city4.cityName, "city4 " ); city4.next = &city5 city5.cityCoor.x = 31; city5.cityCoor.y = 67; strcpy(city5.cityName, "city5 " ); city5.next = &city6 city6.cityCoor.x = 21; city6.cityCoor.y = 99; strcpy(city6.cityName, "city6 " ); city6.next = NULL; head = &city1 end = &city6 city7.cityCoor.x = 19; city7.cityCoor.y = 84; strcpy(city7.cityName, "city7 " ); list(); printf( "\n "); }

数据结构课程设计报告(一元多项式的计算)

【问题描述】 编程实现一元多项式的加法计算。【基本要求】 能用链表实现一元多项式的加法计算,并能打印出计算结果。【所需知识】 (1)基本编程方法和程序设计知识。 (2)链表的理解和运算与运用。【所用算法】 遍历算法和递归算法。【操作平台】 Visual C++#include《stdio.h》#include《graphics.h》#define MAX 100typedef struct polynode{ float coef; int expn; struct polynode *next;}node;node * create(void) /*指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数*/{ node *h,*r,*s; float c; int e; h=(node *)malloc(sizeof(node)); /*建立多项式的头结点,为头结点分配存储空间*/ r=h; /*r指针始终动态指向链表的当前表尾,以便于做尾插入,其初值指向头结点*/ printf("coef:"); scanf("%f",&c); /*输入系数*/ printf("expn: "); scanf("%d",&e); /*输入指数*/ while(c!=0.0) /*输入系数为0时,表示多项式的输入结束*/ { s=(node *)malloc(sizeof(node)); /*申请新结点*/ s-》coef=c; /*申请新结点后赋值*/ s-》expn=e; /*申请新结点后赋值*/ r-》next=s; /*做尾插,插入新结点*/ r=s; /*r始终指向单链表的表尾*/ printf("coef:"); scanf("%f",&c); printf("expn: "); scanf("%d",&e); } r-》next=NULL; /*将表的最后一个结点的next置NULL,以示表结束*/ return(h);} void polyadd(node *pa, node *pb) /*一元多项式相加函数,用于将两个多项式相加, 然后将和多项式存放在多项式pa中,并将多项式pb删除*/ { node *p,*q,*pre,*temp; int sum; p=pa-》next; /*令p和q分别指向pa和pb多项式链表中的第一个结点*/ q=pb-》next; pre=pa; /*位置指针,指向和多项式pa*/ while(p!=NULL&&q!=NULL) /*当两个多项式均未扫描结束时,执行以下操作*/ { if(p-》expn《q-》expn) /*若p指向的多项式指数小于q指的指数*/ { pre-》next=p; /*将p结点加入到和多项式中*/ pre=pre-》next; p=p-》next; } if(p-》expn==q-》expn) /*若指数相等,则相应的系数相加*/ { sum=p-》coef+q-》coef; if(sum!=0) { p-》coef=sum; pre-》next=p;pre=pre-》next;p=p-》next; temp=q;q=q-》next;free(temp); } else /*如果系数和为零,则删除结点p与q,并将指针指向下一个结点*/ { temp=p-》next;free(p);p=temp; temp=q-》next;free(q);q=temp; } } if (q-》expn《p-》expn) { pre-》next=q; /*将q结点加入到和多项式中*/ pre=pre-》next; q=q-》next; } } if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/ pre-》next=p; else /*否则将B的结点加入到和多项式中*/ pre-》next=q;}void print(node * p) /*输出函数,打印出一元多项式*/{ while(p-》next!=NULL){ p=p-》next; printf(" %f*x^%d",p-》coef,p-》expn);}}void calculate() /*给多项式赋值并计算*/{ float cal=1.0,mid=0.0,las; int j; float num, x; int i=0; float later=0.0; int e; printf("Please input num:"); /*输入常数的值*/ scanf("%f",#); printf("Please input x:"); /*输入未知数X的值*/ scanf("%f",&x); printf("Please input e:"); /*输入数组的初值以判断是否循环*/ scanf("%d",&e); printf("Please input c:"); scanf("%f",&c); while(e!=0.0 ) /*此循环用于多项式的计算*/ { cal=1; for(j=0;j《e;j++) /*表示出X的几次方*/ { cal=cal*x; } i++; mid=cal*c; /*表示出单项*/ later+=mid; printf("Please input e :",i,i); scanf("%d%f",&e); } las=later+num; /*表示出完整的多项式*/ printf("The Result is :\n"); printf("%f",las); /*最终的计算结果*/ sleep(3);}void main(){node * pa,* pb,*pc,*p,*q,*pre;int driver=VGA,mode=VGAHI;initgraph(&driver,&mode,"c:\\tc ");setbkcolor(BLUE);setcolor(RED);printf("Welcome,Let’s go!\n");printf("Next, you will see the process of computing !");printf("\nPlease input the coef and expn of pa:\n");pa=create(); /*调用建立链表函数,创建多项式A*/print(pa);printf("\nPlease input the coef and expn of pb:\n");pb=create(); /*同理,创建B*/print(pb); p=pa-》next; /*以下代码用于排序*/ pa-》next=NULL; while(p!=NULL) { if(pa-》next==NULL) { pa-》next=p;p=p-》next; pa-》next-》next=NULL; } else { pre=pa;q=pre-》next; while(q!=NULL && p-》expn》q-》expn) { pre=q;q=q-》next; } q=p-》next; p-》next=pre-》next; pre-》next=p; p=q; } } printf("\nthe first ordered one:\n");print(pa); /*输出排序后的pa*/ p=pb-》next; /*以下代码用于给pb排序*/ pb-》next=NULL; while(p!=NULL) { if(pb-》next==NULL) { pb-》next=p;p=p-》next; pb-》next-》next=NULL; } else { pre=pb;q=pre-》next; while(q!=NULL && p-》expn》q-》expn) { pre=q;q=q-》next; } q=p-》next; p-》next=pre-》next; pre-》next=p; p=q; } } printf("\nthe second ordered one:\n");print(pb); /*输出排序后的pb*/printf("\nSum of the polys is:\n");polyadd(pa,pb); /*调用一元多项式相加函数*/print(pa); /*调用输出函数,打印结果*/printf("\n");setbkcolor(RED);calculate(); /*调用计算多项式值的函数*/}【编后总结】本程序在逻辑设计,详细设计,程序编码和程序调试阶段时本来都城有设计save()保存函数,和load()下载函数,分别用来保存创建的多项式,和下载其它需计算的多项式数据,这样这个系统才能更加实用,void createadj()原来的函数原型为arcnode *createdj()函数中用链表结构把adjmatrix,最后只放弃save()和load()函数,在 main()主函数中初始化该算式。从这次程序设计中我看到自己的不足之处,今后要更努力的学习和掌握好数据结构程序设计的知识。

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

数据结构课程设计报告树的遍历:文件目录结构显示专业计算机科学与技术(软件工程)学生姓名施利华班级M计算机101学号0751401208指导教师吴 素 芹起止日期2012.1.7-2012.1.14目 录1 简介12算法说明23测试结果34分析与探讨65小结8参考文献9附录10附录1 源程序清单10树的遍历:文件目录结构的显示1 简介 1. 树形结构树形结构是一类十分重要的非线性结构,它可以很好地描述客观世界中广泛存在的具有分支关系或层次特性的对象,如操作系统的文件构成、人工智能搜索算法的模型表示以及数据库系统的信息组织形式等。2.输入要求:输入数据包含几个测试案例。每一个案例由几行组成,每一行都代表了目录树的层次结构。第一行代表了目录的根节点。若是目录节点,那么它的孩子节点将在第二行中被列出,同时用一对圆括号“()”界定。同样,如果这些孩子节点中某一个也是目录的话,那么这个目录所包含的内容将在随后的一行中列出,由一对圆括号将首尾界定。目录的输入格式为:*name size,文件的输入格式为:name size,其中*代表当前节点是目录,表示文件或目录的名称,由一串长度不大于10的字符组成,并且name字符串中不能含有‘(’,‘),’‘和’*‘。size是该文件/目录的大小,为一个大于0的整数。每一个案例中最多只能包含10层,每一层最多有10个文件/目录。3.输出要求:对每一个测试案例,输出时要求:第d层的文件/目录名前需要插入8*d个空格,兄弟节点之间要在同一列上。不要使用Tab(制表符)来统一输出的缩进。每一个目录的大小(size)是它所包含的所有子目录和文件大小以及它自身大小的总和。4.输入例子:*/usr1(*mark1*alex1)(hw.c3*course1)(hw.c5)(aa.txt12)*/usr1()表示有两个不同的根目录,目录名都是/usr,第一个根目录/usr下包含mark和alex两个子目录,mark目录下包含大小为3的文件hw.c和子目录course,alex目录下有一个大小为5的文件hw.c,子目录course下包含文件aa.txt,其大小为12;第二个根目录/usr下为空。5.输出例子:|_*/usr |_*mark | |_hw.s | |_*course | |_aa.txt |_*alex |_hw.c|_*/usr2算法说明typedef struct TreeNode{int data;TreeNode *left;TreeNode *right;}TreeNode,*Tree;先序:void first(Tree *root){ printf("%d ",root-》data); first(root-》left); first(root-》right);}中序:void mid(Tree *root){ mid(root-》left); printf("%d ",root-》data); mid(root-》right);}后序:void last(Tree *root){ last(root-》left); last(root-》right); printf("%d ",root-》data);}3测试结果将代码打入Microsoft Visual C++ 6.0软件中,改完相关错误后运行代码,开始不能出现正确的运行结果,在相关文件中新建文本文件,文件命名为”input.txt“。在文本文件中,打入输入数据,得出下列截图。图3-1 输入数据得出”input.txt”记事后,重新运行代码,在相关文件夹的“output.txt”会出现相关的正确的输出结果,此时得出下列两张截图。图3-2 输出结果图3-3 输出结果输入正确的代码后运行程序,得出下列截图。图3-4 运行结果4分析与探讨目录结构是一种典型的树形结构,为了方便对目录的查找,遍历等操作,可以选择孩子兄弟双亲链表来存储数的结构。程序中要求对目录的大小进行重新计算,根据用户的输入来建立相应的孩子兄弟双亲链表,最后输入树形结构。可以引入一个Tree类,将树的构造,销毁,目录大小的重新计算(reSize),建立树形链表结构(parse),树形结构输出(outPut)等一系列操作都封装起来,同时对于每一个树的借点,它的私有变量除了名称(Name),大小(Size)和层数(Depth)之外,根据孩子兄弟双亲链表表示的需要,还要设置三个指针,即父指针(Tree*parent),下一个兄弟指针(Tree*NextSibling)和第一个孩子指针(Tree*Firstchild)。下面是几个主要函数的实现。1.建立树形链表结构的函数parse()根据输入来确定树形关系是,首先读取根借点目录/文件名和大小值,并根据这些信息建立一个新的节点;然后读入后面的各行信息,对于同一括号中的内容,即具有相同父节点的那些节点建立兄弟关联。这个函数实际上是采用层数遍历建立树形链表结构。定义一个Tree*类型的数组treeArray中。2.目录大小重新计算函数reSize()输入数据中对目录大小的初始化值一般为1,而目录的真正大小应该是自身的大小和它包含的所有文件及子目录的大小之和。因此,在计算目录大小的时候,需要遍历它下面所有的文件和子目录,可以采用递归嵌套的后序遍历方式。另外要注意,采用孩子兄弟双亲链表表示时,父目录下的所有子目录和子文件都在该父目录的左子树上(右字数第一个节点是该目录的兄弟节点),所以遍历的时候只需要遍历目录的左字数即可。3.输出树形结构的函数outPut()输出是一个线序遍历的过程。为完成对树形的输出,兄弟目录之前需要相同的缩进,用’|’上下相连,而斧子目录或父目录和子文件之间需要设定正确的缩进,子目录或子文件要比父目录向右缩进8个空格。设置一个标志数组flag=0时则输出“ ”,这样就可以保证兄弟节点之间有相同的缩进,而子节点总比父节点享有缩进8个空格。treeArray4.消除输入总多余空格的函数skipwhiteSpace(string&s,int*i)从用户输入数据中读入一行后,调用该函数来跳过s字符串中s之后的空格,以方便后面的处理。此外,关于读入目录名称,大小,以及将string类型的Size值转换成int类型的函数的实现,相对比较简单,此外不再赘述。图4-1 数据异常测试案例5小结参考文献机械工业出版社,2004年9月 谭浩强.C程序设计(第三版).清华大学出版社,2005年7月 严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社,1997年4月吴文虎.程序设计基础.清华大学出版社,2003年王立柱.C/C++与数据结构.清华大学出版社,2002年顾元刚.数据结构简明教程.东南大学出版社,2003年郭福顺,王晓芬,李莲治.数据结构(修订本).大连理工大学出版社,1997年严蔚敏,陈文博.数据结构及应用算法教程.清华大学出版社,2004年附录附录1 源程序清单#include 《string》#include 《iostream》#include 《fstream》using namespace std;string s = "";int startPos = 0;ofstream outfile;ifstream infile;/**构造Tree类**/class Tree{string Name; /* 树的根结点名称 */int Size; /* 树的大小,用于统计这棵树本身及其包含的所以子树大小的总和*/Tree* FirstChild; /* 指向它的第一个孩子结点 */Tree* NextSibling; /* 指向它的下一个兄弟结点 */Tree* parent; /* 指向双亲结点 */public:Tree(string Name = "", int Size = 0);/* 构造函数 */void parse(); /* 根据输入数据来建立树形结构 */void reSize(); /* 重新统计树结点的大小 */void outPut();/* 输出树形结构 */~Tree(); /* 析构函数 */};/*** 树结点数组treeArray,以及用来标注双亲结点位置的head和目录结点的rear***/Tree* treeArray;int head = 0, rear = 0;/*** 建立只有一个结点的树,其三个指针域均为空 ***/Tree::Tree(string Name, int Size){this-》Name = Name;this-》Size = Size;FirstChild = NULL;NextSibling = NULL;parent = NULL;}/*** 析构函数,删除同一根结点下的各个子结点,释放空间 ***/Tree::~Tree(){Tree* temp;Tree* temp1;temp = FirstChild;while(temp != NULL){temp1 = temp;temp = temp-》NextSibling;delete temp1;}}/* 先序遍历根结点下的所有结点,将每一个结点的Size值都加到根结点的Size中去**/void Tree::reSize(){Tree* temp = this; /*** 如果当前的结点没有孩子结点,则它的Size值不变,即为输入时候的值 ***/if(temp-》FirstChild != 0){temp = temp-》FirstChild;while(temp != 0){temp-》reSize();Size += temp-》Size;temp = temp-》NextSibling;}}}/***检查Name中有无非法字符**************/bool checkName(string s){if(s!=’*’ && s.length() 》 10)return false;if(s==’*’ && s.length() 》 11)return false;if(s’))return false;for(int i=1;i《s.length();i++){if(s’)return false;}return true;}/*** 按照先序遍历的方式有缩进地来输出树形结构 ***/void Tree::outPut(){Tree* temp; /*用来指向当前结点的祖先结点*/Tree* temp1;bool flag;/*用来标志输出缩进、层次情况的数组*/int i;outfile.open("output.txt",ios::app);if(!outfile){cout《《"cannot append the output file.\n";exit(0);}if(!checkName(Name)){cout《《"input error!--"《《Name《《endl;exit(0);}outfile《《"|_"《《Name《《"\n";outfile.close(); /* 输出当前的结点信息 */temp1= FirstChild;/* 用来指向当前结点的子结点 */while(temp1 != NULL){outfile.open("output.txt",ios::app);if(!outfile){cout《《"cannot append the output file.\n";exit(0);}i = 0;temp = temp1;while(temp-》parent != NULL){/*当前temp指针所指的结点如果有兄弟结点,则置flag数组值为1,否则置为0;并由此结点反复查询它的祖先结点的情况,直到根结点为止*/if(i》=10){//检查当前的父目录包含的子文件(或目录数)是否大于10;cout《《"input error!--dictionary contains more than 10 levels."《《endl;exit(0);}temp = temp-》parent; if(temp-》NextSibling != NULL)flag = true; elseflag = false;}/*兄弟结点之间有相同的缩进,子结点比父结点向右缩进8个空格*/while(i--){if(flag == true)outfile《《"| ";elseoutfile《《" "; }outfile.close();temp1-》outPut();temp1 = temp1-》NextSibling;}}/*** 跳过字符串s中,第(*i)个之后多余的空格 ***/void skipWhiteSpace(string& s, int* i){while(s == ’ ’)(*i)++;}/*** 获取输入行中一对’()’之间的字符串,即为同一双亲结点下的子结点 ***/string getSubDir(string& line, int* startPos){string res = "";skipWhiteSpace(line,startPos);while(line != ’)’)res += line;res += line;skipWhiteSpace(line, startPos);return res;}/*** 由于用户输入时候目录的大小Size值为String类型,因此需要将它转变成integer类型***/int stringToNum(string s){int num = 0;unsigned int i = 0;while(i 《 s.length()){num *= 10;num += s - ’0’;} return num;}/*** 提取目录/文件的名称 ***/string getName(string& s, int* i){string name = "";while(s != ’\t’)name += s;return name;}/*** 提取目录/文件的大小,然后将string类型转换成integer类型 ***/int getSize(string&s, int* i){string size = "";while((unsigned int)(*i) 《 s.length() && s != ’)’)size += s;return stringToNum(size);}/*** 根据用户的输入字符串来构建树的结构 ***/void Tree::parse(){Tree* temp;string line;string name;int size;/***head值用来标记当前结点的双亲结点位置;如果当前处理的结点是目录类型,则将它放在treeArray中 ***/while(getline(infile,line,’\n’)){startPos = 0;while(1){s = getSubDir(line, &startPos);int i = 1;skipWhiteSpace(s, &i);if(s != ’)’){skipWhiteSpace(s,&i);name = getName(s,&i);skipWhiteSpace(s,&i);size = getSize(s,&i);temp = treeArray-》FirstChild = new Tree(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 = new Tree(name,size);skipWhiteSpace(s,&i);temp = temp-》NextSibling;temp-》parent = treeArray;if(name == ’*’)treeArray = temp;}head ++; /***测试是否一行扫描完毕***/if((unsigned int)startPos 》= line.length())break;} /***只有一个根结点的情况***/if(head == rear)break;}}/////////////////////////////////////////////////////////////**** 主测试文件main.cpp******///////////////////////////////////////////////////////////////int main(){Tree* fileTree;string s;string name;int size;outfile.open("output.txt");if(!outfile){cout《《"cannot open the output file!\n";exit(0);}outfile《《"The result is as follows:\n";outfile.close(); infile.open("input.txt",ios::out);if(!infile){cout《《"cannot open the input file!\n";exit(0);}while(getline(infile,s,’\n’)){int i = 0;skipWhiteSpace(s, &i);name = getName(s,&i);skipWhiteSpace(s,&i);size = getSize(s,&i);fileTree = new Tree(name, size);if(name == ’*’){treeArray = fileTree;fileTree-》parse();}fileTree-》reSize();fileTree-》outPut();delete fileTree;}infile.close();return 0;}

《数据结构》课程设计报告:后序遍历( 用递归和非递归的方法一起都要)

我们的数据结构实验也是这题,需要我把我的实验报告给你参考下么! 我这里就只发这部分的代码。Status PreOrderTraverse(BiTree T){//先序遍历二叉树T的递归算法if (T){printf("%d ",T-》data);if(T-》lchild) PreOrderTraverse(T-》lchild);if(T-》rchild) PreOrderTraverse(T-》rchild);return FALSE;}elsereturn OK;}Status PreOrder(BiTree T){//先序遍历二叉树T的非递归算法while(!(T==NULL&⊤==NULL)){if(T){printf("%d ",T-》data);push(T);T=T-》lchild;}else{T=(BiTree)pop();T=T-》rchild;}}}Status InOrderTraverse(BiTree T){//中序遍历二叉树T的递归算法if (T){if (T-》lchild) InOrderTraverse(T-》lchild); printf("%d ",T-》data);if (T-》rchild) InOrderTraverse(T-》rchild);return FALSE;}else return OK;}Status InOrder(BiTree T){//中序遍历二叉树T的非递归算法while(!(T==NULL&⊤==NULL)){while(T){push(T);T=T-》lchild;}T=(BiTree)pop();printf("%d ",T-》data);T=T-》rchild;}}Status PostOrderTraverse(BiTree T){//后序遍历二叉树T的递归算法if (T){if (T-》lchild) PostOrderTraverse(T-》lchild); if (T-》rchild) PostOrderTraverse(T-》rchild);printf("%d ",T-》data);return FALSE;}else return OK;}Status PostOrder(BiTree T){//后序遍历二叉树T的递归算法unsigned sign;//记录结点从栈中弹出的次数 while(!(T==NULL&⊤==NULL)){if(T){push(T);//第一次遇到结点T时压入其指针 push(1);//置标志为1 T=T-》lchild;}else{while(top){sign=pop();T=(BiTree)pop();if(1==sign)//表示走过T的左子树 {push(T);push(2);T=T-》rchild;break;}else{if(2==sign)//表示T的左右子树都已走过 {printf("%d ",T-》data);T=NULL;}}}}}}

关于本次数据结构课程设计报告模板和算法课程设计报告的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

数据结构课程设计报告模板(算法课程设计报告)

本文编辑:admin
Copyright © 2022 All Rights Reserved 威海上格软件有限公司 版权所有

鲁ICP备20007704号

Thanks for visiting my site.