数据结构 实习报告

合集下载

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

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

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

数据结构实验报告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一.实验内容:实现哈夫曼编码的生成算法。

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

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

数据结构实验报告实验总结本次数据结构实验主要涉及线性表、栈和队列的基本操作以及链表的应用。

通过实验,我对这些数据结构的特点、操作和应用有了更深入的了解。

下面对每一部分实验进行总结。

实验一:线性表的基本操作线性表是一种常见的数据结构,本实验要求实现线性表的基本操作,包括插入、删除、查找、遍历等。

在实验过程中,我对线性表的结构和实现方式有了更清晰的认识,掌握了用数组和链表两种方式实现线性表的方法。

实验二:栈的应用栈是一种后进先出(LIFO)的数据结构,本实验要求利用栈实现简单的括号匹配和后缀表达式计算。

通过实验,我了解到栈可以方便地实现对于括号的匹配和后缀表达式的计算,有效地解决了对应的问题。

实验三:队列的应用队列是一种先进先出(FIFO)的数据结构,本实验要求利用队列实现银行排队和迷宫求解。

通过实验,我对队列的应用有了更加深入的了解,了解到队列可以解决需要按顺序处理的问题,如排队和迷宫求解等。

实验四:链表的应用链表是一种常用的数据结构,本实验要求利用链表实现学生信息管理系统。

通过实验,我对链表的应用有了更深入的了解,了解到链表可以方便地实现对于数据的插入、删除和修改等操作,并且可以动态地调整链表的长度,适应不同的需求。

通过本次实验,我掌握了线性表、栈、队列和链表的基本操作,并了解了它们的特点和应用方式。

同时,通过实际编程的过程,我对于数据结构的实现方式和效果有了更直观的认识,也锻炼了自己的编程能力和解决问题的能力。

在实验过程中,我遇到了一些问题,如程序逻辑错误和内存泄漏等,但通过调试和修改,最终成功解决了这些问题,对自己的能力也有了更多的信心。

通过本次实验,我深刻体会到了理论与实践的结合的重要性,也对于数据结构这门课程有了更加深入的理解。

总之,本次数据结构实验给予了我很多有益的启发和收获,对于数据结构的概念、特点和应用有了更深入的理解。

在以后的学习中,我会继续加强对数据结构的学习和研究,不断提高自己的编程能力和解决问题的能力。

数据结构实验报告1线性表的顺序存储结构

数据结构实验报告1线性表的顺序存储结构

数据结构实验报告1线性表的顺序存储结构数据结构实验报告1线性表的顺序存储结构第一章引言线性表是计算机中最常见的数据结构之一,它是一种有序的数据元素集合,其中的数据元素之间具有一对一的关系。

线性表的存储结构有多种方式,其中顺序存储结构是最简单的一种,它使用一段连续的存储单元来存储线性表中的元素。

第二章顺序存储结构的定义顺序存储结构是将线性表中的元素按照其逻辑顺序依次存储在一块连续的存储空间中。

顺序存储结构的特点是可以快速地访问任意位置的元素,但插入和删除操作需要移动大量的元素。

第三章顺序存储结构的实现1.存储空间的分配顺序存储结构通常使用数组来实现,数组的长度应该大于等于线性表的长度,以防止溢出。

存储空间的分配可以使用静态分配或动态分配两种方式来实现。

2.线性表的初始化初始化线性表时,需要设置线性表的长度和当前元素的个数。

3.线性表的增删改查操作●插入操作:________在指定位置插入一个元素时,需要将插入位置之后的元素依次后移,给待插入的元素腾出位置。

●删除操作:________删除指定位置的元素时,需要将删除位置之后的元素依次前移,覆盖删除位置上的元素。

●修改操作:________修改指定位置的元素时,直接对该位置上的元素进行修改即可。

●查找操作:________根据指定的元素值,查找其在顺序存储结构中的位置。

4.线性表的遍历操作遍历操作可以按照顺序访问线性表中的每个元素,可以使用循环结构实现遍历操作。

第四章顺序存储结构的优缺点分析1.优点:________可以快速地访问任意位置的元素,节省存储空间。

2.缺点:________插入和删除操作需要移动大量的元素,不适用于频繁插入和删除的场景。

第五章实验过程和结果分析在本次实验中,我们以顺序存储结构为基础,实现了线性表的增删改查操作,并进行了遍历操作。

通过实验,我们发现顺序存储结构在查询操作上有较好的性能,但在插入和删除操作上的性能较差。

第六章附件本文档涉及的附件详见附件文件。

数据结构实验报告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. 二叉树:了解了树的定义和遍历方法,熟悉了二叉搜索树的操作。

4. 图:学习了图的基本概念和表示方法,实现了图的遍历和最短路径算法。

5. 排序算法:掌握了冒泡排序、选择排序、插入排序、快速排序等排序算法的原理和实现。

实验操作在每次实验中,我都认真阅读了实验指导书,并按照指导书上的要求进行了实验操作。

通过自己的努力,我成功地实现了实验要求,并得到了正确的结果。

实验操作中,我尽量养成了规范的编程习惯,包括良好的命名、合理的代码结构和注释等。

这有助于提高代码的可读性和可维护性。

实验收获通过实验,我对数据结构和算法有了更深入的理解,巩固了相关知识。

在实验过程中,我遇到了一些问题,并学会了解决它们。

同时,实验也锻炼了我的编程能力和解决问题的能力。

通过不断地思考和实践,我提高了自己的代码质量和效率,并学会了如何写出更优雅的代码。

反思遇到的问题在实验过程中,我遇到了一些问题,其中包括以下几点:1. 对于一些复杂的数据结构和算法,理解起来较为困难。

我需要花费更多的时间来学习和掌握这些内容。

2. 在某些情况下,实验指导书的说明不够清晰。

我需要仔细阅读并进行补充学习,以理解实验的要求和实现思路。

3. 在编写代码时,我有时会犯一些低级错误,比如数组越界、指针错误等。

我需要更加细心和谨慎地编写代码,以避免这些错误的发生。

改进方法为了提升自己的学习效果和编程能力,我计划采取以下改进方法:1. 增加学习时间。

数据结构心得体会6篇

数据结构心得体会6篇

数据结构心得体会6篇(经典版)编制人:__________________审核人:__________________审批人:__________________编制单位:__________________编制时间:____年____月____日序言下载提示:该文档是本店铺精心编制而成的,希望大家下载后,能够帮助大家解决实际问题。

文档下载后可定制修改,请根据实际需要进行调整和使用,谢谢!并且,本店铺为大家提供各种类型的经典范文,如工作总结、学习总结、工作计划、活动方案、条据文书、规章制度、应急预案、教学资料、作文大全、其他范文等等,想了解不同范文格式和写法,敬请关注!Download tips: This document is carefully compiled by this editor. I hope that after you download it, it can help you solve practical problems. The document can be customized and modified after downloading, please adjust and use it according to actual needs, thank you!Moreover, the shop provides you with various types of classic model essays, such as work summary, study summary, work plan, activity plan, documents, rules and regulations, emergency plans, teaching materials, composition, other model essays, etc.want to know different model essay formats and writing methods, please pay attention!数据结构心得体会6篇通过写一份心得体会,我们可以培养自己的观察力和思考力,心得体会是我们思维的推动力,让我们不断追求进步和创新,下面是本店铺为您分享的数据结构心得体会6篇,感谢您的参阅。

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

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

数据结构实验报告及心得体会一、引言数据结构是计算机科学中的重要基础课程,通过实验环节的学习,我们能够更好地掌握和应用数据结构的概念、算法和操作。

本报告旨在总结和分享我们进行的数据结构实验,并提出相应的心得体会。

二、实验一:线性表的实现与应用1. 实验目的本实验旨在通过实现和应用线性表的基本操作,掌握线性表的存储结构和算法。

2. 实验内容我们选择了顺序表和链表两种线性表的实现方式,并实现了插入、删除和查找等基本操作。

通过实验,我们发现顺序表适用于元素个数较少、频繁查找的情况,而链表适用于插入和删除操作较多、元素个数不确定的情况。

3. 实验心得通过实验一,我们深刻认识到数据结构的不同实现方式对算法的影响。

选择合适的数据结构可以提高算法效率,提高程序的性能。

同时,我们也意识到了在实际应用中,根据问题的具体特点选择不同的数据结构才能得到最优解。

三、实验二:栈与队列的应用本实验旨在通过实现和应用栈和队列的基本操作,掌握栈和队列的特性及其在实际应用中的作用。

2. 实验内容我们分别实现了顺序栈、链式栈、顺序队列和链式队列,并实现了入栈、出栈、入队和出队等基本操作。

我们发现栈适用于实现回溯算法、递归算法等,而队列适用于广度优先搜索、线程池等场景。

3. 实验心得通过实验二,我们进一步理解了栈和队列在实际编程中的运用。

它们提供了方便的数据结构,帮助我们解决了许多实际问题。

同时,实验过程中,我们也发现了栈溢出的问题,意识到了合理管理栈空间的重要性。

四、实验三:树与二叉树的实现与应用1. 实验目的本实验旨在通过实现和应用树和二叉树的基本操作,掌握树和二叉树的存储结构和算法。

2. 实验内容我们实现了树和二叉树的基本操作,包括创建、插入、删除和遍历等。

通过实验,我们发现树在表示具有部分层次结构的问题时更合适,而二叉树在表示递归结构时更加方便。

通过实验三,我们深入理解了树和二叉树的特性及其应用。

树和二叉树是许多高级数据结构的基础,熟练掌握它们的操作对于解决实际问题非常重要。

优秀数据结构实践报告体会范文(15篇)

优秀数据结构实践报告体会范文(15篇)

优秀数据结构实践报告体会范文(15篇)优秀数据结构实践报告体会范文(15篇)篇一随着个人的文明素养不断提升,报告的使用成为日常生活的常态,报告具有成文事后性的特点。

那么报告应该怎么写才合适呢?下面是小编收集整理的体会社会实践报告,希望对大家有所帮助。

大学的第二个暑假到来了,应学校的提议和社会对大学生的要求,我参加了暑期社会实践活动。

在这又一次的活动中,我学到了很多,也感悟了很多。

下面就我这次暑期社会实践的心得做一总结。

因为我是计算机学院的学生,所以我在这学期的社会实践中去了家附近的塑料厂帮助整理资料和制作表格。

暑期社会实践,是我们大学生充分利用暑期的时间,以各种方式深入社会之中展开形式多样的各种实践活动。

积极地参加社会实践活动,能够促进我们对社会的了解,提高自身对经济和社会发展现状的认识,实现书本知识和实践知识的更好结合,帮助我们树立正确的世界观、人生观和价值观;大学生社会实践活动是全面推进素质教育的重要环节,是适应新世纪社会发展要求,培养全面发展型人才的需要,是加强集体主义,爱国主义,社会主义教育,升华思想的有效途径。

积极投身社会实践,深入群众,了解社会,增长才干,是青年学生成长成才的正确道路,是青年学生运用所学知识技能,发挥聪明才智,积极为社会作贡献的重要途径。

暑期社会实践则恰恰为我们提供了一个走出校园,踏上社会,展现自我的绚丽舞台。

利用假期参加有意义的社会实践活动,接触社会,了解社会,从社会实践中检验自我。

在实践中积累社会经验,在实践中提高自己的能力,这将为我们以后走出社会打下坚实的基础!年少轻狂,经受不住暴雨的洗礼?谁说象牙塔里的我们两耳不闻窗外事,一心只读圣贤书?走出校园,踏上社会,我们能否不辜负他人的`期望,为自己书写一份满意的答卷。

在注重素质教育的今天,大学生假期社会实践作为促进大学生素质教育,加强和改进青年学生思想政治工作,引导学生健康成长成才的重要举措,作为培养和提高学生实践、创新和创业能力的重要途径,一直来深受学校的高度重视。

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

长春理工大学学生实习报告2012 ~2013 学年第一学期实习类别:课程设计学院:计算机学院专业:网络工程班级:姓名:2012年12月29 日一、需求分析参加运动会有n个学校,学校编号为1……n.比赛分成m个男子项目,和w个女子项目.项目编号为男子1......m,女子m+1......m+w.不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。

(m<=20,n<=20)【功能要求】:1)可以输入各个项目的前三名或前五名的成绩;2)能统计各学校总分;3)可以按学校编号、学校总分、男女团体总分排序输出;4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

5)输出形式:有中文提示,各学校分数为整形6)存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。

二、算法的基本思想算法的主要思路是:1.函数main()用来输入m,n,w,将其用作参数确定input()中数组的大小;基本思路如下:(1)提示并等待输入m,n,w(2)完成后进入主菜单(3)按提示完成相应功能2.函数input()用来录入前三名或前五名的成绩;基本思路如下:(1)根据传进来的参数,确定数组dele[]大小(2)输入项目名称,根据标志确定录入前三名的还是前五名的成绩(3)分别存入数组中3.函数divide()将处理dele[]中数据,并将其存放到二维数组中,并形成学校—信息的形式基本思路如下:(1)创建二维数组school[][],第一个参数是学校,第二个是dele[]中的信息(2)将信息分别放入到对应得位置(3)形成学校—信息4.函数malesort(),femalesort() 用来处理男女团体的得分的排序。

基本思路如下:(1)调用divide()。

(2)根据”男”,”女”的标志分别得到每个学校的男女得分(3)分别用冒泡排序法的到从大到小的排序5.函数sumScore()用来的到学校的总分基本思路如下:(1)创建school[]的一维数组(2)调用divide()函数(3)循环累加各项得分,得到各学校总分6.函数sumsort(boolean b)用来按学校编号、学校总分排序基本思路如下:(1)调用sumScore()(2)若b=false,则利用冒泡排序法,按学校编号由大到小排序(3)若b=true,则利用冒泡排序法,按学校总分由大到小排序7.函数search() 用来/按学校编号和项目查询基本思路如下:(1)输入学校编号和项目(2)判断是否有数据,并对其处理(3)输出此学校在某项目的运动员详细信息8.函数searchitem()用来按按项目查前三或前五的成绩基本思路如下:(1)输入某项目的名称(2)判断是否存在此项目(3)得到前三或前五名学校的编号8.函数outFile() 用来存数据记录基本思路如下:(1)创建FileWriter对象(2)写入文件信息9.主要代码如下:pub lic c las s Tex t {pub lic s tat ic Sc an ne r s =ne w Sca nn er(Sy ste m.in);sta tic S eve rd ele s d;pub lic s tat ic vo id m ain(S tri ng[] ar gs) {int n, m, w;Str ing s tr1[] = { "跳远", "跳高","接力","标枪" };//可取前三名的项目Str ing s tr2[] = { "长跑", "短跑","铅球","1000米" };//可取前五项Sys tem.o ut.pr int ln("可取前三名的有:");for (i nt i = 0; i < str1.len gt h; i++)//循环输出Str1Sys tem.o ut.pr int ln(s tr1[i] +" ");Sys tem.o ut.pr int ln("");Sys tem.o ut.pr int ln("可取前五项:");for (i nt i = 0; i < str2.len gt h; i++)//循环输出Str2Sys tem.o ut.pr int ln(s tr2[i] +" ");Sys tem.o ut.pr int ln("");Sys tem.o ut.pr int ln("参赛学校个数可取前三名项目的个数可取前五名项目的个数:");n =s.ne xtI nt();//参赛学校个数m =s.ne xtI nt();//可取前三名项目的个数w =s.ne xtI nt();//可取前五名项目的个数Sys tem.o ut.pr int ln(n + "个学校参加项目"+ m +"可以取前三的项目和" + w + "个可取前五的项目");Sys tem.o ut.pr int ln();sd= n ew Se ve rde le(n, m, w);//创建Se ver de le的对象boo lea n boo l = t ru e;//起始条件fal se为退出程序tr ue为进行int p;//用于Sw itc h的选择whi le(b ool) {Sys tem.o ut.pr int ln("菜单");Sys tem.o ut.pr int ln("1 前三名或前五名");Sys tem.o ut.pr int ln("2 排序");Sys tem.o ut.pr int ln("3 按学校编号查询某项信息");Sys tem.o ut.pr int ln("4 按项目查询前三或前五的学校");Sys tem.o ut.pr int ln("5 数据存入");Sys tem.o ut.pr int ln("6 其他退出");p =s.ne xtI nt();swi tch (p) {cas e 1:sd.inp ut();//输入成绩bre ak;cas e 2:sor t();//进入排序的的菜单bre ak;cas e 3:sd.sea rc h();//按学校编号查询某项信息bre ak;cas e 4:sd.sea rc hit em();//按项目查询前三或前五的学校bre ak;cas e 5:sd.out Fi le();//数据存入bre ak;cas e 6://其他退出boo l =f als e;Sys tem.o ut.pr int ln("退出了");bre ak;}}}pub lic s tat ic vo id s ort() {boo lea n boo l = t ru e;int k;whi le(b ool) {Sys tem.o ut.pr int ln("1 按学校编号排序");Sys tem.o ut.pr int ln("2 学校总分排序");Sys tem.o ut.pr int ln("3 男团总分排序");Sys tem.o ut.pr int ln("4 女团总分排序");Sys tem.o ut.pr int ln("5 其他退出");k =s.ne xtI nt();swi tch (k) {cas e 1:sd.sum so rt(fa lse);bre ak;cas e 2:sd.sum so rt(tr ue);bre ak;cas e 3:sd.mal es ort();bre ak;cas e 4:sd.fem al eso rt();bre ak;cas e 5:boo l =f als e;Sys tem.o ut.pr int ln("退出了");bre ak;}}}}public void input(){stu=new Dele[3*m+5*w];//数组的大小//System.out.println(stu.length);for(int i=0;i<stu.length;i++){stu[i]=new Dele();//循环创建 Stu对象}String numitem;//项目名int numSchool;//学校编号int nameStudent;//学生的编号int rank;//名次int score;//得分String sexStudent;//性别int j,i;j=i=0;//int j=0;boolean flag1=false;//标志用来判断是取前三的还是去前五的项目boolean flag2=false;for(;i<3*m+5*w;){String str1[]={"跳远","跳高","接力","标枪"};//定好的项目st1 取前三 st2取前五String str2[]={"长跑","短跑","铅球","1000米"};System.out.println("输入项目名称:");numitem=s.next();stu[i].setNumitem(numitem);for(int k=0;k<str1.length;k++){if(str1[k].equals(numitem)){flag1=true;flag2=false;}else if(str2[k].equals(numitem)){flag1=false;flag2=true;}}if(flag1){System.out.println("前三名学校编号选手编号取得名次得分性别");for(j=i;j<i+3;j++){numSchool=s.nextInt();nameStudent=s.nextInt();rank=s.nextInt();score=s.nextInt();sexStudent=s.next();stu[j].setNumitem(numitem);stu[j].setNumSchool(numSchool);stu[j].setNameStudent(nameStudent);stu[j].setRank(rank);stu[j].setScore(score);stu[j].setSexStudent(sexStudent);System.out.println("录入完成");}i=j;}else if(flag2){System.out.println("前五名的....");for(j=i;j<i+5;j++){numSchool=s.nextInt();nameStudent=s.nextInt();rank=s.nextInt();score=s.nextInt();sexStudent=s.next();stu[j].setNumitem(numitem);stu[j].setNumSchool(numSchool);stu[j].setNameStudent(nameStudent);stu[j].setRank(rank);stu[j].setScore(score);stu[j].setSexStudent(sexStudent);System.out.println("录入完成");}i=j;}else{System.out.println("项目名错,重新输入");}}}public void divide(){Dele dd[]=new Dele[3*m+5*w];pp=new Dele[n][3*m+5*w];//n代表每个学校里面有详细信息如运动员编号得分性别等for(int i=0;i<pp.length;i++)//pp.length=nfor(int j=0;j<pp[i].length;j++)pp[i][j]=new Dele();//向每个学校添加详细信息for(int i=0;i<dd.length;i++)dd[i]=new Dele();for(int i=0;i<stu.length;i++){dd[i]=stu[i];//将stu[]里的信息装入dd[]}for(int i=0,k=0;i<dd.length;i++){//将学校按行列出来在按学校存入信息最后构成学校——信息的形式if(dd[i]!=null){pp[k][0]=dd[i];for(int j=i+1;j<dd.length;j++)if(dd[j]!=null&&dd[i].getNumSchool()==dd[j].getNumSchool()){pp[k][j]=dd[j];dd[j]=null;}k++;}}}public void malesort(){String man="男";School ss1[]=new School[n];for(int i=0;i<ss1.length;i++)ss1[i]=new School();int maleschoolscore[]=new int[n];this.divide();for(int i=0;i<pp.length;i++)for(int j=0;j<pp[i].length;j++){if(man.equals(pp[i][j].getSexStudent()))maleschoolscore[i]+=pp[i][j].getScore();}for(int i=0;i<ss1.length;i++){ss1[i].setSchoolnum(pp[i][0].getNumSchool());ss1[i].setSchoolscore(maleschoolscore[i]);}int i,j;School index;//男团排序for(i=0;i<ss1.length;i++) //冒泡排序for(j=i+1;j<ss1.length;j++)if(ss1[i].getSchoolscore()<ss1[j].getSchoolscore()){index=ss1[i];ss1[i]=ss1[j];ss1[j]=index;}System.out.println("学校男团体总分排序:");for(i=0;i<maleschoolscore.length;i++)System.out.println(ss1[i].getSchoolnum()+""+ss1[i].getSchoolscore());}public void femalesort(){String woman="女";School ss1[]=new School[n];for(int i=0;i<ss1.length;i++)ss1[i]=new School();int femaleschoolscore[]=new int[n];this.divide();for(int i=0;i<pp.length;i++)for(int j=0;j<pp[i].length;j++){if(woman.equals(pp[i][j].getSexStudent()))femaleschoolscore[i]+=pp[i][j].getScore();}for(int i=0;i<ss1.length;i++){ss1[i].setSchoolnum(pp[i][0].getNumSchool());ss1[i].setSchoolscore(femaleschoolscore[i]);}int i,j;School index;//女团排序for(i=0;i<ss1.length;i++)for(j=i+1;j<ss1.length;j++)if(ss1[i].getSchoolscore()<ss1[j].getSchoolscore()){index=ss1[i];ss1[i]=ss1[j];ss1[j]=index;}System.out.println("学校女团体总分排序:");for(i=0;i<femaleschoolscore.length;i++)System.out.println(ss1[i].getSchoolnum()+""+ss1[i].getSchoolscore());}public void sumScore(){//得到学校的总分schoolscore=new int[n];ss=new School[n];for(int i=0;i<ss.length;i++)ss[i]=new School();this.divide();for(int i=0;i<pp.length;i++)for(int j=0;j<pp[i].length;j++){schoolscore[i]+=pp[i][j].getScore();}for(int i=0;i<ss.length;i++){ss[i].setSchoolnum(pp[i][0].getNumSchool());ss[i].setSchoolscore(schoolscore[i]);}}public void sumsort(boolean b){int i,j;School index;this.sumScore();if(b){ //b 为标志 false--按学校编号排序 true--按总分for(i=0;i<ss.length;i++){//按学校总分排序for(j=i+1;j<ss.length;j++)if(ss[i].getSchoolscore()<ss[j].getSchoolscore()){index=ss[i];ss[i]=ss[j];ss[j]=index;}}System.out.println("按学校总分排序:");for(i=0;i<schoolscore.length;i++)System.out.println(ss[i].getSchoolnum()+""+ss[i].getSchoolscore());}else{for(i=0;i<ss.length;i++){//按学校编号排序for(j=i+1;j<ss.length;j++)if(ss[i].getSchoolnum()<ss[j].getSchoolnum()){index=ss[i];ss[i]=ss[j];ss[j]=index;}}System.out.println("按学校编号排序:");for(i=0;i<schoolscore.length;i++)System.out.println(ss[i].getSchoolnum()+""+ss[i].getSchoolscore());}}public void search(){//按学校编号和项目查询int num;String name;boolean bl=true;System.out.println("输入学号和项目名:");num=s.nextInt();name=s.next();for(int i=0;i<stu.length;i++)if(num==stu[i].getNumSchool()&&name.equals(stu[i].getNumitem())){ System.out.println("学校"+num+"的"+name+"信息:");bl=false;System.out.println(stu[i].getNumSchool()+""+stu[i].getNumitem()+" "+stu[i].getNameStudent()+" "+stu[i].getSexStudent()+" "+stu[i].getRank()+" "+stu[i].getScore());}if(bl){System.out.println("无信息");}}public void searchitem(){//按按项目查前三或前五的成绩String itemname;boolean t =true;System.out.println("输入项目:");itemname=s.next();System.out.println("该项目前三或前五的学校信息:");for(int i=0;i<stu.length;i++){if(itemname.equals(stu[i].getNumitem())){t=false;System.out.println(stu[i].getNumSchool()+""+stu[i].getNumitem()+" "+stu[i].getNameStudent()+""+stu[i].getSexStudent()+" "+stu[i].getRank()+" "+stu[i].getScore());}if(t){System.out.println(" ");}}}public void outFile(){FileWriter f;try {f=new FileWriter("Score.txt");for(int i=0;i<stu.length;i++){f.write(Integer.toString(stu[i].getNumSchool()));f.write(" ");f.write(stu[i].getNumitem());f.write(" ");f.write(" "+stu[i].getNameStudent());f.write(" ");f.write(stu[i].getSexStudent());f.write(" ");f.write(" "+stu[i].getRank());f.write(" ");f.write(" "+stu[i].getScore());f.write("\n");}f.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}三、测试数据程序运行实例如下:四、系统文件使用说明五、心得体会通过这次的实践,让我感觉到存储结构的重要性,以及数组使用的广泛性。

相关文档
最新文档