数据结构实习报告

合集下载

数据结构实验报告_实验报告_

数据结构实验报告_实验报告_

数据结构实验报告想必学计算机专业的同学都知道数据结构是一门比较重要的课程,那么,下面是小编给大家整理收集的数据结构实验报告,供大家阅读参考。

数据结构实验报告1一、实验目的及要求1)掌握栈和队列这两种特殊的线性表,熟悉它们的特性,在实际问题背景下灵活运用它们。

本实验训练的要点是“栈”和“队列”的观点;二、实验内容1) 利用栈,实现数制转换。

2) 利用栈,实现任一个表达式中的语法检查(选做)。

3) 编程实现队列在两种存储结构中的基本操作(队列的初始化、判队列空、入队列、出队列);三、实验流程、操作步骤或核心代码、算法片段顺序栈:Status InitStack(SqStack &S){S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemTyp e));if(!S.base)return ERROR;S.top=S.base;S.stacksize=STACK_INIT_SIZE;return OK;}Status DestoryStack(SqStack &S){free(S.base);return OK;}Status ClearStack(SqStack &S){S.top=S.base;return OK;}Status StackEmpty(SqStack S){if(S.base==S.top)return OK;return ERROR;}int StackLength(SqStack S){return S.top-S.base;}Status GetTop(SqStack S,ElemType &e){if(S.top-S.base>=S.stacksize){S.base=(ElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemTyp e));if(!S.base) return ERROR;S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return OK;Status Push(SqStack &S,ElemType e){if(S.top-S.base>=S.stacksize){S.base=(ElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(ElemTyp e));if(!S.base)return ERROR;S.top=S.base+S.stacksize;S.stacksize+=STACKINCREMENT;}*S.top++=e;return OK;}Status Pop(SqStack &S,ElemType &e){if(S.top==S.base)return ERROR;e=*--S.top;return OK;}Status StackTraverse(SqStack S){ElemType *p;p=(ElemType *)malloc(sizeof(ElemType));if(!p) return ERROR;p=S.top;while(p!=S.base)//S.top上面一个...p--;printf("%d ",*p);}return OK;}Status Compare(SqStack &S){int flag,TURE=OK,FALSE=ERROR; ElemType e,x;InitStack(S);flag=OK;printf("请输入要进栈或出栈的元素:"); while((x= getchar)!='#'&&flag) {switch (x){case '(':case '[':case '{':if(Push(S,x)==OK)printf("括号匹配成功!\n\n"); break;case ')':if(Pop(S,e)==ERROR || e!='('){printf("没有满足条件\n");flag=FALSE;}break;case ']':if ( Pop(S,e)==ERROR || e!='[')flag=FALSE;break;case '}':if ( Pop(S,e)==ERROR || e!='{')flag=FALSE;break;}}if (flag && x=='#' && StackEmpty(S)) return OK;elsereturn ERROR;}链队列:Status InitQueue(LinkQueue &Q) {Q.front =Q.rear=(QueuePtr)malloc(sizeof(QNode));if (!Q.front) return ERROR;Q.front->next = NULL;return OK;}Status DestoryQueue(LinkQueue &Q) {while(Q.front){Q.rear=Q.front->next;free(Q.front);Q.front=Q.rear;}return OK;}Status QueueEmpty(LinkQueue &Q){if(Q.front->next==NULL)return OK;return ERROR;}Status QueueLength(LinkQueue Q){int i=0;QueuePtr p,q;p=Q.front;while(p->next){i++;p=Q.front;q=p->next;p=q;}return i;}Status GetHead(LinkQueue Q,ElemType &e) {QueuePtr p;p=Q.front->next;if(!p)return ERROR;e=p->data;return e;}Status ClearQueue(LinkQueue &Q){QueuePtr p;while(Q.front->next ){p=Q.front->next;free(Q.front);Q.front=p;}Q.front->next=NULL;Q.rear->next=NULL;return OK;}Status EnQueue(LinkQueue &Q,ElemType e) {QueuePtr p;p=(QueuePtr)malloc(sizeof (QNode));if(!p)return ERROR;p->data=e;p->next=NULL;Q.rear->next = p;Q.rear=p; //p->next 为空return OK;}Status DeQueue(LinkQueue &Q,ElemType &e) {QueuePtr p;if (Q.front == Q.rear)return ERROR;p = Q.front->next;e = p->data;Q.front->next = p->next;if (Q.rear == p)Q.rear = Q.front; //只有一个元素时(不存在指向尾指针) free (p);return OK;}Status QueueTraverse(LinkQueue Q){QueuePtr p,q;if( QueueEmpty(Q)==OK){printf("这是一个空队列!\n");return ERROR;}p=Q.front->next;while(p){q=p;printf("%d<-\n",q->data);q=p->next;p=q;}return OK;}循环队列:Status InitQueue(SqQueue &Q){Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType)); if(!Q.base)exit(OWERFLOW);Q.front=Q.rear=0;return OK;}Status EnQueue(SqQueue &Q,QElemType e){if((Q.rear+1)%MAXQSIZE==Q.front)return ERROR;Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAXQSIZE;return OK;}Status DeQueue(SqQueue &Q,QElemType &e){if(Q.front==Q.rear)return ERROR;e=Q.base[Q.front];Q.front=(Q.front+1)%MAXQSIZE;return OK;}int QueueLength(SqQueue Q){return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;}Status DestoryQueue(SqQueue &Q){free(Q.base);return OK;}Status QueueEmpty(SqQueue Q) //判空{if(Q.front ==Q.rear)return OK;return ERROR;}Status QueueTraverse(SqQueue Q){if(Q.front==Q.rear)printf("这是一个空队列!");while(Q.front%MAXQSIZE!=Q.rear){printf("%d<- ",Q.base[Q.front]);Q.front++;}return OK;}数据结构实验报告2一.实验内容:实现哈夫曼编码的生成算法。

数据机构实训总结报告

数据机构实训总结报告

一、引言随着计算机科学技术的不断发展,数据结构作为计算机科学的核心基础课程,对于提高计算机程序设计能力和算法优化具有重要意义。

为了提高我们的数据结构理论知识和实际应用能力,我们进行了为期一个月的数据结构实训。

本次实训内容丰富,形式多样,通过实践操作,我们掌握了各种数据结构的特点、实现方法及应用场景,现将实训总结如下。

二、实训内容1. 数据结构理论学习实训期间,我们重点学习了以下数据结构:(1)线性结构:线性表、栈、队列、双端队列。

(2)非线性结构:树、二叉树、图。

(3)高级数据结构:哈希表、散列表、字典树、并查集。

2. 数据结构实现与算法分析实训中,我们运用C++、Java等编程语言实现了上述数据结构,并对关键算法进行了分析,包括:(1)线性结构:插入、删除、查找、排序等。

(2)非线性结构:遍历、查找、插入、删除、路径查找等。

(3)高级数据结构:查找、插入、删除、合并等。

3. 数据结构应用案例分析实训过程中,我们结合实际案例,分析了数据结构在计算机科学、人工智能、数据库、网络通信等领域的应用,如:(1)线性结构在操作系统进程管理中的应用。

(2)树和图在社交网络、网络拓扑结构中的应用。

(3)哈希表在数据库索引、缓存中的应用。

三、实训成果1. 提高数据结构理论水平通过本次实训,我们对数据结构的基本概念、特点、实现方法有了更加深入的了解,为今后的学习和工作打下了坚实的基础。

2. 增强编程能力在实训过程中,我们动手实现了各种数据结构,提高了编程能力,学会了如何将理论知识应用于实际编程。

3. 提升算法分析能力通过对关键算法的分析,我们学会了如何分析算法的时间复杂度和空间复杂度,为今后的算法优化提供了理论依据。

4. 培养团队协作精神在实训过程中,我们分组合作,共同完成了实训任务,培养了团队协作精神。

四、实训心得1. 理论与实践相结合在实训过程中,我们深刻体会到理论联系实际的重要性。

只有将理论知识与实际编程相结合,才能真正掌握数据结构。

数据结构实验报告2篇

数据结构实验报告2篇

数据结构实验报告数据结构实验报告精选2篇(一)实验目的:1. 熟悉数据结构的基本概念和基本操作;2. 掌握线性表、栈、队列、链表等经典数据结构的实现方法;3. 掌握数据结构在实际问题中的应用。

实验内容:本次实验主要包括以下几个部分:1. 线性表的实现方法,包括顺序表和链表,分别使用数组和链表来实现线性表的基本操作;2. 栈的实现方法,包括顺序栈和链式栈,分别使用数组和链表来实现栈的基本操作;3. 队列的实现方法,包括顺序队列和链式队列,分别使用数组和链表来实现队列的基本操作;4. 链表的实现方法,包括单链表、双链表和循环链表,分别使用指针链、双向链和循环链来实现链表的基本操作;5. 综合应用,使用各种数据结构来解决实际问题,例如使用栈来实现括号匹配、使用队列来实现马铃薯游戏等。

实验步骤及结果:1. 线性表的实现方法:a) 顺序表的基本操作:创建表、插入元素、删除元素、查找元素等;b) 链表的基本操作:插入节点、删除节点、查找节点等;c) 比较顺序表和链表的优缺点,分析适用场景。

结果:通过实验,确认了顺序表适用于频繁查找元素的情况,而链表适用于频繁插入和删除节点的情况。

2. 栈的实现方法:a) 顺序栈的基本操作:进栈、出栈、判空、判满等;b) 链式栈的基本操作:进栈、出栈、判空、判满等。

结果:通过实验,掌握了栈的基本操作,并了解了栈的特性和应用场景,例如括号匹配。

3. 队列的实现方法:a) 顺序队列的基本操作:入队、出队、判空、判满等;b) 链式队列的基本操作:入队、出队、判空、判满等。

结果:通过实验,掌握了队列的基本操作,并了解了队列的特性和应用场景,例如马铃薯游戏。

4. 链表的实现方法:a) 单链表的基本操作:插入节点、删除节点、查找节点等;b) 双链表的基本操作:插入节点、删除节点、查找节点等;c) 循环链表的基本操作:插入节点、删除节点、查找节点等。

结果:通过实验,掌握了链表的基本操作,并了解了链表的特性和应用场景。

数据结构实训实验报告

数据结构实训实验报告

一、实验背景数据结构是计算机科学中一个重要的基础学科,它研究如何有效地组织和存储数据,并实现对数据的检索、插入、删除等操作。

为了更好地理解数据结构的概念和原理,我们进行了一次数据结构实训实验,通过实际操作来加深对数据结构的认识。

二、实验目的1. 掌握常见数据结构(如线性表、栈、队列、树、图等)的定义、特点及操作方法。

2. 熟练运用数据结构解决实际问题,提高算法设计能力。

3. 培养团队合作精神,提高实验报告撰写能力。

三、实验内容本次实验主要包括以下内容:1. 线性表(1)实现线性表的顺序存储和链式存储。

(2)实现线性表的插入、删除、查找等操作。

2. 栈与队列(1)实现栈的顺序存储和链式存储。

(2)实现栈的入栈、出栈、判断栈空等操作。

(3)实现队列的顺序存储和链式存储。

(4)实现队列的入队、出队、判断队空等操作。

3. 树与图(1)实现二叉树的顺序存储和链式存储。

(2)实现二叉树的遍历、查找、插入、删除等操作。

(3)实现图的邻接矩阵和邻接表存储。

(4)实现图的深度优先遍历和广度优先遍历。

4. 算法设计与应用(1)实现冒泡排序、选择排序、插入排序等基本排序算法。

(2)实现二分查找算法。

(3)设计并实现一个简单的学生成绩管理系统。

四、实验步骤1. 熟悉实验要求,明确实验目的和内容。

2. 编写代码实现实验内容,对每个数据结构进行测试。

3. 对实验结果进行分析,总结实验过程中的问题和经验。

4. 撰写实验报告,包括实验目的、内容、步骤、结果分析等。

五、实验结果与分析1. 线性表(1)顺序存储的线性表实现简单,但插入和删除操作效率较低。

(2)链式存储的线性表插入和删除操作效率较高,但存储空间占用较大。

2. 栈与队列(1)栈和队列的顺序存储和链式存储实现简单,但顺序存储空间利用率较低。

(2)栈和队列的入栈、出队、判断空等操作实现简单,但需要考虑数据结构的边界条件。

3. 树与图(1)二叉树和图的存储结构实现复杂,但能够有效地表示和处理数据。

数据结构实习总结报告

数据结构实习总结报告

数据结构实习总结【篇一:数据结构实训总结】这次课程设计的心得体会通过实习我的收获如下1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。

2、培养了我选用参考书,查阅手册及文献资料的能力。

培养独立思考,深入研究,分析问题、解决问题的能力。

3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。

4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。

从刚开始得觉得很难,到最后把这个做出来,付出了很多,也得到了很多,以前总以为自己对编程的地方还不行,现在,才发现只要认真做,没有什么不可能。

编程时要认真仔细,出现错误要及时找出并改正,(其中对英语的要求也体现出来了,因为它说明错误的时候都是英语)遇到问题要去查相关的资料。

反复的调试程序,最好是多找几个同学来对你的程序进行调试并听其对你的程序的建议,在他们不知道程序怎么写的时候完全以一个用户的身份来用对你的用户界面做一些建议,正所谓当局者迷旁观者清,把各个注意的问题要想到;同时要形成自己的编写程序与调试程序的风格,从每个细节出发,不放过每个知识点,注意与理论的联系和理论与实践的差别。

另外,要注意符号的使用,注意对字符处理,特别是对指针的使用很容易出错且调试过程是不会报错的,那么我们要始终注意指针的初始化不管它怎么用以免不必要麻烦。

通过近两周的学习与实践,体验了一下离开课堂的学习,也可以理解为一次实践与理论的很好的连接。

特别是本组所做的题目都是课堂上所讲的例子,在实行之的过程中并不是那么容易事让人有一种纸上谈兵的体会,正所谓纸上得来终觉浅绝知此事要躬行。

实训过程中让我们对懂得的知识做了进一步深入了解,让我们的理解与记忆更深刻,对不懂的知识与不清楚的东西也做了一定的了解,也形成了一定的个人做事风格。

通过这次课程设计,让我对一个程序的数据结构有更全面更进一步的认识,根据不同的需求,采用不同的数据存储方式,不一定要用栈,二叉树等高级类型,有时用基本的一维数组,只要运用得当,也能达到相同的效果,甚至更佳,就如这次的课程设计,通过用for 的多重循环,舍弃多余的循环,提高了程序的运行效率。

数据结构的实训报告结果

数据结构的实训报告结果

一、实训目的本次数据结构实训旨在通过实践操作,加深对数据结构理论知识的理解,提高解决实际问题的能力。

通过实训,使学生能够熟练掌握各种基本数据结构及其操作方法,并能够将这些知识应用于解决实际问题。

二、实训环境1. 操作系统:Windows 102. 编程语言:C语言3. 开发环境:Visual Studio 20194. 实训教材:《数据结构》(C语言版)三、实训内容本次实训主要内容包括线性表、栈、队列、树、图等基本数据结构的创建、操作和应用。

1. 线性表(1)单链表的创建、插入、删除和查找操作(2)双向链表的创建、插入、删除和查找操作(3)循环链表的创建、插入、删除和查找操作2. 栈(1)栈的创建、入栈、出栈和判断栈空操作(2)应用栈实现括号匹配3. 队列(1)队列的创建、入队、出队和判断队列空操作(2)应用队列实现广度优先搜索4. 树(1)二叉树的创建、插入、删除和遍历操作(2)二叉查找树的创建、插入、删除和查找操作5. 图(1)图的创建、添加边、删除边和遍历操作(2)图的深度优先遍历和广度优先遍历四、实训过程1. 线性表首先,我们学习了单链表、双向链表和循环链表的基本概念和创建方法。

通过编写代码,实现了链表的插入、删除和查找操作。

在实训过程中,我们遇到了一些问题,如链表插入操作时指针的移动、删除操作时避免内存泄漏等。

通过查阅资料和与同学讨论,我们逐步解决了这些问题。

2. 栈接着,我们学习了栈的基本概念和操作方法。

通过编写代码,实现了栈的创建、入栈、出栈和判断栈空操作。

在实训过程中,我们遇到了栈空和栈满的情况,通过设置标志位和循环队列的方法解决了这些问题。

此外,我们还学习了应用栈实现括号匹配,加深了对栈的应用理解。

3. 队列然后,我们学习了队列的基本概念和操作方法。

通过编写代码,实现了队列的创建、入队、出队和判断队列空操作。

在实训过程中,我们遇到了队列空和队列满的情况,通过设置标志位和循环队列的方法解决了这些问题。

数据结构实验报告及心得体会

数据结构实验报告及心得体会

数据结构实验报告及心得体会一、概述:介绍本次实验的目的、背景以及所使用的实验环境和工具。

本次实验旨在通过实际操作,深入理解和掌握数据结构的原理及应用。

实验背景源于课程学习的理论知识与实际应用相结合的需求,通过实验操作,期望能够将课堂所学的数据结构知识更好地运用到实际编程和解决现实问题中。

本次实验所使用的实验环境为先进的计算机实验室,配备了高性能的计算机硬件和丰富的软件开发工具。

为了完成实验,我使用了Java编程语言,并结合Eclipse开发环境进行编程和调试。

我还参考了相关的数据结构专业书籍和在线资源,以便更好地理解和应用数据结构知识。

在实验过程中,我严格按照实验指导书的步骤进行操作,并认真记录了实验数据和结果。

通过本次实验,我深刻体会到了数据结构的重要性,也对数据结构的实现和应用有了更深入的了解。

二、实验内容:分别介绍线性数据结构(线性表)、非线性数据结构(二叉树、图)的实验内容,包括其实现方法、操作过程等。

每个实验都包含具体的实验目的和预期结果。

三、实验过程及结果分析:详细描述实验过程,包括实验步骤的执行情况,遇到的问题及解决方法。

对实验结果进行展示,并进行数据分析和结论。

这部分是实验报告的核心部分,体现了学生的实践能力和问题解决能力。

四、心得体会:分享在实验过程中的心得体会,包括遇到的困难、收获,对数据结构的理解与认识提升,以及实验过程中的团队协作和学习体验等。

这部分内容可以体现出学生的思考深度和学习的主观感受。

五、总结与展望:对本次实验报告进行总结,并对未来数据结构与算法的学习提出展望和建议。

这部分内容可以帮助学生梳理所学知识,明确未来的学习方向。

2024年数据库实习报告范文5篇

2024年数据库实习报告范文5篇

2024年数据库实习报告范文2024年数据库实习报告范文精选5篇(一)以下是一个关于2024年数据库实习报告的范文:2024年数据库实习报告一、实习内容和目标作为2024年暑期实习的一部分,我参加了一家互联网科技公司的数据库实习。

实习期间,我主要负责数据库的管理和优化工作。

我的目标是通过实习体验,提升自己在数据库领域的理论知识和实际操作技能。

二、实习过程和收获1. 熟悉数据库系统在实习开始之前,我对数据库系统进行了较为深入的学习,包括关系数据库、SQL语言和数据库设计原则等方面的知识。

这为我后续的实习工作打下了良好的基础。

2. 数据库管理在实习过程中,我负责了公司数据库的日常管理工作。

包括数据库的备份、恢复以及性能监控等。

通过实际操作,我更加深入地了解了数据库管理的重要性,也学会了如何处理一些常见的数据库问题。

3. 数据库优化在实习期间,我也参与了数据库的优化工作。

通过分析系统运行情况和数据库性能指标,我提出了一些优化建议,如索引的创建和优化、SQL语句的优化等。

这些优化措施有效地提升了系统的性能和响应速度。

4. 项目实践除了日常的数据库管理和优化工作,我还参与了一个数据库相关的项目。

在这个项目中,我负责设计和实现数据库的结构,并编写相关的SQL语句。

通过这个实践项目,我在数据库设计和开发方面获得了更多的实际经验。

三、实习总结和反思通过这次数据库实习,我不仅提升了自己的理论知识,还学会了如何将这些知识应用到实际工作中。

同时,我也意识到数据库管理和优化工作的重要性,以及在项目中正确使用数据库的必要性。

在未来的学习和工作中,我将继续加强对数据库领域的学习和探索,不断提升自身的能力。

四、感谢与致谢在实习期间,我得到了公司和导师的大力支持和帮助,特此表示衷心的感谢。

感谢他们为我提供了这次宝贵的实习机会,并给予了我充分的指导和鼓励。

同时,也要感谢我的同事们,在他们的帮助下我能够更快地适应团队工作,并取得了一定的成绩。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

int m=count(p->lchild); m+=count(p->rchild); if( !m ) return 1; else return m; } else return 0; } int depth(TreeNode *&p) { if(!p) return 0; int m=depth(p->lchild)+1; int n=depth(p->rchild)+1; return m>n?m:n; } void exchange(TreeNode *&p) { TreeNode *temp; if(p) { temp=p->lchild; p->lchild=p->rchild; p->rchild=temp; exchange(p->lchild); exchange(p->rchild); } } void main(void) { char s[50]; TreeNode *tree; cout<<"输入相应的二叉树:"; cin.getline(s,50); CreateBinTree(tree,s); cout<<"先序为:";
【程序输出结果】
【结果分析、自己的体会和收获】:
我觉得上机实践对我们更深入地学习数据结构很有帮助。虽然我的 C++在上一学期学的还算可以,但毕竟学的只是一些皮毛,而且一个暑 假里没有去接触毕竟还是有些生疏了。不过这学期的数据结构则给了我 一个继续去深入学习编程的机会,让我受益匪浅。第一,以前学习编程 时接触到的程序很小,也比较简单,都是为学习考试的需要而编写的小 程序,不具有实用性,而数据结构中的程序使我们真正领略到编程强大 的功能与无限的魅力之所在,让我们在将来的计算机职场竞争中更具有
pb=pb->next; break; } return ha; } Node *Mul(Node *ha,Node *hb) { Node *hc,*p,*q,*r,*pt,*hp; hc=new Node; hc->exp=-1; hc->next=hc; p=ha->next; while(p!=ha){ hp=new Node; hp->exp=-1; hp->next=hp; pt=hp; q=hb->next; while(q!=hb){ r=new Node; r->coef=p->coef*q->coef; r->exp=p->exp+q->exp; pt->next=r; r->next=hp; pt=r; q=q->next; } hc=Add(hc,hp); p=p->next; } return hc; } void Outport(Node *h) { Node *p; p=h->next; while(p!=h){
preorder(tree); cout<<endl; cout<<"中序为:"; inorder(tree); cout<<endl; cout<<"后序为:"; postorder(tree); cout<<endl; cout<<"结点数为:"<<count(tree)<<endl; cout<<"树高为:"<<depth(tree)<<endl; exchange(tree); cout<<"先序为:"; preorder(tree); cout<<endl; cout<<"中序为:"; inorder(tree); cout<<endl; }
竞争力。比如该程序就可以作为一个软件来运算多项式乘法中的问题, 从而节省时间。其次,在上机实践初期与到了不少的困难,使我们不得 不重新翻开课本温故一下知识点,从而使我们更深刻地理解了它们。还 有,通过上机实践,使我们掌握了不少上机操作技能。 通过这次上机实践无疑大大提高了我们的分析思维能力,由于查阅 大量书籍,与同学进行交流,不仅学习了一些新的知识,也从中学习了 与提高了自学能力与程序设计能力。第二 ,从学习的过程中我也感受 到了学习的快乐和成就感。看着自己费尽辛劳所编的程序最后终于开花 结果,能够流畅的运行并满足了所有的要求,我心中的自豪感油然而 生,以喜悦的心情写下了这份报告书。这么多天的辛勤和脑力折磨终于 有了成果,黄天不负有心人,可以说,这次编程使我那些在课本上已经 懂得了的和那些很多不太明白的地方都有了新的理解。第三,其实这个 程序并不是特别的难,运用的知识都是课本上学过的,但是你要想把他 弄的很好也不是那么的容易的。我知道无论做什么事,既然你要做,那 么你就要尽自己的最大的努力去把他做好,事在人为。
【程序代码】
#include<iostream.h> #include<stdlib.h> struct Node{ double coef; int exp; Node *next; }; Node *Create() { Node *h,*p; double x; int y; h=new Node; h->exp=-1; p=h; while(1){ cin>>x>>y; if(x==0&&y==0) break; if(y<0){ cout<<"指数不能为负!"<<endl; exit(1); } p->next=new Node; p=p->next; p->coef=x; p->exp=y; } p->next=h; return h; }
数据结构 上机实验报告
院系:计算机科学与技术学院 学号:0906840440 姓名:姚凌翔 指导老师:张宏
实验一:多: hc=ha*hb 要求: (1) 输入形式: 以“系数 指数”<Enter>的递减序输入,最后 以“0 0<Enter>”结束 (2) 输出,见格式 例: 5x9-7x2+6x-5 输入为: 输出为: 5X^9-7X^2+6X-5 5 9 -7 2 6 1 5 0 0 0
实验二:二叉树的相关操作
【实验内容及要求】
题目: 建立一棵二叉树,数据以字符串形式从键盘输入。在此二叉树上完成: (1)前序、中序、后序遍历 (2)求出叶子数 (3)求树高 (4)左右子树交换,输出交换后的前序、中序遍历序列 范例: A B C D * E *
* F * * *** *
【程序代码】
if(p->coef>0&&p->coef!=1) if(p!=h->next) if(p->exp>1) cout<<"+"<<p->coef<<"X^"<<p->exp; else switch(p->exp){ case 0: cout<<"+"<<p->coef;break; case 1: cout<<"+"<<p->coef<<"X";break; } else if(p->exp>1) cout<<p->coef<<"X^"<<p->exp; else switch(p->exp){ case 0: cout<<p->coef;break; case 1: cout<<p->coef<<"X";break; } else if(p->coef<0&&p->coef!=-1) if(p->exp>1) cout<<p->coef<<"X^"<<p->exp; else switch(p->exp){ case 0: cout<<p->coef;break; case 1: cout<<p->coef<<"X";break; } else switch(int(p->coef)){ case -1: if(p->exp>1) cout<<"-X^"<<p->exp;
} else p=NULL; } void preorder(TreeNode *p) { if(p!=NULL) { cout<<p->data; preorder(p->lchild); preorder(p->rchild); } } void inorder(TreeNode *p) { if (p) { inorder (p->lchild); cout<<p->data; inorder (p->rchild); } } void postorder(TreeNode *p) { if (p) { postorder (p->lchild); postorder (p->rchild); cout<<p->data; } } int count(TreeNode *p) { if(p) {
【程序输出结果】
【结果分析、自己的体会和收获】:
第一次编写一个关于二叉树的完整程序,确实是一件很不容易的 事。 编程之前先花了两天复习了一遍教材上与二叉树有关的内容,尤其 是二叉树的创建、遍历等内容。值得庆幸的是这个程序涉及到的二叉树 的基本操作基本上老师都讲过,自己也认真的做了一下笔记,复习起来 不是很麻烦。 初拿到这道题目时,我根据课件上源代码的提示,仔细研读书上已 有的代码,认真消化,仔细理解。其中难度最大的就是遍历了。在思考 清楚一系列问题后,接下来就是动手编写程序了。在编写的过程中遇到 了很多之前根本没有考虑到的问题,经过自己的仔细思考和与同学的讨 论,最终还是解决了。 总之,这次上机实践让我切身体会到了什么是二叉树。虽然说总体 上与以往上机题目那种几个功能函数加一个主函数存在一定的相同之 处,但这次最大的不同之处就在于递归函数的多次调用,这在理解难度 和程序编写上都提升了一定的档次。 设计程序光有语法知识是远远不够的,最重要的是多动手,多熟 练,在动手的过程中能强化很多概念。另外对程序全局一定要有个清晰
相关文档
最新文档