数据结构实习报告
- 格式:docx
- 大小:83.79 KB
- 文档页数:17
计算机专业毕业实习总结(精选6篇)计算机专业毕业实习总结篇1一、毕业实习1.目的:学生通过几年的基础课、专业基础课和专业课的系统学习后,应通过直接参加生产实践或深入到生产第一线获得实际生产操作的锻炼,其一是为巩固并加深对已学过的理论知识的理解;其二是为下一阶段的毕业设计作好调研准备;其三是在社会实践中继续对学生进行劳动教育,使其了解国情、学习劳动人民的优秀品质、培养热爱劳动、深入实践、勤奋钻研、关心集体的良好作风。
2.实习时间 3-4周3.实习内容(1)了解计算机系统生产过程(2)了解常用控制设备的使用及控制方法(3)了解计算机辅助设备的生产过程(4)熟悉计算机系统的各种开发软件(4)参观典型的企事业单位,了解计算机及网络的不同应用(5)了解计算机学科前沿技术的发展4.实习要求(1)自觉遵守纪律,切实注意安全,认真参加实习,每到一个单位必须遵守该单位的规章制度。
(2)虚心向工程技术人员学习,走理论与实际相结合的道路。
(3)学生按教师指定的实习单位,熟悉实际操作,做好实习笔记。
(4)实习结束,交毕业实习报告一份。
5.实习报告的'内容与要求实习结束后,学生必须以现场观察了解到的情况与现场为基础,系统地整理出一份实习报告。
要求重点突出、条理清楚,语言通畅、字迹工整、全面真实反映出实习的所见与收获。
由于实习报告是评定成绩的主要依据之一,又是学生将零散的实习收获加以整理的重要手段,每个学生都必须重视并认真撰写,且不可敷衍了事。
实习报告的内容主要有:(1)活动发生的时间、地点、名称、过程及进行这项活动的目的。
(2)活动中所见所用到的设备及单位生产介绍:包括原理、工艺过程、控制要求、如何实现、性能评价、技术展望等内容。
这些是整个实习报告的核心内容,当实习过程活动较多时,实习报告内容的选材亦有所侧重,主要侧重在毕业课题所涉及的范围内,重点介绍与本专业有关且与毕业设计课题有关的而且自己感受最深的东西。
(3)实习中所用到的软件介绍(4)实习的主要收获及建议(5)指导教师特别指定的内容。
空间数据实习报告优秀5篇空间数据采集实习报告篇1一、实习目的及任务地理信息经过多年的发展历程,已经成为国民经济,资源建设中不可或缺的一部分。
越来越受到世界各国和社会各界的重视,并广泛应用于国民经济的许多部门。
随着人们对空间信息的认识日益加深,地理信息系统将成为人们科研,生产,学习中不可或缺的组成部分。
经过大学三年的学习,我们对地理信息已经有了较为深入的了解,本次实习就是将实践与理论相结合,进一步提高我们的学习成果。
(一)、实习目的1、通过本次实习,更加熟练地掌握地理信息系统软件的使用,能够独立运用软件对数据进行分析和处理。
2、通过实习,了解行业的相关标准,从而使学生达到既懂理论又懂实践运用的目的。
3、通过运用MAPINFO,ARCVIEW软件,对我们所学的内容进一步的提高和巩固。
(二)、实习任务1、利用原有的地图地图,运用MAPINFO 软件进行地图数字化。
2、运用MAPINFO软件对地图数字化后的成果制作专题地图。
3、运用ARCVIEW软件对已知数据进行空间分析。
二、实习安排本次实习两班共分为六组,每班三组。
实习时间为两周,主要运用软件为MAPINFO和ARCVIEW。
本组实习老师为李泽老师。
(一)、时间安排(二)、上交资料1、已完成的数字化地图一份;2、空间分析成果图;3、实习报告与实习日记。
三、实习内容(一)、地图数字化地图数字化是地理信息系统中最基本的一项工作。
8月27日,我们开始地图数字化的工作,并且有指导老师每天在机房为我们进行指导。
地图数字化包括配准和制图两部分,下面就这两方面对MAPINFO软件的应用作一些介绍:1、利用MAPINFO软件进行配准(1)、将栅格地图导入MAPINFO软件中; (2)、弹出图像配准询问对话框(如图)(3)查看坐标,对图像进行配准(4)增加控制点(5)、每幅图选择不少于三个控制点,配准完成后,查看配准后的任意一点坐标,如有坐标与图上坐标不符,则重新配准。
2015-2016学年第二学期《算法与数据结构》课程实验报告专业软件工程学生姓名成晓伟班级软件141学号1410075094实验学时16实验教师徐秀芳信息工程学院实验一单链表的基本操作一、实验目的1.熟悉C语言上机环境,进一步掌握C语言的基本结构及特点。
2.掌握线性表的各种物理存储表示和C语言实现。
3.掌握单链表的各种主要操作的C语言实现。
4.通过实验理解线性表中的单链表存储表示与实现。
二、主要仪器及耗材普通计算机三、实验内容与要求1、用C语言编写一个单链表基本操作测试程序。
(1)初始化单链表(2)创建单链表(3)求单链表长度(4)输出单链表中每一个结点元素(5)指定位置插入某个元素(6)查找第i个结点元素的值(7)查找值为e 的结点,并返回该结点指针(8)删除第i个结点(9)销毁单链表2、实验要求(1)程序中用户可以选择上述基本操作。
程序启动后,在屏幕上可以菜单形式显示不同功能,当按下不同数字后完成指定的功能,按其他键,则显示错误后重新选择。
(2)要求用线性表的顺序存储结构,带头结点的单链表存储结构分别实现。
(3)主函数实现对基本操作功能的调用。
3、主要代码(1)初始化单链表LinkList *InitList(){ //创建一个空链表,初始化线性表LinkList *L;L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;return L;}(2)创建单链表//头插法void CreateListF(LinkList *L){LinkList *s;int i=1,a=0;while(1){printf("输入第%d个元素(0表示终止)",i++);scanf("%d",&a);if(a==0)break;s=(LinkList *)malloc(sizeof(LinkList));s->data=a;s->next=L->next;L->next=s;}}(3)求链表长度int ListLength(LinkList *L){ //求链表长度int n=0;LinkList *p=L;while(p->next!=NULL){p=p->next;n++;}return(n);}(4)在指定位置插入元素int InsertList(LinkList *L,int i,ElemType e){LinkList *p=L,*s;int j=0;while(p!=NULL&&j<i-1){p=p->next;j++;} //找出要插入的位置的前一个位置if(p==NULL){return 0;}else{s=(LinkList *)malloc(sizeof(LinkList));s->data=e;s->next=p->next;p->next=s;return 1;}}(5)输出链表void DispList(LinkList *L){ //输出链表LinkList *p=L->next;while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}(6)查找链表中指定元素int GetElem(LinkList *L,int i){ //查找链表中指定元素LinkList *p=L;int j=0;while(j<i&&p!=NULL){j++;p=p->next;}if(p==NULL){return 0;}else{return p->data;}}(7)查找值是e的结点并返回该指针LinkList *LocateElem(LinkList *L,ElemType e){ //查找值是e的结点并返回该指针int i=1;LinkList *p=L;while(p!=NULL)if(p->data==e) return p;}if(p==NULL){return NULL;}}(8)删除元素int ListDelete(LinkList *L,int i,ElemType *e){ //删除元素LinkList *p=L,*q;int j=0;while(p!=NULL&&j<i-1){p=p->next;j++;} //找到要删除元素地址的前一个地址if(p==NULL){ return 0;} //不能删除else{q=p->next;*e=q->data;p->next=q->next;free(q); //删除成功return 1;}}(9)销毁链表void DestroyList(LinkList *L){//销毁链表LinkList *pre=L,*p=L->next;while(p!=NULL){free(pre);pre=p;p=pre->next;}free(pre);}main函数:int main(){LinkList *L;ElemType e;int i;L=InitList();CreateListF(L);DispList(L);printf("输入要查找的元素位置:\n");scanf("%d",&i);e=GetElem(L,i);printf("%d\n",e);printf("单链表长度为:%d\n",ListLength(L));printf("输入要删除元素的位置:");scanf("%d",&i);if (i>ListLength(L)){printf("超出范围重新输入");scanf("%d",&i);}if(ListDelete(L,i,&e)==0){printf("未找到元素\n");}else DispList(L);printf("输入插入元素的位置和值:");scanf("%d%d",&i,&e);InsertList(L,i,e);DispList(L);return 0;}4、测试数据及测试结果输入:23 56 12 28 45输出:四、注意事项1、存储结构定义和基本操作尽可能用头文件实现。
《数据结构》实验报告姓名:学号:班级:学院:实验一单链表实验(一)实验目的1.理解线性表的链式存储结构。
2.熟练掌握动态链表结构及有关算法的设计。
3.根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。
(二)实验任务编写算法实现下列问题的求解1.求链表中第i个结点的指针(函数),若不存在,则返回NULL。
2.在第i个结点前插入值为x的结点。
3.删除链表中第i个元素结点。
4.在一个递增有序的链表L中插入一个值为x的元素,并保持其递增有序特性。
5.将单链表L中的奇数项和偶数项结点分解开,并分别连成一个带头结点的单链表,然后再将这两个新链表同时输出在屏幕上,并保留原链表的显示结果,以便对照求解结果。
6.求两个递增有序链表L1和L2中的公共元素,并以同样方式连接成链表L3。
(三)主要仪器设备PC机,Windows操作平台,Visual C++(四)实验分析顺序表操作:定义一个顺序表类,该类包括顺序表的存储空间、存储容量和长度,以及构造、插入、删除、遍历等操作的方法(五)源程序头文件文件名:linklist.h#include<iostream>using namespace std;struct node{int data;node *next;};class list{public:list();int length()const{return count; //求链表长度}~list();void create(); //链表构建,以0为结束标志void output(); //链表输出int get_element(const int i)const; //按序号取元素node *locate(const int x) const; //搜索对应元素int insert(const int i,const int x); //插入对应元素int delete_element(const int i); //删除对应元素node *get_head(){return head; //读取头指针}void insert2(const int x);friend void SplitList(list L1, list&L2, list &L3);friend void get_public(list L1, list L2, list &L3);private:int count;node *head;};list::list(){head=new node;head->next=NULL;count=0;}void list::create() //链表构建,以0为结束标志{int x;cout<<"请输入当前链表,以0为结束符。
算法与及数据结构实验报告算法与数据结构实验报告一、实验目的本次算法与数据结构实验的主要目的是通过实际操作和编程实现,深入理解和掌握常见算法和数据结构的基本原理、特性和应用,提高我们解决实际问题的能力和编程技巧。
二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。
同时,为了进行算法性能的分析和比较,使用了 Python 的 time 模块来计算程序的运行时间。
三、实验内容1、线性表的实现与操作顺序表的实现:使用数组来实现顺序表,并实现了插入、删除、查找等基本操作。
链表的实现:通过创建节点类来实现链表,包括单向链表和双向链表,并完成了相应的操作。
2、栈和队列的应用栈的实现与应用:用数组或链表实现栈结构,解决了表达式求值、括号匹配等问题。
队列的实现与应用:实现了顺序队列和循环队列,用于模拟排队系统等场景。
3、树结构的探索二叉树的创建与遍历:实现了二叉树的先序、中序和后序遍历算法,并对其时间复杂度进行了分析。
二叉搜索树的操作:构建二叉搜索树,实现了插入、删除、查找等操作。
4、图的表示与遍历邻接矩阵和邻接表表示图:分别用邻接矩阵和邻接表来存储图的结构,并对两种表示方法的优缺点进行了比较。
图的深度优先遍历和广度优先遍历:实现了两种遍历算法,并应用于解决路径查找等问题。
5、排序算法的比较插入排序、冒泡排序、选择排序:实现了这三种简单排序算法,并对不同规模的数据进行排序,比较它们的性能。
快速排序、归并排序:深入理解并实现了这两种高效的排序算法,通过实验分析其在不同情况下的表现。
6、查找算法的实践顺序查找、二分查找:实现了这两种基本的查找算法,并比较它们在有序和无序数据中的查找效率。
四、实验步骤及结果分析1、线性表的实现与操作顺序表:在实现顺序表的插入操作时,如果插入位置在表的末尾或中间,需要移动后续元素以腾出空间。
删除操作同理,需要移动被删除元素后面的元素。
在查找操作中,通过遍历数组即可完成。
实验报告课程名称____数据结构上机实验__________ 实验项目______线性表的应用 ____________实验仪器________PC机___________________系别_____电子信息与通信学院___专业________ ___班级/学号______ __学生姓名______ ___________实验日期_______________________成绩_______________________指导教师_______________________实验一.线性表的应用1.实验目的:掌握线性链表的存储、运算及应用。
利用链表实现一元多项式计算。
2.实验内容:1)编写函数,实现用链表结构建立多项式;2)编写函数,实现多项式的加法运算;3)编写函数,实现多项式的显示;4)测试:编写主函数,它定义并建立两个多项式,显示两个多项式,然后将它们相加并显示结果。
变换测试用的多项式,检查程序的执行结果。
选做内容:修改程序,选择实现以下功能:5)多项式求值:编写一个函数,根据给定的x值计算并返回多项式f(x)的值。
测试该函数(从终端输入一个x的值,调用该函数并显示返回结果)。
6)多项式相减:编写一个函数,求两个多项式相减的多项式。
7)多项式相乘:编写一个函数,求两个多项式的乘积多项式。
3.算法说明:1)多项式的建立、显示和相加算法见讲义。
可修改显示函数,使输出的多项式更符合表达规范。
2)多项式减法:同次项的系数相减(缺项的系数是0)。
例如a(x)=-5x2+2x+3,b(x)= -4x3+3x,则a(x)-b(x)=4x3-5x2-x+3。
提示:a(x)-b(x) = a(x)+(-b(x))。
3)多项式乘法:两个多项式的相乘是“系数相乘,指数相加”。
算法思想是用一个多项式中的各项分别与另一个多项式相乘,形成多个多项式,再将它们累加在一起。
例如,a(x)=-5x2+2x+3,b(x)=-4x3+3x,则a(x)*b(x) = (-4x3)*(-5x2+2x+3)+(3x)*(-5x2+2x+3)= (20x5-8x4-12x3) + (-15x3+6x2+9x) =20x5-8x4-27x3+6x2+9x。
大数据实习报告
报告内容如下:
1. 实习项目概述:
在报告的开头,介绍实习项目的概况,包括实习的公司或机构、实习的时间、实习目标等内容。
2. 实习内容:
详细描述实习期间所从事的工作内容。
包括参与的项目、使用的技术工具、解决的问题等。
3. 数据处理与分析:
介绍在实习期间所使用的数据处理和分析方法。
包括数据清洗、数据挖掘、数据可视化等。
详细描述实习中所使用的工具和技术。
4. 项目成果:
总结实习期间的项目成果。
包括完成的任务、解决的问题、取得的进展等。
5. 实习经验和收获:
分析实习期间所获得的经验和收获。
包括技术方面的提升、团队协作能力的提高、问题解决能力的增强等。
6. 挑战与解决:
讲述在实习过程中遇到的挑战和困难,以及如何解决这些问题。
可以分析问题产生的原因,以及解决问题的方法和经验。
7. 总结与展望:
对实习项目总体进行总结,评价实习期间的工作,提出一些建议和展望。
8. 致谢:
表示感谢,并致以诚挚的感谢之词,向工作导师、同事、公司或机构等表达感激之情。
9. 附录:
如果有需要,可以在报告的最后附上一些相关文档、数据、代码等。
数据结构课程实验报告一、实验目的本次数据结构课程实验的主要目的是通过实践掌握常见数据结构的基本操作,包括线性结构、树形结构和图形结构。
同时,也要求学生能够熟练运用C++语言编写程序,并且能够正确地使用各种算法和数据结构解决具体问题。
二、实验内容本次实验涉及到以下几个方面:1. 线性表:设计一个线性表类,并且实现线性表中元素的插入、删除、查找等基本操作。
2. 栈和队列:设计一个栈类和队列类,并且分别利用这两种数据结构解决具体问题。
3. 二叉树:设计一个二叉树类,并且实现二叉树的遍历(前序遍历、中序遍历和后序遍历)。
4. 图论:设计一个图类,并且利用图论算法解决具体问题(如最短路径问题)。
三、实验过程1. 线性表首先,我们需要设计一个线性表类。
在这个类中,我们需要定义一些成员变量(如线性表大小、元素类型等),并且定义一些成员函数(如插入元素函数、删除元素函数等)。
在编写代码时,我们需要注意一些细节问题,如边界条件、异常处理等。
2. 栈和队列接下来,我们需要设计一个栈类和队列类。
在这两个类中,我们需要定义一些成员变量(如栈顶指针、队头指针等),并且定义一些成员函数(如入栈函数、出栈函数、入队函数、出队函数等)。
在编写代码时,我们需要注意一些细节问题,如空间不足的情况、空栈或空队列的情况等。
3. 二叉树然后,我们需要设计一个二叉树类,并且实现二叉树的遍历。
在这个类中,我们需要定义一个节点结构体,并且定义一些成员变量(如根节点指针、节点数量等),并且定义一些成员函数(如插入节点函数、删除节点函数、遍历函数等)。
在编写代码时,我们需要注意一些细节问题,如递归调用的情况、空节点的情况等。
4. 图论最后,我们需要设计一个图类,并且利用图论算法解决具体问题。
在这个类中,我们需要定义一个邻接矩阵或邻接表来表示图形结构,并且定义一些成员变量(如顶点数量、边的数量等),并且定义一些成员函数(如添加边函数、删除边函数、最短路径算法等)。
数据结构实验报告(⼀)线性表的应⽤实验说明数据结构实验⼀ 线性表的实验——线性表的应⽤⼀、实验⽬的通过本实验使学⽣了解线性表的⼀种简单应⽤,熟悉线性表顺序存储与链式存储的特性,特别训练学⽣编程灵活控制链表的能⼒,为今后编程控制更为复杂的数据结构奠定基础。
⼆、实验内容1.⽤顺序表和链表分别分别编程实现教材中例⼦2-1与2-2。
要求:(1)只能⽤C语⾔编程实现;(2)完全保持书中算法2.1与算法2.2形式,不允许有任何变化,除⾮语法上不允许;所调⽤各函数参照书中19页的功能描述,其中函数名、参数个数及性质、函数功能必须与书中完全⼀致,不能有变化。
2.利⽤线性表表⽰⼀元多项式完成多项式的加、减、乘、求导、求值运算。
要求:(1)输⼊的⼀元多项式可以采⽤只输⼊各项的系数与指数这种简化的⽅式。
如对于多项式2x2+6x5,输⼊可为: 2,2 6,5 这样的简单形式。
(2)遇到有消项时应当处理,如2x2+6x5与3x2-6x5进⾏相加时,结果为5*x^2。
(3)当给定x的值时,能计算表达式相加或相减的结果。
(4)操作的结果放⼊⼀个新线性表中,原来的两个表达式存储表⽰不变,也可以不是产⽣新的线性表,⽽是将两上线性表合并为⼀个。
(5)要求程序功能模块划分合理(每个函数功能单⼀、可重⽤性好),使⽤空间尽可能少,算法尽可能⾼效。
实验报告1.实现功能描述使⽤线性表表⽰⼀元多项式完成多项式的加、减,乘,求导、求值运算。
2.⽅案⽐较与选择(1)因为使⽤的是线性表,所以主要⽅案有数组法和链表法。
(2)从时间复杂度来说,使⽤数组法更优;从空间复杂度来说,链表法更优。
因为数组法是指定好空间的,若式⼦⼤⼩超出设置⼤⼩,那程序必然出错;若式⼦⼤⼩⼩于设置⼤⼩,那就意味着有多余的空间被浪费了。
综合来讲,若计算式⼦较为庞⼤,使⽤链表法更佳;相反,若计算式⼦较⼩,数组法更佳。
3.设计算法描述(1)单个项式的数据存储使⽤了结构体,数组法是在⼀个结构体中定义两个⼀维数组;链表法是通过⼀个结构体作为⼀个节点,通过next指针连接起来。
线性表上机实习1、实验目的(1)熟悉将算法转换为程序代码的过程。
(2)了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C语言描述方法。
(3)熟练掌握顺序表的基本运算:查找、插入、删除等,掌握顺序表的随机存取特性。
(4)了解线性表的链式存储结构,熟练掌握线性表的链式存储结构的C语言描述方法。
(5)熟练掌握线性链表(单链表)的基本运算:查找、插入、删除等,能在实际应用中灵活选择适当的链表结构。
2、实验要求(1)熟悉顺序表的插入、删除和查找。
(2)熟悉单链表的插入、删除和查找。
3、实验内容:①顺序表(1)抽象数据类型定义typedef struct {TypeData data[maxsize]; //容量为maxsize的静态顺手表int n; //顺序表中的实际元素个数}SeqList; //静态顺序表的定义在本次实验中,首先建立一个空的静态顺序表,然后键盘输入数据存入表中,然后进入菜单选择界面,通过不同的数字输入,实现对顺序表,删除,插入,查找,显示等操作。
(2)存储结构定义及算法思想在顺序表结构体的定义中,typedef int TypeData 为整型,存储结构如下:for(n=0;n<m;n++){cout<<"请输入线性表数据"<<endl;cin>>[n]; //顺序将数据存入顺序表} //其他存储与此类似,都是直接赋值与数组的某一位插入版块子函数:void insert(SeqList &L) //插入数据{int a,b,c,k;cout<<"请输入插入的数及其插入的位置"<<endl;cin>>a>>b;if(b<=0||b>+1)) {cout<<"不能在该位置插入"<<endl; return;} //判断插入位置是否合法k=[b-1];[b-1]=a; c=; =+1;while(c>b){[c]=[c-1];c--; //通过循环,实现插入位置后的数据挨个往后移动一位}[b]=k;}顺序表的插入与删除操作类似,在插入与删除后,都要循环调整后面数组的每一位元素,同时记录数据元素的长度的标示符也要跟着改变。
数据结构上机实习报告学校:中国地质大学(武汉)专业:数学与应用数学班级:121142姓名:陈佳龙完成时间:2017.12.14第一部分停车场模拟1.1问题描述我们要模拟一个停车场的管理系统。
问题中有一个停车场,由于其可以停泊的车辆数量有限,为满足需求,我们有一个辅助的变道,一旦有车要停泊,我们便判断停车场的停车位是否已满,如果满了的话,就将其停泊在便道上。
实际的要求是不但有进,亦有出。
这就涉及到两个问题:其一是我们要对从停车场驶出的车进行收费,这就涉及到其在停车场停留的时间计算。
通常情况下,我们会在总的入口(也就是出口)处设立收费站,有一辆车出现,我们首先会判断这辆车要入还是要出,如果是要入,我们就把当前时刻与该车对应起来。
如果该车是出来的(为简化问题,我们假设便道的车不许驶出,故驶出的车定是从停车场出来的),那么它必然已有一个时刻与之对应,我们只要用当前时刻减去该已有时刻,就是该车在停车场停留时间了。
其二是从停车场要出来车,就要后进入停车场的车给其暂时让位,为了使得该车驶离后其余车仍保持原来的顺序,我们需要一个辅助的堆栈。
事实上,该堆栈最满停车的数量为停车场停车位的数量减去一,我们在实际操作中让其与停车场堆栈的大小相同,这样就不用在定义一个堆栈结构了。
事实上,对于每从停车场驶出一辆车,就会有一个停车位空出,这时就要便道上的一辆车驶入停车场(如果便道上有车的话),我们对其开始计时。
那么,给他对应的时刻是多少呢?事实上,驶出停车场的车会过收费站(程序输入端),会有一个当前时刻,我们只要将该时刻与要从便道驶入停车场的车从新对应就行了。
这就说明对每辆车开始收费的时刻并不一定是到“达的时刻”,而是要看该车是入停车场还是入便道,对于入便道的车,们还要修改其时刻,应为对于如便道的车,其“到达时刻”是没有实际意义的。
1.2基本要求1以栈模拟停车场,以队列模拟车场外的便道。
2:按照从终端读入的输入数据序列进行模拟管理。
3:每一组输入数据包括三个数据项;汽车“到达”或“离去”信息、汽车牌照号码及到达或离去的时刻,对每一组输入数据进行操作后的输出数据为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。
4:栈以顺序结构实现,队列以链表结构实现。
1.3数据结构//车结构体typedefstruct car{int tag; //设置标志位,如果车辆到达tag==1,如果车辆tag==-1long intcarID; //车牌号float time; //到达或离开的时刻,}DataType;//停车场堆栈,定义其大小即停车位个数为4typedefstruct{DataType stack[maxsizestack]; //我们会将maxsizestack固定为4int top;}SeqStack;//便道队列节点typedefstructqnode{DataType data;structqnode *next;}LQNode;//便道队列t ypedefstruct{LQNode *front;LQNode *rear;int count;}LQueue;1.4测试数据我们为了竟可能对所建模型进行测试,共设计了四组测试数据:1.3.1第一组测试数据:Test[3]={{1,10001,10},{1,10002,20},{1,10003,30}}从终端输入的数据为:1 10004 40说明:test[3]表示已经有三辆车从终端(大门口)近去了,它们的车牌号依次为:10001,10002,10003.到达时刻以此为10,20,30.现在有一辆车10004从大门口进入,我们要该系统对其做出反应。
1.3.2第二组测试数据Test[3]={{1,10001,10},{1,10002,20},{1,10003,30}}终端输入数据为:-1 10002 40说明:test[3]表示已经有三辆车从终端(大门口)近去了,它们的车牌号依次为:10001,10002,10003.到达时刻以此为10,20,30.这与第一组测试数据相同,不同之处在于:现有一辆车牌号为10002的车要离开,我们要该系统对其做出反应。
1.3.3 第三组测试数据Test[3]={{1,10001,10},{1,10002,20},{1,10003,30}}从终端输入的数据为:-1 10004 40数明:test[3]表示已经有三辆车从终端(大门口)近去了,它们的车牌号依次为:10001,10002,10003.到达时刻以此为10,20,30.这与第一,二组测试数据相同,不同之处在于:现有一辆车牌号为10004的车显示的是离开,我们要该系统对其作出反应。
1.3.4 第四组测试数据Test[4]={{1,10001,10},{1,10002,20},{1,10003,30},{1,10004,40}}从终端输入数据为 1 10005 50说明:test[4]表示已经有四辆车从大门口进入(终端读入),现在有一辆车牌为10005的车要从大门口进入,需要该系统做出反应。
1.4模块划分1:PARK.h文件,定义堆栈的数据结构,初始化,判断堆栈是否为空,入栈,出栈操作。
队列的数据结构,包括队列的定义,初始化,入队列,出队列操作。
2:StackDelete.h文件:创建停车场内的任意一辆车的出堆栈函数void StackDelete(SeqStack *S,longintcarID,float *tt),参数分别为该堆栈的指针和该车辆的车牌号carID,输出值为该车辆进入停车场时的时间。
3:PARK.cpp文件,包括主函数。
1.6源程序/**********************************************PARK .h文件*****************************************/ #include"malloc.h"typedefstruct car{int tag; //设置标志位,如果车辆到达tag==1,如果车辆离开tag==-1long intcarID; //车牌号float time; //到达或离开的时刻}DataType;#define maxsizestack 4typedefstruct{DataTypestack[maxsizestack];int top;}SeqStack;/*****************初始化函数StackInitiate(SeqStack *S)**/voidStackInitiate(SeqStack *S){S->top=0;}/****************判空函数StackNotEmpty(SeqStack S)******/intStackNotEmpty(SeqStack S){if(S.top<=0) return(0);else return 1;}/****************判满函数StackNotFull(SeqStack S)*******/intStackNotFull(SeqStack S){if(S.top>=maxsizestack)return 0;else return 1;}/******入堆栈StackPush(SeqStack *S,DateType x)**********/intStackPush(SeqStack *S,DataType x){if(S->top>=maxsizestack){printf("堆栈以满,无法插入\n");return 0;}else{S->stack[S->top]=x;S->top++;return 1;}}/********出堆栈函数StackPop(SeqStack *S,DateType *d)*/ intStackPop(SeqStack *S,DataType *d){if(S->top<=0){printf("堆栈以空无数据元素可出!\n");return 0;}else{S->top--;*d=S->stack[S->top];return 1;}}/*********************LQueue**************************/ typedefstructqnode{DataType data;structqnode *next;}LQNode;typedefstruct{LQNode *front;LQNode *rear;int count;}LQueue;/***************初始化QueueInitiate(LQueue *Q)*******/ voidQueueInitiate(LQueue *Q){Q->front=NULL;Q->rear=NULL;Q->count=0;}/**************队列判空QueueNotEmpty(LQueue Q)******/ intQueueNotEmpty(LQueue Q){if(Q.front==NULL) return 0;else return 1;}/******入队列QueueAppend(LQueue *Q,DataType x)******/voidQueueAppend(LQueue *Q,DataType x){LQNode *p;p=(LQNode*)malloc(sizeof(LQNode));p->data=x;p->next=NULL;if(Q->rear!=NULL)Q->rear->next=p;Q->rear=p;if(Q->front==NULL)Q->front=p;Q->count++;}/******出队列QueueDelete(LQueue *Q,DataType *d)******/intQueueDelete(LQueue *Q,DataType *d){LQNode *p;if(Q->front=NULL){printf("队列为空");return 0;}else{*d=Q->front->data;p=Q->front;Q->front=Q->front->next;if(Q->front==NULL)Q->rear=NULL;free(p);Q->count--;return 1;}}/*****************************************StackDelete.h文件*****************************************/ /*创建停车场内的任意一辆车的出堆栈函数,参数分别为该堆栈的指针和该车辆的车牌号carID,输出值为该车辆进入停车场时的时间*/voidStackDelete(SeqStack *S,longintcarID,float *tt){int n=S->top; //记下未出堆栈S时堆栈内元素的个数SeqStack T; //创建辅助堆栈DataType x;StackInitiate(&T); // 初始化辅助堆栈Twhile(StackNotEmpty(*S)){StackPop(S,&x);if(x.carID!=carID)StackPush(&T,x);/*依次将堆栈S中的元素出堆栈,若该元素不是要找的元素,将其压入堆栈T中*/else{*tt=x.time;break;}}/*若该元素是要找的元素,返回该元素的time改时间是其入堆栈S时的时间*/while(StackNotEmpty(T)){StackPop(&T,&x);StackPush(S,x);}/*将T中的元素还给S*/if(S->top==n)*tt=0; //如果此时栈顶指针的位置没有变换,说明S中没有该车牌号的车辆}/**********************************************PARK. CPP文件***************************************/ #include<stdio.h>#include"PARK.h"#include"malloc.h"//typedef Car DataType; //将抽象数据具体化#define maxsizestack 4 //停车场的容量为4#include”StackDelete.h”#define e 1 //停车场单位时间的收费为e=1//为第一组,第二组,第三组测试数据编的主函数void main(){SeqStack S1;float t; //定义停车场堆栈S1,停车场辅助堆栈S2;float *tt=&t;LQueue Q; //定义变道队列QDataType ca1,ca2; //定义数据StackInitiate(&S1); //初始化S1;QueueInitiate(&Q); //初始化Q;DataTypetest[3]={{1,10001,10},{1,10002,20},{1,10003,30}}; /*定义测试数据*/for(inti=0;i<3;i++){StackPush(&S1,test[i]);} /*测试数据入堆栈*/scanf("%d%ld%f",&ca1.tag,&ca1.carID,&ca1.time); //输入车辆ca1的信息/*对到达的车辆的处理*/if(ca1.tag==1){if(StackNotFull(S1)){printf("该车停于停车场S1的第%d个停车位\n",S1.top);StackPush(&S1,ca1);}else{printf("该车停于便到的第%d个位置\n",Q.count);QueueAppend(&Q,ca1);}}else{StackDelete(&S1,ca1.carID,tt); //调用StackDelete函数,将车辆ca1出停车场,并将其进入停车场是的时刻赋给tif(t){t=ca1.time-t; //如果该车辆是从停车场内开出的,将停留时间重新赋给tif(QueueNotEmpty(Q)){QueueDelete(&Q,&ca2);ca2.time=ca1.time;StackPush(&S1,ca2);}/*如果此时变车道上有车辆的话记作ca2将其辆驶入停车场,将其time改ca1离开时的time,即从ca1离开时对ca2开始计时*/}else t=0; //若该车辆不是从停车场开出的,显然其停留时间为printf("该车停留的时间t=%f,应收取的费用为money=%f\n",t,t*e);}}//为第四组数据编的主函数void main(){SeqStack S1;float t; //定义停车场堆栈S1,停车场辅助堆栈S2;float *tt=&t;LQueue Q; //定义变道队列QDataType ca1,ca2; //定义数据StackInitiate(&S1); //初始化S1;QueueInitiate(&Q); //初始化Q;DataTypetest[4]={{1,10001,10},{1,10002,20},{1,10003,30},{1,10004,40},}; /*定义测试数据*/for(inti=0;i<4;i++){StackPush(&S1,test[i]);} /*测试数据入堆栈*/scanf("%d%ld%f",&ca1.tag,&ca1.carID,&ca1.time); //输入车辆ca1的信息/*对到达的车辆的处理*/if(ca1.tag==1){if(StackNotFull(S1)){printf("该车停于停车场S1的第%d个停车位\n",S1.top);StackPush(&S1,ca1);}else{printf("该车停于便到的第%d个位置\n",Q.count);QueueAppend(&Q,ca1);}}else{StackDelete(&S1,ca1.carID,tt); //调用StackDelete函数,将车辆ca1出停车场,并将其进入停车场是的时刻赋给tif(t){t=ca1.time-t; //如果该车辆是从停车场内开出的,将停留时间重新赋给tif(QueueNotEmpty(Q)){QueueDelete(&Q,&ca2);ca2.time=ca1.time;StackPush(&S1,ca2);}/*如果此时变车道上有车辆的话记作ca2将其辆驶入停车场,将其time改ca1离开时的time,即从ca1离开时对ca2开始计时*/}else t=0; //若该车辆不是从停车场开出的,显然其停留时间为printf("该车停留的时间t=%f,应收取的费用为money=%f\n",t,t*e);}}1.6测试情况第一组数据的测试结果:第二组数据的测试结果:第三组数据的测试结果:第四组数据的测试结果:第二部分求最短路径2.1问题描述在给定的图中,求出以任意顶点为源点,到其他顶点的最短路径。