东北大学数据结构实践实验报告
数据结构实验实训报告范文
一、实验目的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
东北大学数据结构实践实验报告课程编号: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. 深入理解数据结构的基本概念、原理和算法;2. 掌握数据结构的常用操作和编程实现;3. 培养编程思维和解决问题的能力;4. 提高团队协作和沟通能力。
三、实习内容1. 线性表线性表是数据结构中最基本的结构之一,主要包括顺序表和链表。
在实习过程中,我实现了顺序表和链表的基本操作,如插入、删除、查找等。
2. 栈和队列栈和队列都是一种特殊的线性表,具有先进后出(FILO)和先进先出(FIFO)的特性。
我分别实现了栈和队列的入栈、出栈、入队、出队等基本操作。
3. 树树是一种层次结构,包括二叉树、二叉搜索树、平衡树等。
在实习过程中,我重点学习了二叉树和二叉搜索树的基本操作,如插入、删除、查找等。
4. 图图是一种复杂的数据结构,包括无向图和有向图。
我实现了图的邻接矩阵和邻接表表示,并实现了图的深度优先搜索(DFS)和广度优先搜索(BFS)算法。
5. 应用实例在实习过程中,我还结合实际应用场景,实现了以下实例:(1)计算两个字符串的相似度,使用编辑距离算法;(2)实现一个简单的文件压缩和解压缩工具,使用哈夫曼树进行编码和解码;(3)实现一个基于二叉搜索树的字典,支持插入、删除、查找等操作。
四、实习成果1. 熟练掌握了线性表、栈、队列、树、图等基本数据结构;2. 能够根据实际需求选择合适的数据结构,并实现其操作;3. 提高了编程能力和问题解决能力;4. 具备了一定的团队协作和沟通能力。
五、实习体会1. 数据结构是计算机科学的基础,掌握数据结构对于提高编程能力至关重要;2. 实践是检验真理的唯一标准,通过实际编程实现数据结构,能够加深对知识点的理解;3. 团队协作和沟通能力在实习过程中得到了锻炼,为今后的工作奠定了基础;4. 在实习过程中,遇到问题时要善于查阅资料、请教他人,培养自己的自学能力。
数据结构实训任务总结报告
一、引言数据结构是计算机科学中一门重要的基础课程,它涉及到数据的组织、存储、检索和维护等方面。
为了更好地理解和掌握数据结构的相关知识,我们进行了一系列的实训任务。
以下是本次实训任务的总结报告。
二、实训任务概述本次实训任务主要包括以下内容:1. 数据结构基础理论的学习与理解;2. 线性表、链表、栈、队列、树、图等基本数据结构的实现;3. 数据结构的常用算法设计与实现;4. 数据结构在实际应用中的案例分析。
三、实训任务完成情况1. 数据结构基础理论的学习与理解在实训过程中,我们首先对数据结构的基本概念进行了深入的学习,包括数据结构、算法、时间复杂度、空间复杂度等。
通过对基本概念的理解,为后续实训任务的完成奠定了基础。
2. 线性表、链表、栈、队列、树、图等基本数据结构的实现在实训过程中,我们分别实现了以下基本数据结构:(1)线性表:我们使用顺序存储和链式存储两种方式实现了线性表,并实现了线性表的插入、删除、查找等操作。
(2)链表:我们实现了单链表、循环链表和双向链表,并实现了链表的插入、删除、查找等操作。
(3)栈:我们实现了栈的顺序存储和链式存储两种方式,并实现了栈的基本操作。
(4)队列:我们实现了队列的顺序存储和链式存储两种方式,并实现了队列的基本操作。
(5)树:我们实现了二叉树、二叉搜索树、平衡二叉树等,并实现了树的基本操作。
(6)图:我们实现了图的邻接矩阵和邻接表两种存储方式,并实现了图的基本操作。
3. 数据结构的常用算法设计与实现在实训过程中,我们设计并实现了以下常用算法:(1)排序算法:冒泡排序、选择排序、插入排序、快速排序、归并排序等。
(2)查找算法:顺序查找、二分查找、哈希查找等。
(3)路径查找算法:深度优先遍历、广度优先遍历等。
4. 数据结构在实际应用中的案例分析在实训过程中,我们分析了以下数据结构在实际应用中的案例:(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 许可协议:指允许他人在一定条件下使用自己的知识产权的协议。
数据结构实习报告(共8篇)
数据结构实习报告(共8篇)数据结构实习报告(共8篇)第1篇:数据结构实_报告附件:实_报告格式,如下:数据结构实_报告班级:姓名:xxx(1514)xxx(1514)xxx(1514)指导教师:日期:题目一、问题描述(把你所选的题目及要求说一下)二、概要设计(抽象数据类型定义)三、详细设计(主要算法和函数间的调用关系)四、调试分析(调式过程中出现的问题及如何改正)五、心得体会(组内成员的分工及实_期间的体会)六、用户手册(系统的使用方法介绍)可参照_题集上的实_报告格式。
第2篇:数据结构实_报告数据结构实_报告班级:13软件二班姓名:殷健学号:1345536225子集和数问题1:问题描述子集和数问题1:子集和问题的为W,c。
其中,W=w1,w2,.,wn是一个正整数的集合,子集和数问题判定是否存在W的一个子集W1,使得W1=cW(02:问题分析程序中设计了函数voidputeSumofSub(ints,intk,intr),其意义是从第k项开始,如果s(已经决策的和数)和wk(当前元素)之和为和数,就把结果输出来,否则如果s与,wk,wk+1之和小于和数,则调用puteSumofsub(s+wk,k+1,r-wk),意为选择此结点的左分支,再判断s和后面所有元素之和是否不小于M(所有的加起来都小,必定无解),并且s+wk+1M,也是无解),若条件符合即调用puteSumofSub(s,k+1,r-wk),即选择当前结点的右分支。
算法展示:#includeusingnamespacestd;#include#include#defineM50claSu mOfSubprivate:intwM;intm;intxM;public:SumOfSub(inta,intb, intn)for(inti=0;i=mvoidmain()intsum=0;intwM;srand(unsigne d)time(NULL);for(inti=0;icoutcoutcoutm;sum=m*sum;cout复杂性分析:对于不同的输入结果,算法的执行次数有所不同,最好情况是n,最坏情况是n*2n。
数据结构实习报告
一、实习背景随着计算机科学技术的不断发展,数据结构作为计算机科学的重要基础,在各个领域都发挥着重要作用。
为了提高自己的实践能力,加深对数据结构理论知识的理解,我参加了本次数据结构实习。
通过实习,我学习了数据结构在实际应用中的实现方法和技巧,提高了自己的编程能力和问题解决能力。
二、实习内容1. 实习项目概述本次实习项目是一个基于C语言实现的学生信息管理系统。
系统包括学生信息的添加、删除、修改、查询等功能。
在实现过程中,我主要使用了线性表、链表、栈、队列、树等数据结构。
2. 数据结构设计(1)线性表:用于存储学生信息,包括学号、姓名、性别、年龄、班级等字段。
(2)链表:实现学生信息的添加、删除、修改等功能。
(3)栈:实现学生信息的临时存储,如删除操作时需要先弹出栈顶元素。
(4)队列:实现学生信息的排序功能,如按学号排序。
(5)树:实现学生信息的分类存储,如按班级分类。
3. 程序设计(1)主程序:负责调用各个模块,实现学生信息管理系统的整体功能。
(2)数据输入模块:负责从用户处获取输入的学生信息,并将其存储到数据结构中。
(3)数据输出模块:负责将学生信息显示给用户,包括添加、删除、修改、查询等操作的结果。
(4)数据操作模块:负责实现学生信息的各种操作,如添加、删除、修改、查询等。
三、实习成果1. 实现了一个功能完善的学生信息管理系统。
2. 掌握了线性表、链表、栈、队列、树等数据结构在实际应用中的实现方法和技巧。
3. 提高了编程能力和问题解决能力。
4. 了解了软件开发的流程,如需求分析、设计、编码、测试等。
四、实习体会1. 数据结构是计算机科学的重要基础,在实际应用中具有重要意义。
2. 在编程过程中,要善于运用各种数据结构,以提高程序的性能和可读性。
3. 需要具备良好的编程习惯,如代码规范、注释清晰等。
4. 在遇到问题时,要善于查阅资料,分析问题,提出解决方案。
5. 团队合作是软件开发的重要环节,要学会与他人沟通、协作。
东北大学 数据结构 模拟队列打印 实验报告
上。 时间复杂度: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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 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; }}}。