东北大学大数据结构实践实验报告材料

合集下载

数据结构实验实训报告范文

数据结构实验实训报告范文

一、实验目的1. 理解并掌握数据结构的基本概念和常用算法。

2. 学会使用C语言实现线性表、栈、队列、树和图等基本数据结构。

3. 培养动手实践能力,提高编程水平。

二、实验内容1. 线性表(1)顺序表(2)链表2. 栈(1)顺序栈(2)链栈3. 队列(1)顺序队列(2)链队列4. 树(1)二叉树(2)二叉搜索树5. 图(1)邻接矩阵表示法(2)邻接表表示法三、实验环境1. 操作系统:Windows 102. 编程语言:C语言3. 编译器:Visual Studio 20194. 实验软件:C语言开发环境四、实验步骤1. 线性表(1)顺序表1)定义顺序表结构体2)实现顺序表的初始化、插入、删除、查找等基本操作3)编写测试程序,验证顺序表的基本操作(2)链表1)定义链表结构体2)实现链表的创建、插入、删除、查找等基本操作3)编写测试程序,验证链表的基本操作2. 栈(1)顺序栈1)定义顺序栈结构体2)实现顺序栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证顺序栈的基本操作(2)链栈1)定义链栈结构体2)实现链栈的初始化、入栈、出栈、判空等基本操作3)编写测试程序,验证链栈的基本操作3. 队列(1)顺序队列1)定义顺序队列结构体2)实现顺序队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证顺序队列的基本操作(2)链队列1)定义链队列结构体2)实现链队列的初始化、入队、出队、判空等基本操作3)编写测试程序,验证链队列的基本操作4. 树(1)二叉树1)定义二叉树结构体2)实现二叉树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉树的基本操作(2)二叉搜索树1)定义二叉搜索树结构体2)实现二叉搜索树的创建、遍历、查找等基本操作3)编写测试程序,验证二叉搜索树的基本操作5. 图(1)邻接矩阵表示法1)定义邻接矩阵结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接矩阵表示法的基本操作(2)邻接表表示法1)定义邻接表结构体2)实现图的创建、添加边、删除边、遍历等基本操作3)编写测试程序,验证邻接表表示法的基本操作五、实验结果与分析1. 线性表(1)顺序表实验结果表明,顺序表的基本操作实现正确,测试程序运行稳定。

大数据结构实践报告材料

大数据结构实践报告材料

大数据结构实践报告材料在当今数字化的时代,数据已经成为了一种极其重要的资源。

大数据技术的发展为我们处理和分析海量数据提供了强大的工具和方法。

在本次大数据结构的实践中,我深入探索了大数据结构的相关知识,并通过实际的项目应用,获得了宝贵的经验和深刻的体会。

一、实践背景随着互联网、物联网等技术的迅速发展,数据的产生速度和规模呈爆炸式增长。

企业和组织需要处理和分析大量的数据,以获取有价值的信息和洞察,从而做出更明智的决策。

大数据结构作为大数据处理的基础,对于提高数据处理的效率和质量具有至关重要的作用。

二、实践目的本次实践的主要目的是深入了解大数据结构的基本原理和应用,掌握常见的大数据结构的实现和操作方法,并能够运用所学知识解决实际的大数据处理问题。

三、实践内容(一)数据采集在实践过程中,我们首先需要解决的是数据采集的问题。

数据的来源多种多样,包括数据库、文件系统、网络爬虫等。

我们使用了Python 中的相关库,如`requests`和`beautifulsoup4`,来实现网络爬虫,从网页中获取所需的数据。

同时,还使用了`pandas`库来读取和处理从文件和数据库中获取的数据。

(二)数据存储采集到的数据需要进行有效的存储,以便后续的处理和分析。

我们使用了 Hadoop 生态系统中的 HDFS(Hadoop 分布式文件系统)来存储大规模的数据。

HDFS 具有高容错性和可扩展性,能够满足大数据存储的需求。

此外,还使用了关系型数据库 MySQL 和 NoSQL 数据库MongoDB 来存储不同类型的数据。

(三)数据处理在数据处理方面,我们使用了 MapReduce 编程模型。

MapReduce是一种分布式计算框架,能够将大规模的数据处理任务分解为多个小的任务,并在多个节点上并行执行,从而提高数据处理的效率。

我们通过编写 Map 函数和 Reduce 函数,实现了数据的过滤、转换和聚合等操作。

(四)数据结构选择在实践中,我们根据不同的应用场景选择了合适的数据结构。

数据结构课程实验报告

数据结构课程实验报告

数据结构课程实验报告一、实验目的数据结构是计算机科学中一门重要的基础课程,通过本次实验,旨在加深对数据结构基本概念和算法的理解,提高编程能力和解决实际问题的能力。

具体目标包括:1、掌握常见数据结构(如数组、链表、栈、队列、树、图等)的基本操作和实现方法。

2、学会运用数据结构解决实际问题,培养算法设计和分析的能力。

3、提高程序设计的规范性和可读性,培养良好的编程习惯。

二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、实验内容本次实验共包括以下几个部分:(一)线性表的实现与操作1、顺序表的实现定义一个顺序表结构体,包含数据元素数组和表的长度。

实现顺序表的初始化、插入、删除、查找等基本操作。

2、链表的实现定义链表节点结构体,包含数据域和指针域。

实现链表的创建、插入、删除、遍历等操作。

(二)栈和队列的实现与应用1、栈的实现采用顺序存储或链式存储实现栈。

实现栈的入栈、出栈、栈顶元素获取等操作,并应用于表达式求值。

2、队列的实现用循环队列或链式队列实现队列。

实现队列的入队、出队、队头元素获取等操作,应用于模拟排队系统。

(三)树的基本操作与遍历1、二叉树的实现定义二叉树节点结构体,包含数据域、左子树指针和右子树指针。

实现二叉树的创建、插入、删除节点等操作。

2、二叉树的遍历分别实现前序遍历、中序遍历和后序遍历,并输出遍历结果。

(四)图的表示与遍历1、邻接矩阵和邻接表表示图定义图的结构体,使用邻接矩阵和邻接表两种方式存储图的信息。

实现图的创建、添加边等操作。

2、图的遍历分别用深度优先搜索(DFS)和广度优先搜索(BFS)遍历图,并输出遍历序列。

四、实验步骤(一)线性表的实现与操作1、顺序表的实现首先,定义了一个结构体`SeqList` 来表示顺序表,其中包含一个整数数组`data` 用于存储数据元素,以及一个整数`length` 表示表的当前长度。

在初始化函数`InitSeqList` 中,将表的长度初始化为 0,并分配一定的存储空间给数组。

东北大学数据结构实验分析

东北大学数据结构实验分析

课程编号:B0801010501.实验目的实验一:1.理解队列的概念以及用法2.掌握queue类的使用3.熟练运用队列先进先岀,模拟打印机的工作过程实验二:1.理解图的概念2.理解并掌握图的存储,并利用邻接表来存储图的信息3.理解并掌握Dijkstra算法4.运用Dijkstra算法解决最短路径的问题针对每次实验,写岀你认为比较重要的实验目的2.实验内容与实验步骤2.1打印机模拟程序的内容与步骤(1)简短明确地写岀实验的内容模拟打印机打印的过程,以先来先服务的策略来完成打印工作。

先从一个文件中读取所有任务的大小与到达时间,并将其存储在workload队列中。

使用一个计数器来模拟时间的流逝,当当前时间与workload队列中的一个任务的到达时间相等的时候,该任务被弹岀,并被压入到另一个等待执行的队列中。

该等待执行的队列以先入先出的准则依次弹出任务并执行。

最后计算出任务总数与,总等待时间,平均等待时间。

(2)简短描述抽象数据类型或设计的函数描述,说明为什么要使用这种抽象数据类型,并说明你的解决设想①一个simulator的抽闲类和它的实现类fifo类。

该类的simulate函数用来实现先进先岀策略的打印算法。

②两个队列,一个workload队列,一个是等待执行队列。

Workload队列中存放的是所有的打印任务,通过文件读取并保存。

而等待执行队列则是为了实现FIFO功能的队列,即时间小的就先被压入等待执行队列,自然也就先被pop并执行。

解决设想:利用一个int型变量模拟时间的流逝,然后当等待执行队列为空的时候,就不断循环检查workload队列中是否有任务到达,若有则将其弹岀并push进等待执行队列。

而当等待执行队列中有任务时则执行它,并且同时判断workload队列中是否有任务到达。

若workload和等待执行队列同时为空了,则程序结束。

-1 -⑶简短明确地写岀你实验所采用的存储结构及其用途,详细说明其中的属性的含义。

东北大学数据结构运动会竞赛成绩统计实验报告

东北大学数据结构运动会竞赛成绩统计实验报告

《数据结构》实验报告实验内容:运动会竞赛成绩统计数据结构实验报告一.课题概述 (1)二.概要设计原理 (1)三.详细程序清单及注释说明 (2)四.运行与测试及结果 (7)五.本人编写函数 (11)六.心得体会 (13)七.参考文献 (13)一、课题概述1.实验目的:线性表应用类实验题目参考2.实验内容:运动会竞赛成绩统计【问题描述】东北大学第51届运动大会成功举行。

共有N个学院的男女代表队参赛。

大会共设M个男子项目和W个女子项目。

大会即将闭幕,准备公布成绩。

【实验要求】设计运动会竞赛成绩统计程序。

(1)采用顺序表或链表等数据结构。

(2)统计各代表队的男女总分和团体总分。

(3)公布各单项成绩的前六名和团体成绩的前三名。

(4)可以查询成绩。

二、概要设计原理本程序主要采用了链表的存储结构,实现了对数据的存储,访问等操作。

本程序实现了男子团体成绩、女子团体成绩、总成绩的输出。

以及对个单项和团体成绩的前六名的输出。

并实现了查找功能。

程序主要分为四个函数:1.Zongfen()这个函数主要实现计算各学院的男子总分、女子总分、以及团体总分的计算以及存储操作。

2.tuandui_paiming()此函数运用了排顺函数,实现了对团体总分的排序,以及前六名的输出。

3.danxiang_paiming()此函数运用了排序函数,实现了对单项成绩的排名,以及对各个单项前六名的输出。

4.chazhao()通过此函数,可以实现对各个学院的查找,并且显示出各个学院的单项成绩,以及男子团体成绩、女子团体成绩、总成绩的输出。

5.main()6.主函数,实现对所有函数的协调,并且执行了一些程序中相当关键的部分,对整个程序的执行以及正确的输出起到了很大的作用。

7.zhujiemain()主界面函数,实现函数运行时界面的输出,以及对接下来操作的选择,是整个程序的关键部分。

三、详细程序清单及注释说明#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct xueyuan{char name[10]; //学院名称int Mdata[5]; //5个男子项目成绩int Wdata[5]; //5个女子项目成绩int man; //男子项目总成绩int woman; //女子项目总成绩int total; //学院总成绩struct xueyuan *next;}xueyuan,*Lxueyuan;Lxueyuan L;void zhujiemian();char Mname[5][20]; //5个男子项目名称char Wname[5][20]; //5个女子项目成绩char b[9][10];int a[9];char xueyuan_name[][9]={"信息","机械","软件","材冶","资土","外国语","文法","工管","理"};int fenshu[9][10]={{7,8,5,6,2,5,8,7,4,5},{5,6,8,7,4,5,2,1,3,5},{8,6,5,4,2,3,5,4,7,4},{8,5,4,7,1,5,4,7,8,5},{7,5,4,6,5,8,6,9,5,6},{7,5,6,4,2,3,8,9,6,5},{7,5,4,2,6,9,8,5,6,1},{5,6,4,8,5,6,5,4,9,8},{8,5,4,2,6,8,9,6,5,8}};void shuju() //数据处理{int i,j;strcpy(Mname[0],"男子100米");strcpy(Mname[1],"男子110米栏");strcpy(Mname[2],"男子铅球");strcpy(Mname[3],"男子铁饼");strcpy(Mname[4],"男子体操");strcpy(Wname[0],"女子100米");strcpy(Wname[1],"女子100米栏");strcpy(Wname[2],"女子铅球");strcpy(Wname[3],"女子铁饼");strcpy(Wname[4],"女子体操");L=(Lxueyuan)malloc(sizeof(xueyuan));Lxueyuan p;L->next=NULL;for(i=0;i<9;i++){p=(Lxueyuan)malloc(sizeof(xueyuan));strcpy(p->name,xueyuan_name[i]);for(j=0;j<5;j++)p->Mdata[j]=fenshu[i][j];for(j=0;j<5;j++)p->Wdata[j]=fenshu[i][j+5];p->next=L->next;L->next=p;}}void zongfen() //计算总分以及输出{int i;Lxueyuan p;p=L->next;printf("----------------------各学院总分---------------------\n");printf("学院男子总成绩女子总成绩总成绩");for(i=0;i<9;i++){printf("\n%s\t\t",p->name);p->man=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4];p->woman=p->Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4];p->total=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4]+p->Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4];printf("%d\t\t%d\t\t",p->man,p->woman);printf("%d",p->total);p=p->next;}}void paixu(int a[9],char b[9][10]){int i,j,k;char c[10];for(i=0;i<9;i++)for(j=0;j<9-i;j++){if(a[j]<=a[j+1]){k=a[j];a[j]=a[j+1];a[j+1]=k;strcpy(c,b[j]);strcpy(b[j],b[j+1]);strcpy(b[j+1],c);}}}void tuandui_paiming() //公布团体排名{int i;printf("\n\n\n--------------------团体排名--------------------\n");printf(" 学院第一名第二名第三名第四名第五名第六名");Lxueyuan p;p=L->next;for(i=0;i<9;i++){a[i]=p->man;strcpy(b[i],p->name);p=p->next;}paixu(a,b);printf("\n男子项目\t");for(i=0;i<6;i++){printf("%s\t",b[i]);}p=L->next;for(i=0;i<9;i++){a[i]=p->woman;strcpy(b[i],p->name);p=p->next;}paixu(a,b);printf("\n女子项目\t");for(i=0;i<6;i++){printf("%s\t",b[i]);}p=L->next;for(i=0;i<9;i++){a[i]=p->total;strcpy(b[i],p->name);p=p->next;}paixu(a,b);printf("\n总项目\t\t");for(i=0;i<6;i++){printf("%s\t",b[i]);}printf("\n");zhujiemian();}void danxiang_paiming(){int i,j;printf("\n\n\n--------------------单项排名--------------------\n");printf(" 学院第一名第二名第三名第四名第五名第六名");Lxueyuan p;for(j=0;j<5;j++){p=L->next;for(i=0;i<9;i++){a[i]=p->Mdata[j];strcpy(b[i],p->name);p=p->next;}paixu(a,b);printf("\n%s\t",Mname[j]);for(i=0;i<6;i++){printf("%s\t",b[i]);}}for(j=0;j<5;j++){p=L->next;for(i=0;i<9;i++){a[i]=p->Wdata[j];strcpy(b[i],p->name);p=p->next;}paixu(a,b);printf("\n%s\t",Wname[j]);for(i=0;i<6;i++){printf("%s\t",b[i]);}}zhujiemian();}void chazhao() //查找函数{int i;char abc[20];printf("请输入您要查找的学院名称:");scanf("%s",abc);Lxueyuan p;p=L->next;while(p){if(strcmp(p->name,abc))break;}if(p==NULL)printf("您查找的学院不存在!!\n");else{for(i=0;i<5;i++)printf("%s:\t%d分\n",Mname[i],p->Mdata[i]);for(i=0;i<5;i++)printf("%s:\t%d分\n",Wname[i],p->Wdata[i]);printf("男子总成绩:\t%d分\n",p->man);printf("女子总成绩:\t%d分\n",p->woman);printf("总成绩:\t%d分\n",p->total);}zhujiemian();}void zhujiemian(){printf("----------------------------------------------------\n""---- 1.总成绩及团体排名----\n""---- 2.单项排名----\n""---- 3.查找----\n""---- 其他.退出----\n""----------------------------------------------------\n");int choose;printf("请输入您的选择:");scanf("%d",&choose);switch(choose){case 1:zongfen();tuandui_paiming();break;case 2:danxiang_paiming();break;case 3:chazhao();break;default:exit(0);}}void main() //主函数{shuju();zhujiemian();}四.运行与测试及结果1.主界面2.各学院总分3.团体总分4.单项排名5.查找—信息---机械6.退出五.本人编写函数#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct xueyuan{char name[10]; //学院名称int Mdata[5]; //5个男子项目成绩int Wdata[5]; //5个女子项目成绩int man; //男子项目总成绩int woman; //女子项目总成绩int total; //学院总成绩struct xueyuan *next;}xueyuan,*Lxueyuan;Lxueyuan L;void zhujiemian();char Mname[5][20]; //5个男子项目名称char Wname[5][20]; //5个女子项目成绩char b[9][10];int a[9];char xueyuan_name[][9]={"信息","机械","软件","材冶","资土","外国语","文法","工管","理"};int fenshu[9][10]={{7,8,5,6,2,5,8,7,4,5},{5,6,8,7,4,5,2,1,3,5},{8,6,5,4,2,3,5,4,7,4},{8,5,4,7,1,5,4,7,8,5},{7,5,4,6,5,8,6,9,5,6},{7,5,6,4,2,3,8,9,6,5},{7,5,4,2,6,9,8,5,6,1},{5,6,4,8,5,6,5,4,9,8},{8,5,4,2,6,8,9,6,5,8}};void shuju() //数据处理{int i,j;strcpy(Mname[0],"男子100米");strcpy(Mname[1],"男子110米栏");strcpy(Mname[2],"男子铅球");strcpy(Mname[3],"男子铁饼");strcpy(Mname[4],"男子体操");strcpy(Wname[0],"女子100米");strcpy(Wname[1],"女子100米栏");strcpy(Wname[2],"女子铅球");strcpy(Wname[3],"女子铁饼");strcpy(Wname[4],"女子体操");L=(Lxueyuan)malloc(sizeof(xueyuan));Lxueyuan p;L->next=NULL;for(i=0;i<9;i++){p=(Lxueyuan)malloc(sizeof(xueyuan));strcpy(p->name,xueyuan_name[i]);for(j=0;j<5;j++)p->Mdata[j]=fenshu[i][j];for(j=0;j<5;j++)p->Wdata[j]=fenshu[i][j+5];p->next=L->next;L->next=p;}}void zongfen() //计算总分以及输出{int i;Lxueyuan p;p=L->next;printf("----------------------各学院总分---------------------\n");printf("学院男子总成绩女子总成绩总成绩");for(i=0;i<9;i++){printf("\n%s\t\t",p->name);p->man=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4];p->woman=p->Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4];p->total=p->Mdata[0]+p->Mdata[1]+p->Mdata[2]+p->Mdata[3]+p->Mdata[4]+p->Wdata[0]+p->Wdata[1]+p->Wdata[2]+p->Wdata[3]+p->Wdata[4];printf("%d\t\t%d\t\t",p->man,p->woman);printf("%d",p->total);p=p->next;}}void zhujiemian(){printf("----------------------------------------------------\n""---- 1.总成绩及团体排名----\n""---- 2.单项排名----\n""---- 3.查找----\n""---- 其他.退出----\n""----------------------------------------------------\n");int choose;printf("请输入您的选择:");scanf("%d",&choose);switch(choose){case 1:zongfen();tuandui_paiming();break;case 2:danxiang_paiming();break;case 3:chazhao();break;default:exit(0);}}void main() //主函数{shuju();zhujiemian();}六.心得体会通过这次的程序设计,使自己对链表的操作有了更进一步的了解。

东北大学数据结构实验报告

东北大学数据结构实验报告

.. ... ... 实 验 报 告一、实验目的(1) 掌握线性表的基本操作(插入、删除、查找)以及线性表合并等运算在顺序存储结构、链式存储结构上的实现。

重点掌握链式存储结构实现的各种操作。

(2) 掌握线性表的链式存储结构的应用。

二、实验内容与实验步骤(1)实验内容:实现约瑟夫环,约瑟夫环(Joseph )问题的一种描述是:编号为1、2、3……n 的n 个人按照顺时针方向围坐一圈,每人持有一个密码(正整数)。

一开始任选一个正整数作为报数的上限值m ,从第一个人开始按照顺时针的方向自1开始顺序报数,报到m 时停止报数。

报m 的人出列,将他的密码作为新的m 值,从他的顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。

设计一个程序求出出列顺序。

(2)抽象数据类型和设计的函数描述,说明解决设想。

首先定义一个链表,用其中的data 项存储每个人的编号,用password 项存储每个人所持有的密码,并且声明一个指针。

之后使用CreatList_CL 函数来创建一个循环链表,在其中的data 和password 中存入编号和密码,最后使最后一个节点的next 指向L ,使其能够形成循环队列。

定义了函数Display 来显示链表当中的内容,以确定存储的数据没有错误。

定义了函数Delete_L 来实现约瑟夫环中依次删除的功能,依次比较,如果某个人所持的密码和m 值相等,则删除这个结点,并且输出此时该结点的编号和密码,实现出列的功能。

(3) 简短明确地写出实验所采用的存储结构,并加以说明。

该实验我主要采用的是线性表的链式存储结构,首先定义了链表的结构,其中包括data 项和password 项,分别存储每个人的编号和所持密码,还声明了指向下一个结点的指针,该指针可以连接各个结点,并且将最后一个结点的指针指向第一个结点使之成为一个循环链表。

三、实验环境操作系统:Windows 7调试软件名称:Visio Studio2017 上机地点:信息楼B405 四、实验过程与分析(1)主要的函数或操作内部的主要算法,分析这个算法的时、空复杂度,并说明设计的巧妙之处。

东北大学数据结构运动会竞赛成绩统计实验报告

东北大学数据结构运动会竞赛成绩统计实验报告

《数据结构》实验报告实验内容:运动会竞赛成绩统计数据结构实验报告一.课题概述 (1)二.概要设计原理 (1)三.详细程序清单及注释说明 (2)四.运行与测试及结果 (7)五.本人编写函数 (11)六.心得体会 (13)七.参考文献 (13)一、课题概述1.实验目的:线性表应用类实验题目参考2.实验内容:运动会竞赛成绩统计【问题描述】东北大学第51届运动大会成功举行。

共有N个学院的男女代表队参赛。

大会共设M个男子项目和W个女子项目。

大会即将闭幕,准备公布成绩。

【实验要求】设计运动会竞赛成绩统计程序。

(1)采用顺序表或链表等数据结构。

(2)统计各代表队的男女总分和团体总分。

(3)公布各单项成绩的前六名和团体成绩的前三名。

(4)可以查询成绩。

二、概要设计原理本程序主要采用了链表的存储结构,实现了对数据的存储,访问等操作。

本程序实现了男子团体成绩、女子团体成绩、总成绩的输出。

以及对个单项和团体成绩的前六名的输出。

并实现了查找功能。

程序主要分为四个函数:1.Zongfen()这个函数主要实现计算各学院的男子总分、女子总分、以及团体总分的计算以及存储操作。

2.tuandui_paiming()此函数运用了排顺函数,实现了对团体总分的排序,以及前六名的输出。

3.danxiang_paiming()此函数运用了排序函数,实现了对单项成绩的排名,以及对各个单项前六名的输出。

4.chazhao()通过此函数,可以实现对各个学院的查找,并且显示出各个学院的单项成绩,以及男子团体成绩、女子团体成绩、总成绩的输出。

5.main()6.主函数,实现对所有函数的协调,并且执行了一些程序中相当关键的部分,对整个程序的执行以及正确的输出起到了很大的作用。

7.zhujiemain()主界面函数,实现函数运行时界面的输出,以及对接下来操作的选择,是整个程序的关键部分。

三、详细程序清单及注释说明#include<>#include<>#include<>typedef struct xueyuan{char name[10]; 成绩及团体排名 ----\n""---- 2.单项排名----\n""---- 3.查找----\n""---- 其他.退出----\n""----------------------------------------------------\n");int choose;printf("请输入您的选择:");scanf("%d",&choose);switch(choose){case 1:zongfen();tuandui_paiming();break;case 2:danxiang_paiming();break;case 3:chazhao();break;default:exit(0);}}void main() 界面2.各学院总分3.团体总分4.单项排名5.查找—信息---机械6.退出五.本人编写函数#include<>#include<>#include<>typedef struct xueyuan{char name[10]; 成绩及团体排名 ----\n""---- 2.单项排名----\n""---- 3.查找----\n""---- 其他.退出----\n""----------------------------------------------------\n");int choose;printf("请输入您的选择:");scanf("%d",&choose);switch(choose){case 1:zongfen();tuandui_paiming();break;case 2:danxiang_paiming();break;case 3:chazhao();break;default:exit(0);}}void main() //主函数{shuju();zhujiemian();}六.心得体会通过这次的程序设计,使自己对链表的操作有了更进一步的了解。

数据结构的实验报告

数据结构的实验报告

一、实验目的本次实验旨在让学生掌握数据结构的基本概念、逻辑结构、存储结构以及各种基本操作,并通过实际编程操作,加深对数据结构理论知识的理解,提高编程能力和算法设计能力。

二、实验内容1. 线性表(1)顺序表1)初始化顺序表2)向顺序表插入元素3)从顺序表删除元素4)查找顺序表中的元素5)顺序表的逆序操作(2)链表1)创建链表2)在链表中插入元素3)在链表中删除元素4)查找链表中的元素5)链表的逆序操作2. 栈与队列(1)栈1)栈的初始化2)入栈操作3)出栈操作4)获取栈顶元素5)判断栈是否为空(2)队列1)队列的初始化2)入队操作3)出队操作4)获取队首元素5)判断队列是否为空3. 树与图(1)二叉树1)创建二叉树2)遍历二叉树(前序、中序、后序)3)求二叉树的深度4)求二叉树的宽度5)二叉树的镜像(2)图1)创建图2)图的深度优先遍历3)图的广度优先遍历4)最小生成树5)最短路径三、实验过程1. 线性表(1)顺序表1)初始化顺序表:创建一个长度为10的顺序表,初始化为空。

2)向顺序表插入元素:在顺序表的第i个位置插入元素x。

3)从顺序表删除元素:从顺序表中删除第i个位置的元素。

4)查找顺序表中的元素:在顺序表中查找元素x。

5)顺序表的逆序操作:将顺序表中的元素逆序排列。

(2)链表1)创建链表:创建一个带头结点的循环链表。

2)在链表中插入元素:在链表的第i个位置插入元素x。

3)在链表中删除元素:从链表中删除第i个位置的元素。

4)查找链表中的元素:在链表中查找元素x。

5)链表的逆序操作:将链表中的元素逆序排列。

2. 栈与队列(1)栈1)栈的初始化:创建一个栈,初始化为空。

2)入栈操作:将元素x压入栈中。

3)出栈操作:从栈中弹出元素。

4)获取栈顶元素:获取栈顶元素。

5)判断栈是否为空:判断栈是否为空。

(2)队列1)队列的初始化:创建一个队列,初始化为空。

2)入队操作:将元素x入队。

3)出队操作:从队列中出队元素。

大数据结构课程设计实验报告材料.doc

大数据结构课程设计实验报告材料.doc

《数据结构》课程实验报告专业:指导老师:班级:姓名:学号:完成日期:一、实验目的1、掌握线性表的顺序存储结构和链式存储结构;2、熟练掌握顺序表和链表基本算法的实现;3、掌握利用线性表数据结构解决实际问题的方法和基本技巧;4、按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果);5、按时提交实验报告。

二、实验环境计算机、C语言程序设计环境三、实验学时2学时,选做实验。

四、实验内容一、顺序表的基本操作实现实验要求:数据元素类型ElemType取整型int。

按照顺序存储结构实现如下算法(各算法边界条件和返回结果适当给出):①创建任意整数线性表(即线性表的元素值随机在键盘上输入),长度限定在20之内;②打印(遍历)该线性表(依次打印出表中元素值);③在线性表中查找第i个元素,并返回其值;④在线性表中第i个元素之前插入一已知元素;⑤在线性表中删除第i个元素;⑥求线性表中所有元素值(整数)之和;二、链表(带头结点)基本操作实验要求:数据元素类型ElemType取字符型char。

按照动态单循环链表结构实现如下算法(各算法边界条件适当给出):①创建任意字符型有序(递增排序)单循环链表(即链表的字符元素随机在键盘上输入),长度限定在15之内;②打印(遍历)该链表(依次打印出表中元素值);③在链表中查找第i个元素,i合法返回元素值,否则,返回FALSE;④在链表中查找与一已知字符相同的第一个结点,有则返回TRUE,否则,返回FALSE;⑤在链表中按照有序方式插入一已知字符元素;⑥在线性表中删除第i个结点;⑦计算链表的长度。

五、实验内容一步骤:#include<stdio.h>#include<stdlib.h>#define MAX 20typedef int ElemType;typedef struct{ElemType elem[MAX];int last;}SeqList;void InitList(SeqList *L){L->last=-1;}void PrintList(SeqList *L){int i;printf("\n现在的数据为:");for(i=0;i<=L->last;i++)printf("%d ",L->elem[i]);}void CreatList(SeqList *L){ElemType e;int i=0;printf("\n输入数据(-1退出):");scanf("%d",&e);while(e!=-1){if(i<MAX){L->elem[i]=e;L->last=i;i++;}else{printf("\n表满!");}scanf("%d",&e);}}void Locate(SeqList *L, int i,ElemType e){i=0;while ((i<=L->last)&&(L->elem[i]!=e))i++;if (i<=L->last)printf("\n%d在顺序表中第%d个位置上。

东北大学数据结构实践实验报告1

东北大学数据结构实践实验报告1

东北大学数据结构实践实验报告课程编号:B080109010数据结构课程设计总结报告东北大学软件学院第一章需求分析1.1建立主程序应用菜单选项主程序应用菜单选项包含所实现的所有功能,并且对选项采用数字标识进行选择,对其他错误输入可以进行判别,提示输入错误。

1.2导游线路图的创建级景区分布图的输出用邻接链表存储景点分布图的信息,(带权无向)图的邻接链表。

输出景区景点分布图(邻接矩阵)。

图中边的权值∞用32767表示。

1.3输出导游线路图景区旅游信息管理系统中制订旅游景点导游线路策略,首先通过遍历景点,给出一个入口景点,建立一个导游线路图,导游线路图用有向图表示。

1.4输出导游线路图中是否有回路景区旅游信息管理系统中,创建好导游路线图后,判断该图中是否存在回路。

1.5查找及排序●查找功能:可以根据用户输入的关键字进行景点的查找,关键字可以在景点名称也可以在景点介绍中。

查找成功则返回景点的相关简介,如果查找不成功请给予正确提示。

●排序功能:按景点欢迎度,景点的岔路数对景点进行排序并打印出来排序顺序。

1.6输出两个景点之间最短路径和最短距离求出两个景点间的最短路径和最短距离,并且输出道路修建规划图。

算法采用迪杰斯特拉算法。

1.7输出道路修建规划图道路建设首先要保证能连通所有景点,但又要花最小的代价。

1.8输出车辆的进出信息1.8.1具体需求:停车场是一个可以停放n辆汽车,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次排列,若车场内已停满n辆车,后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应缴纳的费用和它在停车场内停留的时间。

《数据结构》实验报告格式

《数据结构》实验报告格式

课程编号:B080101050《数据结构》实验报告东北大学软件学院1. 实验目的针对每次实验,写出你认为比较重要的实验目的2. 实验内容与实验步骤2.1打印机模拟程序的内容与步骤(1) 简短明确地写出实验的内容(2) 简短描述抽象数据类型或设计的函数描述,说明为什么要使用这种抽象数据类型,并说明你的解决设想(3) 简短明确地写出你实验所采用的存储结构及其用途,详细说明其中的属性的含义。

2.2欧洲旅行实验的内容与步骤(1) 简短明确地写出实验的内容(2) 简短描述你在实验中使用的数据结构及算法的基本原理。

(3) 描述你采用STL中的什么容器或者类实现图的存储,在算法应用过程中使用什么数据结构或算法提高算法的效率。

3. 实验环境操作系统、调试软件名称、版本号,上机地点,机器台号4. 实验过程与分析4.1打印机模拟程序的过程分析(1) 描述你在进行实现时,主要的函数或操作内部的主要算法,分析这个算法的时、空复杂度,并说明你设计的巧妙之处。

(2) 你在调试过程中发现了怎样的问题?又做了怎样的改进(要求写出具体的事例)(3) 你的实现是否具有可扩展性,如针对多个打印队列的仿真程序?4.2欧洲旅行实验的过程分析(1) 描述你在进行实现时,主要的函数或操作内部的主要算法,分析这个算法的时、空复杂度,并说明你设计的巧妙之处。

(2) 你在调试过程中发现了怎样的问题?又做了怎样的改进?(3) 你的实验在解决类似问题时是否具有灵活的可修改性、可扩展性?5.实验结果总结5.1打印机模拟程序的结果总结回答以下问题:(1) 你的测试充分吗?为什么?你是怎样考虑的?(2) 为什么你要选用队列作为你应用的数据结构?(3) 用一段简短的代码及说明论述你的应用中主要的函数的主要处理部分。

(4) 用结构化图表或者结构化代码描述源程序的大致的执行过程。

5.2欧洲旅行实验的的结果总结回答以下问题:(1) 你的测试充分吗?为什么?你是怎样考虑的?(2) 在你的问题解决方案中,为图选取了顺序的还是链式的存储结构?为什么要选取这种存储结构?(3) 用一段简短的代码及说明论述你的应用中主要的函数的主要处理部分。

数据结构实验报告(实验)

数据结构实验报告(实验)

数据结构实验报告(实验)数据结构实验报告(实验)1. 实验目的1.1 理解数据结构的基本概念和操作1.2 学会使用数据结构解决实际问题1.3 掌握常用数据结构的实现和应用2. 实验环境2.1 操作系统:Windows 102.2 编程语言:C++2.3 开发工具:Visual Studio3. 实验内容3.1 实验一:线性表的实现和应用3.1.1 设计并实现线性表的基本操作函数3.1.2 实现线性表的插入、删除、查找等功能 3.1.3 实现线性表的排序算法3.1.4 应用线性表解决实际问题3.2 实验二:栈和队列的实现和应用3.2.1 设计并实现栈的基本操作函数3.2.2 设计并实现队列的基本操作函数3.2.3 实现栈和队列的应用场景3.2.4 比较栈和队列的优缺点3.3 实验三:树的实现和应用3.3.1 设计并实现二叉树的基本操作函数3.3.2 实现二叉树的创建、遍历和查找等功能3.3.3 实现树的遍历算法(前序、中序、后序遍历)3.3.4 应用树解决实际问题4. 数据结构实验结果4.1 实验一的结果4.1.1 线性表的基本操作函数实现情况4.1.2 线性表的插入、删除、查找功能测试结果4.1.3 线性表的排序算法测试结果4.1.4 线性表解决实际问题的应用效果4.2 实验二的结果4.2.1 栈的基本操作函数实现情况4.2.2 队列的基本操作函数实现情况4.2.3 栈和队列的应用场景测试结果4.2.4 栈和队列优缺点的比较结果4.3 实验三的结果4.3.1 二叉树的基本操作函数实现情况4.3.2 二叉树的创建、遍历和查找功能测试结果 4.3.3 树的遍历算法测试结果4.3.4 树解决实际问题的应用效果5. 实验分析与总结5.1 实验问题与解决方案5.2 实验结果分析5.3 实验总结与心得体会6. 附件附件一:实验源代码附件二:实验数据7. 法律名词及注释7.1 版权:著作权法规定的对原创作品享有的权利7.2 专利:国家授予的在一定时间内对新型发明享有独占权利的证书7.3 商标:作为标识企业商品和服务来源的标志的名称、符号、图案等7.4 许可协议:指允许他人在一定条件下使用自己的知识产权的协议。

数据结构实验一(完整版)

数据结构实验一(完整版)

数据结构实验一:线性表实验报告#include <string.h>#include <ctype.h>#include <malloc.h> // malloc()等#include <limits.h> // INT_MAX等#include <stdio.h> // EOF(=^Z或F6),NULL#include <stdlib.h> // atoi()#include <io.h> // eof()#include <math.h> // floor(),ceil(),abs()#include <process.h> // exi t()#include <iostream.h> // cout,cin// 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSEtypedef int ElemType;#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量#define LISTINCREMENT 2 // 线性表存储空间的分配增量struct SqListElemType *elem; // 存储空间基址int length; // 当前长度int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)};/**********************************************************/ /* 顺序表示的线性表的基本操作(12个) *//**********************************************************/ Status InitList(SqList &L){ // 操作结果:构造一个空的顺序线性表---------------1L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem)exit(OVERFLOW); // 存储分配失败L.length=0; // 空表长度为0L.listsize=LIST_INIT_SIZE; // 初始存储容量return OK;}Status DestroyList(SqList &L){ // 初始条件:顺序线性表L已存在。

东北大学 数据结构 模拟队列打印 实验报告

东北大学 数据结构 模拟队列打印 实验报告

上。 时间复杂度:O(n) 空间复杂度:O(n) 巧妙之处:说实话,不巧妙,算法性能还可以略微提高。 (2) 你在调试过程中发现了怎样的问题?又做了怎样的改进 (要求写出具体的事例) 有些event的wait_until是同时的,所以每次入队后直接把time+1是不对 的,可能漏掉一个event。改进,每次弹出一个event后不要立即改变 time值,当下一循环time不再等于顶端元素的wait_until时再加1. (3) 你的实现是否具有可扩展性,如针对多个打印队列的仿 真程序? 稍微改一下是可以的。 五、实验结果总结 回答以下问题: (1) 你的测试充分吗?为什么?你是怎样考虑的? 用了试验给出的ARBITRARY和BIGFIRST两组数据,结果均正确。 (2) 为什么你要选用队列作为你应用的数据结构? 其先进先出的特性符合打印业务的要求。 (3) 用一段简短的代码及说明论述你的应用中主要的函数的 主要处理部分。
实 验 报 告
课程名称:数据结构 班级:会计 1203 实验名称:打印机模拟
程序的设计
实验成绩: 批阅教师签字: 实验日期:2014年 22日 实验时间: 时 时 分 06月
学号: 20120577 姓名:柳思 杨 组号:
实验编号:实验一 指导教师:张明卫
分-
一、实验目的 写出你认为比较重要的实验目的 1、了解和掌握队列的数据类型描述及其特点。 2、掌握队列初始化、入队、出队等相关基本操作的实现方法,从 而达到能灵活运用队列解决应用问题的目的。 二、实验内容与实验步骤 (1) 简短明确地写出实验的内容 1.首先,在一个名为fifo.h的文件声明类fifo。声明类fifo适当模型下 面的关系:一个fifo是一种模拟器。 2.接下来,完整的实现fifo::模拟。这个成员函数应该首先使用继承 loadworkload加载数据文件,那么它应该实现仿真如上所述。使用继 承seconds_per_page数据成员,以帮助确定打印作业需要打印多 久。你的解决方案的输出应该匹配的输出示例解决方案。为了清楚 起见,延迟秒数,间隔打印作业时,当它到达开始打印。总延迟是所有 打印作业的总延迟,和平均延迟是所有打印作业的平均延时。 (2) 简短描述抽象数据类型或设计的函数描述,说明为什么 要使用这种抽象数据类型,并说明你的解决设想 queue<event> a; 建立一个存放event的队列对象a。 把按wait_until顺序从workload中的event导出,再依次把event对应 的job任务计算出打印的时间点printtime,存入新构造的event的 wait_until域中,最后这些event按打印时间将存入a队列中。 (3) 简短明确地写出你实验所采用的存储结构及其用途,详 细说明其中的属性的含义。

东北大学数据结构上机实验报告

东北大学数据结构上机实验报告

实验一线性表应用一、实验目的对图书馆的图书信息管理作一个简单的模拟。

二、实验要求设计图书信息管理的模拟程序。

1)采用顺序表登录图书成绩。

2)可以登记、查询、插入、删除图书成绩。

3)将图书信息按类别存储到链表中。

输入形式图书信息输出形式图书信息程序功能登记、查询、插入、删除图书成绩三、设计概要流程图抽象数据类型的定义图书类型typedef struct {int num; //书号char name[20]; //书名char author[20]; //作者char press[20]; //出版社名称int count; //存馆数量char price[10]; //定价} ElemType;单链表结点类型typedef struct LNode{ElemType data;struct LNode *next;} LinkList;各程序模块之间的调用关系四、详细设计初始化创建头结点实现线性表的初始化L = (LinkList *) malloc(sizeof(LinkList));L->next = NULL;用户界面运用printf函数录入int i, n;LinkList *s, *q, *p; //创建单链表p = L;while (p->next != NULL )p = p->next;printf("请输入需要录入的图书信息的个数:n=");scanf("%d", &n);for (i = 1; i < n + 1; i++) { //创建图书信息s = (LinkList *) malloc(sizeof(LinkList));printf("书号书名作者出版社名称存馆数量定价\n");scanf("%d%s%s%s%d%s", &s->data.num, s->, s->data.author,s->data.press, &s->data.count, s->data.price);q = L->next;if (q == NULL ) { //下一个节点为空即此节点为尾节点p->next = s;p = s;p->next = NULL;printf("录入成功!\n");continue;}while (q != NULL ) {if (strcmp(s->, q->) == 0) {printf("此图书已存在!");printf("请重新输入:\n");scanf("%d%s%s%s%d%s", &p->data.num, p->,p->data.author, p->data.press, &p->data.count,p->data.price);}q = q->next;}p->next = s;p = s;p->next = NULL;printf("录入成功!\n");Sleep(1000);}system("cls");menu();return 0;查询LinkList *p = L->next; //p指向第一个数据结点int c;int x = 0;char name1[10], author1[10], press1[10];printf(" 1 按书名查询:\n");printf(" 2 按作者名查询:\n");printf(" 3 按出版社名称:\n");printf(" 4 返回\n");printf(" 请选择1--4进行操作:\n");scanf("%d", &c);if (c > 4 || c < 1) {printf("您的输入有误!\n");scanf("%d", &c);}switch (c) {case 1:printf("请输入图书书名: \n");scanf("%s", name1);while (p != NULL ) {if (strcmp(name1, p->) != 0) //查找图书书名p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d\t%s\t%s\t%s\t%d\t%s", p->data.num, p->,p->data.author, p->data.press, p->data.count,p->data.price);printf("\n");p = p->next;x++;Sleep(2000);system("cls");menu();}}if (p == NULL && x == 0)printf("对不起,不存在此图书!\n");break;case 2:printf("请输入图书作者:\n");scanf("%s", author1);while (p != NULL ) {if (strcmp(author1, p->data.author) != 0) //查找图书作者p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d\t%s\t%s\t%s\t%d\t%s", p->data.num, p->,p->data.author, p->data.press, p->data.count,p->data.price);printf("\n");p = p->next;x++;Sleep(2000);system("cls");menu();}}if (p == NULL && x == 0)printf("对不起,不存在此图书!\n");break;case 3:printf("请输入图书的出版社名称: \n");scanf("%s", press1);while (p != NULL ) {if (strcmp(press1, p->data.press) != 0) //查找图书出版社名称p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d %s %s %s %d %s",p->data.num, p->, p->data.author,p->data.press, p->data.count, p->data.price);printf("\n");p = p->next;x++;Sleep(2000);system("cls");menu();}}if (p == NULL && x == 0)printf("对不起!不存在此图书\n");break;case 4:break;}五、调试分析所遇问题的解决方法及分析当我编写录入函数时,对如何将数据储存到链表中无从下手。

数据结构实习报告范文

数据结构实习报告范文

一、实习背景随着计算机科学技术的不断发展,数据结构作为计算机科学的基础学科,在计算机领域扮演着举足轻重的角色。

为了提高自己的专业技能,增强实际操作能力,我于近期参加了数据结构实习。

通过实习,我对数据结构有了更深入的了解,以下是我对这次实习的总结。

二、实习内容1. 需求分析(1)程序所实现的功能:本实习报告主要实现线性表、栈、队列、树、图等基本数据结构及其相关操作。

(2)程序的输入:输入包括整数、字符、字符串等,具体格式如下:- 线性表:输入一系列整数,用空格分隔。

- 栈:输入一系列整数,用空格分隔。

- 队列:输入一系列整数,用空格分隔。

- 树:输入一系列整数,用空格分隔,表示节点间的父子关系。

- 图:输入一系列整数,用空格分隔,表示节点间的边。

(3)程序的输出:输出包括数据结构的状态、操作结果等,具体形式如下:- 线性表:输出线性表中的元素,用空格分隔。

- 栈:输出栈中的元素,用空格分隔。

- 队列:输出队列中的元素,用空格分隔。

- 树:输出树的前序遍历、中序遍历、后序遍历结果。

- 图:输出图中的节点及其邻接表。

(4)测试数据:以下为测试数据示例:- 线性表:1 2 3 4 5- 栈:3 4 5- 队列:1 2 3- 树:1 2 3 4 5- 图:1 2 1 3 2 4 3 4 5 4(5)合作人及其分工:实习期间,我与同学小王合作完成实习项目。

小王负责编写线性表、栈、队列的代码,我负责编写树、图的代码。

2. 设计说明(1)主要的数据结构设计说明:- 线性表:采用顺序存储结构,使用数组实现。

- 栈:采用顺序存储结构,使用数组实现。

- 队列:采用顺序存储结构,使用数组实现。

- 树:采用链式存储结构,使用链表实现。

- 图:采用邻接矩阵和邻接表两种存储结构。

(2)程序的主要流程图:- 线性表、栈、队列的流程图:1. 输入数据2. 初始化数据结构3. 执行操作(插入、删除、遍历等)4. 输出结果- 树的流程图:1. 输入数据2. 初始化树3. 执行操作(插入、删除、遍历等)4. 输出结果- 图的流程图:1. 输入数据2. 初始化图3. 执行操作(插入、删除、遍历等)4. 输出结果(3)程序的主要模块:- 线性表模块:包括插入、删除、遍历等操作。

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

实用文档课程编号:B080109010数据结构课程设计总结报告东北大学软件学院第一章需求分析1.1 建立主程序应用菜单选项主程序应用菜单选项包含所实现的所有功能,并且对选项采用数字标识进行选择,对其他错误输入可以进行判别,提示输入错误。

1.2 导游线路图的创建级景区分布图的输出用邻接链表存储景点分布图的信息,(带权无向)图的邻接链表。

输出景区景点分布图(邻接矩阵)。

图中边的权值∞用32767表示。

1.3 输出导游线路图景区旅游信息管理系统中制订旅游景点导游线路策略,首先通过遍历景点,给出一个入口景点,建立一个导游线路图,导游线路图用有向图表示。

1.4 输出导游线路图中是否有回路景区旅游信息管理系统中,创建好导游路线图后,判断该图中是否存在回路。

1.5 查找及排序●查找功能:可以根据用户输入的关键字进行景点的查找,关键字可以在景点名称也可以在景点介绍中。

查找成功则返回景点的相关简介,如果查找不成功请给予正确提示。

●排序功能:按景点欢迎度,景点的岔路数对景点进行排序并打印出来排序顺序。

1.6 输出两个景点之间最短路径和最短距离求出两个景点间的最短路径和最短距离,并且输出道路修建规划图。

算法采用迪杰斯特拉算法。

1.7 输出道路修建规划图道路建设首先要保证能连通所有景点,但又要花最小的代价。

1.8 输出车辆的进出信息1.8.1 具体需求:停车场是一个可以停放n辆汽车,且只有一个大门可供汽车进出。

汽车在停车场内按车辆到达时间的先后顺序,依次排列,若车场内已停满n辆车,后来的车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。

输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应缴纳的费用和它在停车场内停留的时间。

1.8.2 停车场的管理流程如下:A.当车辆要进入停车场时,检查停车场是否已满,如果未满则车辆进入停车场;如果停车场已满,则车辆进入便道等候。

B.当车辆要求出栈时,先让在它之后进入停车场的车辆退出停车场为它让路,再让该车退出停车场,让路的所有车辆再按其原来进入停车场的次序进入停车场。

之后,再检查在便道上是否有车等候,有车则让最先等待的那辆车进入停车场。

1.8.3 车辆出入清单:每一组输入数据包括三个数据项:汽车“到达”或“离去”信息、汽车牌照号码以及到达或离去的时刻。

对每一组输入数据进行操作后的输出信息为:若是车辆到达,则输出汽车在停车场内或便道上的停车位置;若是车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。

1.9退出整个程序。

第二章系统设计2.1总体设计:2.1.1:具体数据结构定义首先需要创建节点类,邻接边类,无向图类以及停车类。

节点类包括了存储的景点名称,景点介绍,景点的欢迎度,景点有误休息区,景点有无厕所以及指向下一条邻接边的指针。

邻接边类包括了邻接点的序号,边的权值(即是距离)以及指向下一条边的节点指针。

无向图类包括了该图中所需要的节点个数,所需要的邻接边数以及存储具体节点和边的指针。

具体如下:class ArcNode {public:int adjvex;ArcNode *nextarc;double weight;};class VNode {public:string data1;string data2;int wel;bool wc;bool rest;ArcNode *firstarc;};class ALGraph {public:VNode *vertices;int vexnum, arcnum;ArcNode *arcNode;};class zanlind{public:int number;string time;};2.1.2 :具体功能实现方法:a. 景区景点分布图的创建:int LocateVex(ALGraph G, string v)void CreateUDN(ALGraph &G);b 输出景区景点分布图:void PrintAdjList(ALGraph &G),void OutputGraph(ALGraph G)。

c. 输出导游线路图:void DFSTraverse(ALGraph G)d. 输出导游线路图中是否有回路:void FindInDegree( ALGraph &g),void JudgeCir(ALGraph G)。

e.查找及排序:int LocateW(ALGraph G, int wel),void LocateVex2(ALGraph G, string v),void Search(ALGraph G,string s),void FindInDegree(G),void SortWel(ALGraph G),bool isInN(ALGraph G,int a[MAX],int n)void SortN(ALGraph G),f. 输出两个景点之间最短路径和最短距离:void ShortestPath_DIJ(ALGraph G,int v0, int p[][MAX], int D[]),bool isInVe(ALGraph G,string va)void printShortestPath(ALGraph G)。

g.输出道路修建规划图:void build(ALGraph &G)void prim(ALGraph G,int v,double arr[MAX][MAX])。

h.输出车辆的进出信息:bool isInZan(int za[MAX],int number),int indexZ(int z[],int n)void goIn(),void goOut()。

2.2程序设计a. 景区景点分布图的创建:void CreateUDN(ALGraph &G) {G.arcNode=new ArcNode[MAX];G.vertices=new VNode[MAX];fstream file("C:\\Users\\22291_000\\Desktop\\数据结构\\info.txt");if(file.fail()){cout << "error open!" << endl; }int j;ArcNode *s, *t;cout<<"请输入顶点数和边数:";cin>>G.vexnum>>G.arcnum;int i=0;cout<<endl;while(!file.eof(){file >>G.vertices[i].data1>>G.vertices[i].data2 >>G.vertices[i].wel>> G.vertices[i].rest>>G.vertices[i].wc;G.vertices[i].firstarc = NULL;i++;}cout<<endl;fstream file1("C:\\Users\\22291_000\\Desktop\\数据结构\\edge.txt");if(file.fail()){cout << "error open!" << endl; }while(!file1.eof()){int weight;string v1, v2;file1>>v1>>v2>>weight;int i = LocateVex(G, v1);int j = LocateVex(G, v2);s = new ArcNode();t = new ArcNode();s->adjvex = j;s->nextarc = G.vertices[i].firstarc;s->weight=weight;G.vertices[i].firstarc =s;t->adjvex = i;t->nextarc = G.vertices[j].firstarc;t->weight=weight;G.vertices[j].firstarc =t; }}b.深度优先遍历算法:具体如下:void DFSTraverse(ALGraph G){bool sta[20];int v;for (v = 0; v<G.vexnum; v++){sta[v] =true; }stack<int>status;int n=0;int num = -1;int pk;ArcNode *e;cout << G.vertices[0].data1 << "->";sta[0] =false;status.push(0);int aa, bb;aa = 0;while (n < G.vexnum-1){e = NULL;num = status.top();e = G.vertices[num].firstarc;while (e){if (sta[e->adjvex] == false){e = e->nextarc; }else{status.push(e->adjvex);cout << G.vertices[e->adjvex].data1<<"->";aa = e->adjvex;sta[e->adjvex] = false;n++;break; } }if (e == NULL){pk = status.top();bb = pk;if (aa != bb){cout << G.vertices[pk].data1<<"->";}status.pop();}if (status.top() == 0){cout << G.vertices[0].data1 << "->";}}cout << endl; }c. 输出车辆进出信息:void goIn(){zanlind zan;cout<<"车牌号为:";cin>>zan.number;cout<<endl;time_t t = time(0);char tmp[64];strftime(tmp,sizeof(tmp),"%X ",localtime(&t));zan.time=tmp;cout<<"进场时间为:";cout<<tmp<<endl;if(parking.size()<MAX2){parking.push(zan);z[k++]=zan.number;cout<<"该车已进入停车场在: 1号车道";}else{cout<<"停车场已满,请等待其他车辆离开:";waits.push(zan); }}void goOut(){if(parking.size()<=0){cout<<"停车场为空,没有车要离开!";}else{cout<<"请输入您的车牌号:";int number;cin>>number;if(isInZan(z,number)) {while(parking.top().number!=number) {cars.push(parking.top());parking.pop();}time_t t = time(0);char tmp[64];strftime(tmp,sizeof(tmp),"%X ",localtime(&t));cout<<"车牌号为:"<<parking.top().number<<"的车要离开了,离开时间为"<<tmp;parking.pop();while(!cars.empty() && parking.size()<MAX2){parking.push(cars.top());cars.pop();}while(parking.size()<MAX2) {parking.push(waits.front());waits.pop();}}else{cout<<"没有该辆车!请输入正确的车牌号:"<<endl; }}}。

相关文档
最新文档