东北大学数据结构实践实验报告
数据结构实验实训报告范文

一、实验目的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)顺序表实验结果表明,顺序表的基本操作实现正确,测试程序运行稳定。
东北大学数据结构实验分析

课程编号: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. 能够运用所学知识解决实际问题;3. 提高编程能力和团队协作能力。
三、实习内容1. 需求分析本次实习主要实现以下功能:(1)实现线性表、栈、队列、链表、树、图等基本数据结构;(2)实现查找和排序算法,如顺序查找、折半查找、快速排序、归并排序等;(3)设计并实现一个简单的学生管理系统,用于存储和管理学生的基本信息。
2. 设计说明(1)数据结构设计本次实习主要使用C语言实现数据结构,具体包括:- 线性表:使用数组实现静态线性表,使用链表实现动态线性表;- 栈和队列:使用数组实现栈和队列;- 树:使用链表实现二叉树;- 图:使用邻接矩阵和邻接表实现图。
(2)算法设计本次实习主要实现以下算法:- 查找算法:顺序查找、折半查找;- 排序算法:快速排序、归并排序;- 学生管理系统:使用链表实现学生信息存储,通过查找算法实现按学号或姓名查找学生信息。
(3)模块设计本次实习将整个程序划分为以下模块:- 数据结构模块:实现各种数据结构的基本操作;- 查找算法模块:实现查找算法;- 排序算法模块:实现排序算法;- 学生管理系统模块:实现学生管理系统的功能。
3. 上机结果及体会(1)合作人编码分工在本次实习中,我与同学合作完成编程任务。
我负责数据结构模块和查找算法模块的设计与实现,同学负责排序算法模块和学生管理系统模块的设计与实现。
(2)实际完成情况本次实习成功实现了以下功能:- 实现了线性表、栈、队列、链表、树、图等基本数据结构;- 实现了顺序查找、折半查找、快速排序、归并排序等查找和排序算法;- 设计并实现了一个简单的学生管理系统,能够存储和管理学生的基本信息。
(3)程序性能分析本次实习程序的性能分析如下:- 数据结构模块:使用链表实现数据结构,具有良好的动态性,空间复杂度较低;- 查找算法模块:顺序查找和折半查找算法的时间复杂度分别为O(n)和O(logn),适用于不同场景;- 排序算法模块:快速排序和归并排序算法的时间复杂度均为O(nlogn),适用于大数据量排序;- 学生管理系统模块:使用链表实现学生信息存储,查询效率较高。
东北大学数据结构实验报告

.. ... ... 实 验 报 告一、实验目的(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. 数据结构的基本概念和性质通过实验,使学生掌握线性表、栈、队列、串、树、图等基本数据结构的概念、性质和应用场景。
2. 数据结构的存储结构通过实验,使学生熟悉线性表、栈、队列、串、树、图等数据结构的顺序存储和链式存储方法,了解不同存储结构的优缺点。
3. 数据结构的操作算法通过实验,使学生掌握线性表、栈、队列、串、树、图等数据结构的插入、删除、查找、遍历等基本操作算法。
4. 数据结构的实际应用通过实验,使学生了解数据结构在各个领域的应用,如网络数据结构、数据库数据结构、人工智能数据结构等。
三、实验过程1. 实验准备在实验开始前,教师首先对实验内容进行讲解,使学生了解实验目的、实验步骤和实验要求。
同时,教师要求学生预习实验内容,熟悉相关理论知识。
2. 实验实施(1)线性表:通过实现线性表的顺序存储和链式存储,实现插入、删除、查找等操作。
(2)栈和队列:通过实现栈和队列的顺序存储和链式存储,实现入栈、出栈、入队、出队等操作。
(3)串:通过实现串的顺序存储和链式存储,实现串的插入、删除、查找等操作。
(4)树:通过实现二叉树、二叉搜索树、平衡二叉树等,实现树的插入、删除、查找、遍历等操作。
(5)图:通过实现图的邻接矩阵和邻接表存储,实现图的插入、删除、查找、遍历等操作。
3. 实验总结实验结束后,教师组织学生进行实验总结,总结实验过程中的收获和不足,提出改进措施。
四、实验成果通过本次数据结构实验实训,学生取得了以下成果:1. 掌握了数据结构的基本概念、性质和应用场景。
优秀数据结构实践报告体会范文(15篇)

优秀数据结构实践报告体会范文(15篇)优秀数据结构实践报告体会范文(15篇)篇一随着个人的文明素养不断提升,报告的使用成为日常生活的常态,报告具有成文事后性的特点。
那么报告应该怎么写才合适呢?下面是小编收集整理的体会社会实践报告,希望对大家有所帮助。
大学的第二个暑假到来了,应学校的提议和社会对大学生的要求,我参加了暑期社会实践活动。
在这又一次的活动中,我学到了很多,也感悟了很多。
下面就我这次暑期社会实践的心得做一总结。
因为我是计算机学院的学生,所以我在这学期的社会实践中去了家附近的塑料厂帮助整理资料和制作表格。
暑期社会实践,是我们大学生充分利用暑期的时间,以各种方式深入社会之中展开形式多样的各种实践活动。
积极地参加社会实践活动,能够促进我们对社会的了解,提高自身对经济和社会发展现状的认识,实现书本知识和实践知识的更好结合,帮助我们树立正确的世界观、人生观和价值观;大学生社会实践活动是全面推进素质教育的重要环节,是适应新世纪社会发展要求,培养全面发展型人才的需要,是加强集体主义,爱国主义,社会主义教育,升华思想的有效途径。
积极投身社会实践,深入群众,了解社会,增长才干,是青年学生成长成才的正确道路,是青年学生运用所学知识技能,发挥聪明才智,积极为社会作贡献的重要途径。
暑期社会实践则恰恰为我们提供了一个走出校园,踏上社会,展现自我的绚丽舞台。
利用假期参加有意义的社会实践活动,接触社会,了解社会,从社会实践中检验自我。
在实践中积累社会经验,在实践中提高自己的能力,这将为我们以后走出社会打下坚实的基础!年少轻狂,经受不住暴雨的洗礼?谁说象牙塔里的我们两耳不闻窗外事,一心只读圣贤书?走出校园,踏上社会,我们能否不辜负他人的`期望,为自己书写一份满意的答卷。
在注重素质教育的今天,大学生假期社会实践作为促进大学生素质教育,加强和改进青年学生思想政治工作,引导学生健康成长成才的重要举措,作为培养和提高学生实践、创新和创业能力的重要途径,一直来深受学校的高度重视。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; }}}。