(中央电大)数据结构实验报告5

合集下载

数据结构实验五实验报告

数据结构实验五实验报告

数据结构实验报告实验五图子系统实验题目:图的遍历问题专业班级:网络工程 1002班组长:王星(30)组员:郭坤铭(43)张磊(44)2012年 5月 18日实验报告实验类型__综合__实验室_软件实验室二__一、实验题目图的遍历问题二、实验目的和要求1、掌握图的存储思想及其存储实现2、掌握图的深度、广度优先遍历算法思想及其程序实现3、掌握图的常见应用算法的思想及其程序实现三、需求分析本演示程序用c++6.0编写,完成用户用键盘输入以下结点数据:太原、成都、北京、上海、天津、大连、河北。

(1)建立一个有向图或无向图(自定)的邻接表并输出该邻接表。

(2)在图的邻接表的基础上计算各顶点的度,并输出。

(3)以有向图的邻接表为基础实现输出它的拓扑排序序列。

(4)采用邻接表存储实现无向图的深度优先遍历。

(5)采用邻接表存储实现无向图的广度优先遍历。

(6)采用邻接矩阵存储实现无向图的最小生成树的 PRIM 算法。

最后,在主函数中设计一个简单的菜单,分别调试上述算法。

四、概要设计为了实现上述程序功能,需要定义如下内容基本数据类型定义如下:typedef struct node{ //边表结点int adj; //边表结点数据域struct node *next;}node;typedef struct vnode //顶点表结点{ char name[20];node *fnext;}vnode,AList[20];typedef struct{ AList List; //邻接表int v,e; //顶点树和边数}*Graph;Graph CreatDG(){ } //建立无向邻接表Graph CreatAG(){ } //有向邻接图void Print(Graph G){} //输出图的邻接表void CreateAN(AGraph *G1){} //构造邻接矩阵结构的图G void Du(Graph G){} //输出各顶点的度数void DFSTravel(Graph G){} //深度优先遍历void BFSTravel(Graph G){} //广度优先遍历五、详细设计#include<stdio.h>#include<stdlib.h>#include<string.h>typedef struct node{//边表结点int adj;//边表结点数据域struct node *next;}node;typedef struct vnode{//顶点表结点char name[20];node *fnext;}vnode,AList[20];typedef struct{AList List;//邻接表int v,e;//顶点树和边数}*Graph;//建立无向邻接表Graph CreatDG(){Graph G;int i,j,k;node *s;G=malloc(20*sizeof(vnode));printf("请输入图的顶点数和边数(空格隔开):");scanf("%d%d",&G->v,&G->e);//读入顶点数和边数for(i=0;i<G->v;i++){printf("请输入图中第%d元素:",i+1);scanf("%s",G->List[i].name);//读入顶点信息G->List[i].fnext=NULL;//边表置为空表}for(k=0;k<G->e;k++){printf("请请输入第%d条边的两顶点序号(空格隔开):",k+1);scanf("%d%d",&i,&j);//读入边(Vi,Vj)的顶点对序号;s=(node *)malloc(sizeof(node));//生成边表结点s->adj=j;s->next=G->List[i].fnext;G->List[i].fnext=s;//将新结点*s插入顶点Vi的边表头部s=(node *)malloc(sizeof(node));s->adj=i;//邻接点序号为is->next=G->List[j].fnext;G->List[j].fnext=s;// 将新结点*s插入顶点Vj的边表头部}return G;}//有向邻接图Graph CreatAG(){Graph G;int i,j,k;node *q;G=malloc(20*sizeof(vnode));printf("请输入图的顶点数和边数【空格隔开】:");scanf("%d%d",&G->v,&G->e);for (i=0;i<G->v;i++){printf("请输入图中第%d元素:",i+1);scanf("%s",&G->List[i].name); //读入顶点信息G->List[i].fnext=NULL;}for (k=0;k<G->e;k++){printf("请请输入第%d边的两顶点序号【空格隔开】:",k+1);scanf("%d%d",&i,&j);q=(node *)malloc(sizeof(node)); //生成新边表结点sq->adj=j; //邻接点序号为jq->next=G->List[i].fnext;G->List[i].fnext=q;}return G;}//输出图的邻接表void Print(Graph G){int i;node *p;printf("\t=======邻接表========\n");for(i=0;i<G->v;i++){p=G->List[i].fnext;printf("%d | %3s",i,G->List[i].name);while(p){printf("->%3s",G->List[p->adj].name);printf("->%d",p->adj);p=p->next;}printf("\n");}}typedef struct {char vex[20];}Lists[20];typedef struct{Lists l;int edge[20][20];//邻接矩阵int v1,e1;//顶点数和弧数}AGraph;typedef struct{int data; /* 某顶点与已构造好的部分生成树的顶点之间权值最小的顶点 */int lowcost; /* 某顶点与已构造好的部分生成树的顶点之间的最小权值 */}ClosEdge[20]; /* 用普里姆算法求最小生成树时的辅助数组 */ void CreateAN(AGraph *G1){/* 构造邻接矩阵结构的图G */int i,j,k,w;printf("请输入图的顶点数和边数(空格隔开):");scanf("%d%d",&G1->v1,&G1->e1);//读入顶点数和边数for(i=1;i<=G1->v1;i++){printf("请输入图%d号元素:",i);scanf("%s",&G1->l[i].vex);//读入顶点信息}for(i=1;i<=G1->v1;i++)//初始化邻接矩阵for(j=1;j<=G1->v1;j++)G1->edge[i][j] = 9;for(k=1;k<=G1->e1;k++){printf("请输入两顶点及边的权值(空格隔开):");scanf("%d%d%d",&i,&j,&w);G1->edge[i][j]=w;G1->edge[j][i]=w;}}void PrintAN(AGraph *G1){int i,j;printf("\t=======邻接矩阵========\n");for(i=1;i<=G1->v1;i++){for(j=1;j<=G1->v1;j++)printf("%3d",G1->edge[i][j]);printf("\n");}}//输出各顶点的度数void Du(Graph G){int i,j;printf("\n<----各点度数---->\n");for(i=0;i<G->v;i++){p=G->List[i].fnext;printf("顶点%2s的度为:",G->List[i].name);j=0;while(p){j++;p=p->next;}printf("%d\n",j);}}//栈typedef struct stack{int x;struct stack *next;}stack;int push(stack *s,int i){stack *p;p=(stack *)malloc(sizeof(stack));p->x=i;p->next=s->next;s->next=p;return 1;}int pop(stack *s,int j){stack *p=s->next;//保存栈顶指针j=p->x;s->next=p->next; //将栈顶元素摘下free(p);//释放栈顶空间return j;}//拓扑排序void Topo(Graph G,stack *s){int i,k, count;int j=0;int indegree[20]={0};for(i=0;i<G->v;i++){p=G->List[i].fnext;;while(p!=NULL){indegree[p->adj]++;p=p->next;}}for(i=0;i<G->v;i++)if(indegree[i]==0)push(s,i);count=0;while(s->next!=NULL){i=pop(s,j);printf("%2s ",G->List[i].name);++count;for(p=G->List[i].fnext;p!=NULL;p=p->next){ k=p->adj;if(!(--indegree[k]))push(s,k);}}if(count<G->v) printf("有回路!");}void DFS(Graph G,int i,int flag[]){node *p;printf("%2s ",G->List[i].name);flag[i]=1;p=G->List[i].fnext;while(p){if(!flag[p->adj])DFS(G,p->adj,flag);p=p->next;}}//深度优先遍历void DFSTravel(Graph G){int i;int flag[20];//标志数组for(i=0;i<G->v;i++)flag[i]=0;for(i=0;i<G->v;i++)if(!flag[i])DFS(G,i,flag);}//建立队列typedef struct{int *elem;int front, rear;}*Queue;//队列初始化void InitQueue(Queue Q){Q->elem=(int *)malloc(20*sizeof(int));if(!Q->elem)exit(0);Q->front=Q->rear=0;}//入队void Enter(Queue Q, int e){if((Q->rear + 1)%20!= Q->front)Q->elem[Q->rear ]=e;elseprintf("队列满!\n");Q->rear=(Q->rear+1)%20;}//出队void Leave(Queue Q, int e){if(Q->rear != Q->front)e=Q->elem[Q->front];elseprintf("队列空!\n");Q->front=(Q->front+1)%20;}//广度优先遍历void BFSTravel(Graph G){Queue Q;node *p;int i,j=0;int flag[20];//标志数组Q=malloc(sizeof(20));InitQueue(Q);for(i=0;i<G->v;i++)flag[i]=0;for(i=0;i<G->v;i++)if(flag[i]==0){flag[i]=1;printf("%2s",G->List[i].name);Enter(Q,i);while(Q->front!=Q->rear){Leave(Q,j);//队头元素出队并置为jp=G->List[j].fnext;while(p!=NULL){if(flag[p->adj]==0){printf("%2s ",G->List[p->adj].name);flag[p->adj]=1;Enter(Q,p->adj);}p=p->next;}}}}int minimum(ClosEdge cl,int vnum){int i;int w,p;w=1000;for(i=1;i<=vnum;i++)if(cl[i].lowcost!=0&&cl[i].lowcost<w){w=cl[i].lowcost;p=i;}return p;}void Prim(AGraph *G1,int u){ClosEdge closedge;int i,j,k;for(j=1;j<=G1->v1;j++) /* 辅助数组初始化 */if(j!=u){closedge[j].data=u;closedge[j].lowcost=G1->edge[u][j];}closedge[u].lowcost=0; /* 初始,U={u} */for(i=1;i<G1->v1;i++){k=minimum(closedge,G1->v1); /* 求出生成树的下一个顶点*/printf("%d-----%d\n",closedge[k].data,k); /* 输出生成树的边 */closedge[k].lowcost=0; /* 第k顶点并入U集 */for(j=1;j<=G1->v1;j++) /* 新顶点并入U后,修改辅助数组*/if(G1->edge[k][j]<closedge[j].lowcost){closedge[j].data=k;closedge[j].lowcost=G1->edge[k][j];}}}//菜单列表void menu(){printf("\t**********************图的遍历问题**********************\n");printf("\t\t------- 1.建立无向邻接图---------\n");printf("\t\t------- 2.建立有向邻接图---------\n");printf("\t\t------- 3.建立无向邻接矩阵---------\n");printf("\t\t------- 4.输出各顶点的度---------\n");printf("\t\t------- 5.拓扑排序---------\n");printf("\t\t------- 6.深度优先遍历---------\n");printf("\t\t------- 7.广度优先遍历---------\n");printf("\t\t------- 8.prim算法生成最小生成树---------\n");printf("\t\t------- 9-退出---------\n");printf("\t********************************************** **********\n");}//主函数void main(){Graph G;AGraph G1;int choice,u;stack *s=(stack *)malloc(sizeof(stack));s->next =NULL;while(1){menu();printf("请输入选择:");scanf("%d",&choice);switch(choice){case1:G=CreatDG();Print(G);printf("\n\n");break;case2:G=CreatAG();Print(G);printf("\n\n");break;case3:CreateAN(&G1);PrintAN(&G1);printf("\n\n");break; case4:Du(G);printf("\n\n");break;case5:printf("拓扑排序:");Topo(G,s);printf("\n\n");break;case6:printf("深度优先遍历:");DFSTravel(G);printf("\n\n");break;case7:printf("广度优先遍历:");BFSTravel(G);printf("\n\n");break;case 8:printf("请输入起点序号:");scanf("%d",&u);printf("Prim算法:\n");Prim(&G1,u);printf("\n");break;case 9: exit(0);default: printf("输入错误,请重新输入:\n\n ");}}}六、使用说明1、程序名为实验5.exe,运行坏境为DOS.程序执行后显示如图所示:2、建立无向邻接图3、输出各顶点的度4、进行深度优先遍历5、进行广度优先遍历6、建立有向邻接图7、拓扑排序8、建立无向邻接矩阵9、prim算法生成最小生成树七、实验总结本次实验对我们来说有不小的难度,花费了很长的时间,在大家的商量讨论和共同努力下,最终完成了实验的内容,组长在此过程中很认真负责,使组员一步一步前进。

《数据结构》实验报告

《数据结构》实验报告

《数据结构》实验报告目录一、实验概述 (2)二、实验原理 (2)2.1 数据结构基本概念 (3)2.2 选择的数据结构类型 (4)2.3 实验原理说明 (5)三、实验步骤 (6)3.1 实验准备 (7)3.2 数据结构选择与实现 (7)3.2.1 数据结构类型选择 (9)3.2.2 数据结构实现细节 (9)3.3 实验功能实现 (10)3.3.1 功能一 (11)3.3.2 功能二 (12)四、实验结果与分析 (13)4.1 实验数据 (15)4.2 结果展示 (16)4.2.1 结果一展示 (17)4.2.2 结果二展示 (17)4.3 结果分析 (18)4.3.1 结果一分析 (19)4.3.2 结果二分析 (20)五、实验总结与讨论 (22)5.1 实验总结 (23)5.2 实验中遇到的问题及解决方法 (24)5.3 对数据结构的认识与体会 (25)5.4 对实验教学的建议 (27)一、实验概述本次实验旨在通过实际操作,加深对《数据结构》课程中所学理论知识的理解和掌握。

实验内容围绕数据结构的基本概念、常用算法以及在实际应用中的实现进行设计。

通过本次实验,学生将能够:理解并掌握线性表、栈、队列、链表、树、图等基本数据结构的特点和适用场景。

掌握常用的数据结构操作算法,如插入、删除、查找等,并能够运用这些算法解决实际问题。

学习使用C++、或其他编程语言实现数据结构的操作,提高编程能力和算法设计能力。

本次实验报告将对实验的目的、内容、步骤、结果及分析等方面进行详细阐述,旨在通过实验过程的学习,提高学生对数据结构理论知识的理解和应用能力。

二、实验原理数据结构的基本概念:介绍数据结构的基本定义,包括数据元素、数据集合、数据关系等基本概念,以及数据结构的三要素:逻辑结构、存储结构和运算。

栈和队列:介绍栈和队列的定义、特点、基本运算及其在算法设计中的重要性。

树和二叉树:讲解树的基本概念、二叉树的结构特点、遍历方法、二叉搜索树及其在数据检索中的应用。

国开数据结构本提交实验报告

国开数据结构本提交实验报告

国开数据结构本提交实验报告一、引言数据结构是计算机科学中的重要概念,包括各种基本数据结构(如数组、链表、堆栈、队列、树、图等)和它们之间的关系。

数据结构的选择和设计直接影响了算法的效率和程序的质量。

国开数据结构本是一门培养学生具备良好数据结构理论和实践能力的课程。

本实验报告旨在讨论数据结构本的实验报告提交要求和相关的实验内容。

二、实验报告提交要求为了能够及时了解学生的学习情况和掌握学生实际编程能力,国开教务部门对数据结构本的实验报告提出了一些具体的要求。

2.1 实验题目和目标每个实验的实验题目需要明确指定,并包含实验的目标和要求。

实验题目应具体、明确,以便让学生清楚地了解实验的内容和目标。

2.2 实验环境和工具学生需要在指定的实验环境下进行实验,教务部门会明确指出所需要使用的工具和软件版本。

学生需要自行安装和配置相关环境和工具,并确保实验环境正常运行。

2.3 实验报告格式和要求实验报告需要按照教务部门给出的格式进行书写,包括实验报告的标题、作者、时间、实验目的、实验内容、实验步骤、实验结果和实验总结等部分。

实验报告应具备良好的结构和逻辑,清晰地展示实验的过程和结果。

2.4 实验代码和文件提交学生需要按要求将实验代码和文件提交给教务部门,以便教师进行批改和评分。

学生需要确保代码和文件的准确性和完整性,并按要求命名和打包提交。

三、实验内容国开数据结构本的实验内容丰富多样,涉及到各种基本数据结构和相关算法的实现和应用。

以下列举了部分实验内容:3.1 线性表的实现线性表是数据元素的一个有限序列,包括线性顺序表和线性链表。

学生需要实现线性表的基本操作,如插入、删除、修改和查找等。

实验目标是掌握线性表的存储结构和基本操作。

3.2 栈和队列的实现栈和队列都是重要的数据结构,栈具有后进先出(LIFO)的特性,队列具有先进先出(FIFO)的特性。

学生需要实现栈和队列的基本操作,如进栈、出栈、入队和出队等。

实验目标是理解栈和队列的特性和应用。

数据结构实验报告实验5

数据结构实验报告实验5

数据结构实验报告实验5一、实验目的本次实验的主要目的是深入理解和掌握常见的数据结构,如链表、栈、队列、树和图等,并通过实际编程实现,提高对数据结构的操作和应用能力。

同时,培养解决实际问题的思维和编程能力,提高代码的可读性、可维护性和效率。

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

三、实验内容1、链表的基本操作创建链表插入节点删除节点遍历链表2、栈的实现与应用用数组实现栈用链表实现栈栈的应用:括号匹配3、队列的实现与应用用数组实现队列用链表实现队列队列的应用:排队模拟4、二叉树的遍历前序遍历中序遍历后序遍历5、图的表示与遍历邻接矩阵表示法邻接表表示法深度优先遍历广度优先遍历四、实验步骤1、链表的基本操作创建链表:首先定义一个链表节点结构体,包含数据域和指向下一个节点的指针域。

然后通过动态内存分配创建链表节点,并将节点逐个连接起来,形成链表。

插入节点:根据插入位置的不同,分为在表头插入、在表尾插入和在指定位置插入。

在指定位置插入时,需要先找到插入位置的前一个节点,然后进行节点的连接操作。

删除节点:同样需要根据删除位置的不同进行处理。

删除表头节点时,直接将头指针指向下一个节点;删除表尾节点时,找到倒数第二个节点,将其指针置为空;删除指定位置节点时,找到要删除节点的前一个节点,然后调整指针。

遍历链表:通过从链表头开始,依次访问每个节点,输出节点的数据。

2、栈的实现与应用用数组实现栈:定义一个固定大小的数组作为栈的存储空间,同时用一个变量记录栈顶位置。

入栈操作时,先判断栈是否已满,如果未满则将元素放入栈顶位置,并更新栈顶位置;出栈操作时,先判断栈是否为空,如果不空则取出栈顶元素,并更新栈顶位置。

用链表实现栈:与链表的操作类似,将新元素添加在链表头部作为栈顶。

括号匹配:输入一个包含括号的字符串,使用栈来判断括号是否匹配。

遇到左括号入栈,遇到右括号时与栈顶的左括号进行匹配,如果匹配成功则出栈,否则括号不匹配。

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

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

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

电大数据结构实验报告

电大数据结构实验报告

实验一单链表的插入,删除,初始化一、实验环境Windows xp 操作系统 Turbo C 2.0二、实验目的通过对链表的实际操作,巩固链表的基本知识,关键是掌握指针的操作。

三、实验内容生成一个头指针是head的单链表,然后对该链表进行插入和删除运算。

四、实验要求1 编写程序生成一个单链表;2 插入、删除用子程序实现;3 输出每次运算前后的链表,进行比较与分析。

五、实验步骤#include <stdlib.h>#include <stdio.h>#define NULL 0typedef struct LNode{int data;struct LNode *next;}LNode, *LinkList;//假设下面的单链表均为带头结点。

void CreatLinkList(LinkList &head,int j){//建立一个单链表L;,数据为整数,数据由键盘随机输入。

int i;LinkList p,q;head=(LinkList)malloc(sizeof(LNode));head->next=NULL;q=head;printf("在单链表内输入整数:\n");for(i=0;i<j;i++){ p=(LinkList)malloc(sizeof(LNode));scanf("%d",&p->data);p->next=q->next;q->next=p;q=p;}}int PrintLinkList(LinkList &L){//输出单链表L的数据元素LNode *p;p=L->next;if(L->next==NULL){printf("链表没有元素!\n");return 0;}printf("单链表的数据元素为:");while(p){printf("%d ",p->data);p=p->next;}printf("\n");//return 1;}void LinkListLengh(LinkList &L){//计算单链表L的数据元素个数。

2023年数据结构实验报告中央电大

2023年数据结构实验报告中央电大

实验报告(五)实验名称查找使用重要设备PC,VC++6.0实验规定1.掌握折半查找的算法环节和实现方法;2.掌握二叉排序树的性质、构造方法;3.按实验内容完毕相关程序,并用实例进行测试,验证其对的性。

实验报告内容:实验5.1 折半查找设计程序代码如下:#include<stdio.h>#include<string.h>#define N 5struct student{char name[10];float avg;}void insort(struct student s[],int n){int low,hight,mid,k;char y[10];float x;low=1;hight=n;strcpy(y,s[0].name );x=s[0].avg ;while(low<=hight){mid=(low+hight)/2;if(x>s[mid].avg )hight=mid-1;elselow=mid+1;}for(k=0;k<low-1;k++){strcpy(s[k].name,s[k+1].name) ;s[k].avg =s[k+1].avg ;}printf("%d",low);strcpy(s[low-1].name ,y) ;s[low-1].avg =x;}void main(){Struct student a[N]={{"caozh",96},{"cheng",95},{"zhao",93},{"wang",92},{"chen",91}};struct student stu[N];int i;for(i=0;i<N;i++)stu[i+1]=a[i];printf("初始%d 位同学的信息表\n",MAX);printf("排名姓名平均分数\n");for(i=1;i<=N;i++)printf("%d: %6s %3.2f\n",i,stu[i].name,stu[i].avg);printf("\n");printf("\n");printf("请输入学生的姓名:");scanf("%s",stu[0].name );printf("\n");printf("请输入平均成绩:");scanf("%f",&stu[0].avg );printf("\n");insort(stu,N);printf("折半排序后同学的信息表\n",MAX);printf("排名姓名平均分数\n");for(i=0;i<=N;i++){printf("%d: %6s %3.2f\n",i+1,stu[i].name,stu[i].avg);}printf("\n");}程序运营结果如下:实验5.2 二叉排序树的建立 设计程序代码如下:#include<stdio.h>#include<stdlib.h>#define MAX 5typedef struct Bnode{int key;struct Bnode *left;struct Bnode *right;}Bnode;Bnode * btInsert(int x,Bnode *root);void Inorder(Bnode *root);void main(){int i;int a[MAX]={60,40,70,20,80};Bnode * root=NULL;printf("按关键字序列建立二叉排序树\n");for(i=0;i<MAX;i++) printf("%d ",a[i]);printf("\n");for(i=0;i<MAX;i++) root=btInsert(a[i],root);printf("中序遍历的二叉排序树\n");Inorder(root);printf("\n");}Bnode * btInsert(int x,Bnode * root) {Bnode *p,*q;int flag=0;p=(Bnode *)malloc(sizeof(Bnode));p->key=x;p->right=p->left=NULL;if(root==NULL){ root=p; return p; }q=root;while(flag==0){if(q->key>x){if(q->left!=NULL)q=q->left;else{q->left=p;flag=1;}}else{if(q->right!=NULL)q=q->right;else{q->right=p;flag=1;}}}return root;}void Inorder(Bnode *root){if(root!=NULL) {Inorder(root->left);printf("%d ",root->key);Inorder(root->right);}}程序运营结果如下:。

数据结构课程实验报告

数据结构课程实验报告

数据结构课程实验报告一、实验目的。

本次实验旨在通过对数据结构课程所学知识的应用,加深对数据结构相关算法和数据操作的理解,提高学生的编程能力和实际应用能力。

二、实验内容。

1. 实现顺序表、链表、栈、队列等数据结构的基本操作;2. 设计并实现数据结构相关算法,如查找、排序等;3. 进行实验数据的输入、输出和结果展示;4. 对实验结果进行分析和总结。

三、实验过程。

1. 针对顺序表、链表、栈、队列等数据结构,首先进行了相关操作的实现。

在实现过程中,需要考虑数据结构的特点和操作规则,确保操作的正确性和高效性。

2. 针对数据结构相关算法,如查找、排序等,设计并实现了相应的算法。

在实现过程中,需要考虑算法的时间复杂度和空间复杂度,确保算法的效率和稳定性。

3. 进行了实验数据的输入、输出和结果展示。

通过编写测试用例,对实现的数据结构和算法进行了测试,验证其正确性和可靠性。

4. 对实验结果进行了分析和总结。

通过对实验数据和测试结果的分析,总结了实验中遇到的问题和解决方法,以及实验的收获和体会。

四、实验结果。

经过实验测试,实现的数据结构和算法均能正确运行并得到预期的结果。

通过实验,加深了对数据结构相关知识的理解,提高了编程能力和实际应用能力。

五、实验总结。

本次实验使我对数据结构相关知识有了更深入的理解,同时也提高了我的编程能力和实际应用能力。

在未来的学习和工作中,我将继续努力,不断提升自己的能力,为将来的发展打下坚实的基础。

六、实验感想。

通过本次实验,我深刻感受到了数据结构在实际应用中的重要性,也意识到了自己在数据结构方面的不足之处。

在今后的学习和工作中,我将更加努力地学习和应用数据结构知识,不断提高自己的能力,为未来的发展做好充分的准备。

七、参考文献。

1. 《数据结构与算法分析》。

2. 《C语言程序设计》。

3. 《数据结构课程实验指导书》。

以上就是本次数据结构课程实验的报告内容,希望能对大家有所帮助。

感谢您的阅读!。

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

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

一、实验背景随着计算机技术的飞速发展,数据结构作为计算机科学的重要基础,已经成为现代软件开发和数据处理的关键技术。

为了提高学生的数据结构应用能力,我们学校开设了数据结构实验实训课程。

本课程旨在通过实验实训,使学生深入理解数据结构的基本概念、性质、应用,掌握各种数据结构的实现方法,提高编程能力和解决实际问题的能力。

二、实验内容本次数据结构实验实训主要包括以下内容:1. 数据结构的基本概念和性质通过实验,使学生掌握线性表、栈、队列、串、树、图等基本数据结构的概念、性质和应用场景。

2. 数据结构的存储结构通过实验,使学生熟悉线性表、栈、队列、串、树、图等数据结构的顺序存储和链式存储方法,了解不同存储结构的优缺点。

3. 数据结构的操作算法通过实验,使学生掌握线性表、栈、队列、串、树、图等数据结构的插入、删除、查找、遍历等基本操作算法。

4. 数据结构的实际应用通过实验,使学生了解数据结构在各个领域的应用,如网络数据结构、数据库数据结构、人工智能数据结构等。

三、实验过程1. 实验准备在实验开始前,教师首先对实验内容进行讲解,使学生了解实验目的、实验步骤和实验要求。

同时,教师要求学生预习实验内容,熟悉相关理论知识。

2. 实验实施(1)线性表:通过实现线性表的顺序存储和链式存储,实现插入、删除、查找等操作。

(2)栈和队列:通过实现栈和队列的顺序存储和链式存储,实现入栈、出栈、入队、出队等操作。

(3)串:通过实现串的顺序存储和链式存储,实现串的插入、删除、查找等操作。

(4)树:通过实现二叉树、二叉搜索树、平衡二叉树等,实现树的插入、删除、查找、遍历等操作。

(5)图:通过实现图的邻接矩阵和邻接表存储,实现图的插入、删除、查找、遍历等操作。

3. 实验总结实验结束后,教师组织学生进行实验总结,总结实验过程中的收获和不足,提出改进措施。

四、实验成果通过本次数据结构实验实训,学生取得了以下成果:1. 掌握了数据结构的基本概念、性质和应用场景。

数据结构实验报告5

数据结构实验报告5

数据结构实验报告5正文:1. 引言本实验报告旨在介绍数据结构的相关概念和算法,并通过具体案例分析展示其应用。

该报告包含以下章节:背景知识、实验目标、方法与步骤、结果与讨论以及总结。

2. 背景知识在开始进行实验之前,我们需要了解一些基础的数据结构概念,如数组、链表等。

此外还需掌握常见的排序算法(例如冒泡排序和快速排序)以及查找算法(例如二分查找)。

这些基础知识将为后续实验提供必要支持。

3. 实验目标本次实验有两个主要目标:- 理解并独立编写各种数据结构;- 探索不同类型的问题,并使用适当的数据结构来解决它们;4. 方法与步骤4.1 数据集准备阶段:首先,我们需要选择一个合适且真是性质良好地测试样例作为输入。

然后根据所选题型设计相应规模大小或特殊情形下得到期望输出值。

最后对于每组样例都能够正确运行程序代码而产生预期答案即可进入下一环节。

4.2 编码阶段:按照给定任务的要求,使用合适的数据结构和算法编写代码。

确保程序能够正确地处理各种输入情况,并返回预期结果。

4.3 测试与分析阶段:对于每个实验样例,我们需要进行测试以验证其准确性。

通过比较输出结果与预期答案来判断是否成功解决问题。

同时还需考虑时间复杂度、空间复杂度等因素评估所设计算法的效率及优劣程度。

5. 结果与讨论在本节中将展示并讨论实验过程中得到的具体结果。

包括但不限于:- 算法运行时间;- 内存占用情况;- 输出正确性;6. 总结总结报告内容,并回顾整个实验流程和成果。

指出可能存在改进之处或者未来可以深入研究探索领域。

附件:(请参见相关文件)注释:1)数组:一组连续内存单元集合,在计算机科学中广泛应用。

2)链表:由节点组成线性序列,其中每一个节点都连接着下一个节点地址信息。

(中央电大)数据结构实验报告

(中央电大)数据结构实验报告

中央广播电视大学实验报告(学科:数据结构)姓名单位班级学号实验日期成绩评定教师签名批改日期实验名称:实验一线性表线性表的链式存储结构【问题描述】某项比赛中,评委们给某参赛者的评分信息存储在一个带头结点的单向链表中,编写程序:(1)显示在评分中给出最高分和最低分的评委的有关信息(姓名、年龄、所给分数等)。

(2)在链表中删除一个最高分和一个最低分的结点。

(3)计算该参赛者去掉一个最高分和一个最低分后的平均成绩。

【基本要求】(1)建立一个评委打分的单向链表;(2)显示删除相关结点后的链表信息。

(3)显示要求的结果。

【实验步骤】(1)运行 PC中的 Microsoft Visual C++ 6.0 程序,(2)点击“文件”→“新建”→对话窗口中“文件”→“ c++Source File ”→在“文件名”中输入“ X1.cpp ”→在“位置”中选择储存路径为“桌面”→“确定”,(3)输入程序代码,程序代码如下 :#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <iostream.h>#include <conio.h>#define NULL 0#define PWRS 5 // 定义评委人数struct pw // 定义评委信息{ char name[6] 。

float score。

int age。

} 。

typedef struct pw PW 。

struct node // 定义链表结点{struct pw data 。

struct node * next 。

} 。

typedef struct node NODE 。

NODE *create(int m) 。

//创建单链表int calc(NODE *h) 。

//计算、数据处理void print(NODE *h)。

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

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

数据结构实验报告(实验)数据结构实验报告(实验)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 许可协议:指允许他人在一定条件下使用自己的知识产权的协议。

实训报告总结数据结构(3篇)

实训报告总结数据结构(3篇)

第1篇一、实训背景随着计算机技术的飞速发展,数据结构作为计算机科学中的基础学科,已经成为计算机专业学生必须掌握的知识。

为了提高我们的编程能力和解决实际问题的能力,我们进行了为期一个月的数据结构实训。

本次实训旨在通过实际操作,加深对数据结构理论知识的理解,提高编程实践能力。

二、实训内容本次实训主要包括以下内容:1. 线性表2. 栈与队列3. 串4. 树与二叉树5. 图6. 查找技术7. 排序技术三、实训过程1. 线性表线性表是数据结构中最基本的数据结构之一,包括顺序表和链表两种形式。

实训过程中,我们首先学习了顺序表的基本操作,如插入、删除、查找等。

然后,我们通过实现链表,掌握了指针的运用,进一步理解了线性表的数据存储方式。

2. 栈与队列栈是一种后进先出(LIFO)的数据结构,队列是一种先进先出(FIFO)的数据结构。

实训中,我们实现了栈和队列的顺序存储和链式存储,并分别实现了入栈、出栈、入队、出队等基本操作。

3. 串串是由零个或多个字符组成的有限序列。

实训中,我们学习了串的基本操作,如连接、求子串、替换等。

通过实现串的操作,我们加深了对字符串处理的理解。

4. 树与二叉树树是一种层次结构,由节点组成。

实训中,我们学习了二叉树的遍历、查找、插入、删除等操作。

通过实现二叉树,我们掌握了树状数据结构的存储方式。

5. 图图是一种表示对象及其关系的数据结构。

实训中,我们学习了图的邻接矩阵和邻接表存储方式,并实现了图的遍历、最短路径等算法。

6. 查找技术查找技术是数据结构中的重要内容。

实训中,我们学习了顺序查找、二分查找、散列查找等查找算法,并通过实现这些算法,提高了查找效率。

7. 排序技术排序是将一组无序数据变为有序数据的过程。

实训中,我们学习了冒泡排序、选择排序、插入排序、快速排序等排序算法,并通过实现这些算法,提高了排序效率。

四、实训成果1. 理论知识方面:通过本次实训,我们对数据结构的基本概念、基本原理有了更加深入的理解。

国开数据结构(本)数据结构课程实验报告

国开数据结构(本)数据结构课程实验报告

国开数据结构(本)数据结构课程实验报告1. 实验目的本次实验的主要目的是通过实际操作,掌握数据结构的基本概念、操作和应用。

通过对实验内容的了解和实际操作,达到对数据结构相关知识的深入理解和掌握。

2. 实验工具与环境本次实验主要使用C++语言进行编程,需要搭建相应的开发环境。

实验所需的工具和环境包括:C++编译器、集成开发环境(IDE)等。

3. 实验内容本次实验主要包括以下内容:3.1. 实现顺序存储结构的线性表3.2. 实现链式存储结构的线性表3.3. 实现栈和队列的顺序存储结构和链式存储结构3.4. 实现二叉树的顺序存储结构和链式存储结构3.5. 实现图的邻接矩阵和邻接表表示4. 实验步骤实验进行的具体步骤如下:4.1. 实现顺序存储结构的线性表- 定义数据结构- 实现插入、删除、查找等操作4.2. 实现链式存储结构的线性表- 定义数据结构- 实现插入、删除、查找等操作4.3. 实现栈和队列的顺序存储结构和链式存储结构- 定义数据结构- 实现入栈、出栈、入队、出队操作4.4. 实现二叉树的顺序存储结构和链式存储结构- 定义数据结构- 实现插入、删除、查找等操作4.5. 实现图的邻接矩阵和邻接表表示- 定义数据结构- 实现插入、删除、查找等操作5. 实验结果与分析通过对以上实验内容的实现和操作,得到了以下实验结果与分析: 5.1. 顺序存储结构的线性表- 实现了线性表的插入、删除、查找等操作- 通过实验数据进行性能分析,得出了相应的性能指标5.2. 链式存储结构的线性表- 实现了线性表的插入、删除、查找等操作- 通过实验数据进行性能分析,得出了相应的性能指标5.3. 栈和队列的顺序存储结构和链式存储结构- 实现了栈和队列的入栈、出栈、入队、出队操作- 通过实验数据进行性能分析,得出了相应的性能指标5.4. 二叉树的顺序存储结构和链式存储结构- 实现了二叉树的插入、删除、查找等操作- 通过实验数据进行性能分析,得出了相应的性能指标5.5. 图的邻接矩阵和邻接表表示- 实现了图的插入、删除、查找等操作- 通过实验数据进行性能分析,得出了相应的性能指标6. 总结与展望通过本次数据结构课程的实验,我们深入了解并掌握了数据结构的基本概念、操作和应用。

最新电大《数据结构》实验报告

最新电大《数据结构》实验报告

数据结构形成性考核册实验名称:实验一线性表线性表的链式存储结构【问题描述】某项比赛中,评委们给某参赛者的评分信息存储在一个带头结点的单向链表中,编写程序:(1)显示在评分中给出最高分和最低分的评委的有关信息(姓名、年龄、所给分数等)。

(2)在链表中删除一个最高分和一个最低分的结点。

(3)计算该参赛者去掉一个最高分和一个最低分后的平均成绩。

【基本要求】(1)建立一个评委打分的单向链表;(2)显示删除相关结点后的链表信息。

(3)显示要求的结果。

【实验步骤】(1)运行PC中的Microsoft Visual C++ 6.0程序,(2)点击“文件”→“新建”→对话窗口中“文件”→“c++ Source File”→在“文件名”中输入“X1.cpp”→在“位置”中选择储存路径为“桌面”→“确定”,(3)输入程序代码,程序代码如下:#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <iostream.h>#include <conio.h>#define NULL 0#define PWRS 5 //定义评委人数struct pw //定义评委信息{ char name[6];float score;int age;};typedef struct pw PW;struct node //定义链表结点{struct pw data;struct node * next;};typedef struct node NODE;NODE *create(int m); //创建单链表int calc(NODE *h); //计算、数据处理void print(NODE *h); //输出所有评委打分数据void input(NODE *s);//输入评委打分数据void output(NODE *s);//输出评委打分数据void main(){NODE *head;float ave=0;float sum=0;head=create(PWRS);printf("所有评委打分信息如下:\n");print(head);//显示当前评委打分calc(head);//计算成绩printf("该选手去掉1 最高分和1 最低分后的有效评委成绩:\n");print(head);//显示去掉极限分后的评委打分}void input(NODE *s){printf("请输入评委的姓名: ");scanf("%S",&s->);printf("年龄: ");scanf("%d",&s->data.age);printf("打分: ");scanf("%f",&s->data.score);printf("\n");}void output(NODE *s){printf("评委姓名: %8s ,年龄: %d,打分: %2.2f\n",s->,s->data.age,s->data.score); }NODE *create(int m){NODE *head,*p,*q;int i;p=(NODE*)malloc(sizeof(NODE));head=p;q=p;p->next=NULL;for(i=1;i<=m;i++){p=(NODE*)malloc(sizeof(NODE));input(p);p->next=NULL;q->next=p;q=p;}return (head);}void print(NODE *h){ for(int i=1;((i<=PWRS)&&(h->next!=NULL));i++){h=h->next;output(h); }printf("\n");}int calc(NODE *h){NODE *q,*p,*pmin,*pmax;float sum=0;float ave=0;p=h->next; //指向首元结点pmin=pmax=p; //设置初始值sum+=p->data.score;p=p->next;for(;p!=NULL;p=p->next){if(p->data.score>pmax->data.score) pmax=p;if(p->data.score<pmin->data.score) pmin=p;sum+=p->data.score;}cout<<"给出最高分的评委姓名:"<<pmax-><<"年龄:"<<pmax->data.age<<"分值:"<<pmax->data.score<<endl;cout<<"给出最低分的评委姓名:"<<pmin-><<"年龄:"<<pmin->data.age<<"分值:"<<pmin->data.score<<endl;printf("\n");sum-=pmin->data.score;sum-=pmax->data.score;for (q=h,p=h->next;p!=NULL;q=p,p=p->next){if(p==pmin){q->next=p->next; p=q;}//删除最低分结点if(p==pmax) {q->next=p->next; p=q;}//删除最高分结点}ave=sum/(PWRS-2);cout<<"该选手的最后得分是:"<<ave<<endl;return 1;}程序运行结果如下:线性表的顺序存储结构【问题描述】用顺序表A记录学生的信息,编写程序:(1)将A表分解成两个顺序表B和C,使C表中含原A表中性别为男性的学生,B表中含原表中性别为女性的学生,要求学生的次序与原A表中相同。

数据结构 实验报告五

数据结构 实验报告五

实验小结:通过本次实验,我学会了掌握查找的不同方法,并能用高级语言 实现查找算法;基本上掌握顺序表的查找方法和有序顺序表的折半查找算法以及 静态查找树的构造方法和查找算法;对于二叉排序树的生成、插入、删除、输出 运算有了初步的了解。
教师评语: 1. 实验结果及解释:( 准确合理、 较准确、 不合理 );占 30% 2. 实验步骤的完整度:( 完整、 中等、 不完整 );占 30% 3. 实验程序的正确性:( 很好、 较好、 中等、 较差、 很差 );占 30% 4. 卷面整洁度:( 很好、 较好、 中等、 较差、 很差 );占 10%
if(cmd=='c'||cmd=='C')
{cout<<"请输入你所要创建的二叉树的结点的值,以-1 结束:\n";
root=creatut<<"中序遍历二叉树:"<<endl;
inorder_btree(root);
cout<<"\n 请选择你要对这棵二叉树所做的操作:查找:S.插入:I.删除:D.退出:Q"<<endl;
{BSTree t=NULL;
KeyType key;
cin>>key;
while(key!=-1)
{t=insertBST(t,key);
cin>>key;}
return t;}
void inorder_btree(BSTree root)
{BSTree p=root;
if(p!=NULL){
inorder_btree(p->left );
else return searchBST(t->right,key); }

国开数据结构(本)数据结构课程实验报告(一)

国开数据结构(本)数据结构课程实验报告(一)

国开数据结构(本)数据结构课程实验报告一、实验目的本实验旨在帮助学生掌握数据结构的基本概念,熟练掌握数据结构的基本操作,进一步提高学生的编程能力和数据处理能力。

二、实验内容1. 数据结构的基本概念在实验中,我们首先介绍了数据结构的基本概念,包括数据的逻辑结构和物理结构,以及数据结构的分类和应用场景。

2. 数据结构的基本操作接着,我们介绍了数据结构的基本操作,包括插入、删除、查找等操作,通过具体的案例和代码演示,让学生理解和掌握这些基本操作的实现原理和方法。

3. 编程实践在实验的第三部分,我们组织学生进行数据结构的编程实践,要求学生通过实际编写代码来实现各种数据结构的基本操作,加深对数据结构的理解和掌握。

三、实验过程1. 数据结构的基本概念在本部分,我们通过课堂讲解和案例分析的方式,向学生介绍了数据结构的基本概念,包括线性结构、树形结构、图形结构等,让学生对数据结构有一个整体的认识。

2. 数据结构的基本操作在这一部分,我们通过具体的案例和代码演示,向学生介绍了数据结构的基本操作,包括插入、删除、查找等操作的实现原理和方法,让学生掌握这些基本操作的具体实现。

3. 编程实践最后,我们组织学生进行数据结构的编程实践,要求他们通过实际编写代码来实现各种数据结构的基本操作,加深对数据结构的理解和掌握,同时也提高了他们的编程能力和数据处理能力。

四、实验结果与分析通过本次实验,学生们对数据结构有了更深入的理解和掌握,他们能够熟练地使用各种数据结构的基本操作,编写出高效、稳定的代码,提高了他们的编程能力和数据处理能力。

五、实验总结本实验对于学生掌握数据结构的基本概念和操作起到了很好的辅助作用,通过实际的编程实践,学生们不仅加深了对数据结构的理解和掌握,同时也提高了他们的编程能力和数据处理能力。

这对于他们今后的学习和工作都具有重要的意义。

六、参考文献1. 《数据结构与算法分析》2. 《数据结构(C语言版)》3. 《数据结构与算法》以上是我对“国开数据结构(本)数据结构课程实验报告”的详细报告,希望能够满足您的要求。

数据结构实验报告实验5

数据结构实验报告实验5

数据结构实验报告实验5一、实验目的本次实验的主要目的是深入理解和掌握常见的数据结构,通过实际编程实现和操作,提高对数据结构的应用能力和编程技巧。

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

三、实验内容1、线性表的基本操作实现线性表的创建、插入、删除、查找等基本操作。

对不同操作的时间复杂度进行分析和比较。

2、栈和队列的应用利用栈实现表达式求值。

使用队列模拟银行排队系统。

3、二叉树的遍历实现二叉树的先序、中序、后序遍历算法。

分析不同遍历算法的特点和应用场景。

4、图的表示和遍历采用邻接矩阵和邻接表两种方式表示图。

实现图的深度优先遍历和广度优先遍历算法。

四、实验步骤及结果1、线性表的基本操作首先,定义了一个线性表的结构体,包含数据域和指针域。

创建线性表时,动态分配内存空间,并初始化表头和表尾指针。

插入操作分为表头插入、表尾插入和指定位置插入。

在指定位置插入时,需要先找到插入点的前一个节点,然后进行插入操作。

删除操作同样需要找到要删除节点的前一个节点,然后释放删除节点的内存空间,并调整指针。

查找操作通过遍历线性表,逐个比较数据值来实现。

经过测试,不同操作的时间复杂度如下:创建操作的时间复杂度为 O(1)。

插入操作在表头和表尾插入的时间复杂度为 O(1),在指定位置插入的时间复杂度为 O(n)。

删除操作的时间复杂度为 O(n)。

查找操作的平均时间复杂度为 O(n)。

2、栈和队列的应用表达式求值:将表达式转换为后缀表达式,然后利用栈进行计算。

遇到操作数则入栈,遇到操作符则从栈中弹出两个操作数进行计算,并将结果入栈。

最后栈顶元素即为表达式的结果。

银行排队系统:使用队列模拟客户的排队过程。

客户到达时入队,服务窗口空闲时从队列头部取出客户进行服务。

实验结果表明,栈和队列能够有效地解决相关问题,提高程序的效率和可读性。

3、二叉树的遍历先序遍历:先访问根节点,然后递归遍历左子树,最后递归遍历右子树。

国开(电大)数据结构课程实验报告5

国开(电大)数据结构课程实验报告5

数据结构课程实验报告2、创建完毕后OS Lab 会自动打开这个新建的项目。

在“项目管理器”窗口中,树的根节点表示项目,可以看到项目的名称是“console”,各个子节点是项目包含的文件夹或者文件。

此项目的源代码主要包含一个头文件“console.h”和一个C语言源文件“console.c”,如图2所示。

2.2 生成项目在“生成”菜单中选择“生成项目”。

在项目的生成过程中,“输出”窗口会实时显示生成的进度和结果。

如果源代码中不包含语法错误,会在最后提示生成成功,如图3所示。

2.3 执行项目在OS Lab中选择“调试”菜单中的“开始执行(不调试)”,就可以执行此控制台应用程序。

启动执行后会弹出一个Windows控制台窗口,显示控制台应用程序输出的内容。

按任意键即可关闭此控制台窗口,结果如图4。

2.4 调试项目1、调试功能之前,对例子程序进行必要的修改,步骤如下:(1)右键点击“项目管理器”窗口中的“源文件”文件夹节点,在弹出的快捷菜单中选择“添加”中的“添加新文件”。

(2)在弹出的“添加新文件”对话框中选择“C 源文件”模板。

(3)在“名称”中输入文件名称“func”。

(4)点击“添加”按钮添加并自动打开文件func.c,此时的“项目管理器”窗口如图5所示。

2、在func.c 文件中添加函数:int Func (int n) {n = n + 1; return n; }3、点击源代码编辑器上方的console.c标签,切换到console.c文件。

将main 函数修改为:int main (int argc, char* argv[]) {int Func (int n); // 声明Func函数int n = 0;n = Func(10);printf ("Hello World!\n");return 0;}4、代码修改完毕后按F7(“生成项目”功能的快捷键)。

注意查看“输出”窗口中的内容,如果代码中存在语法错误,就根据提示进行修改,直到成功生成项目,结果如图6所示。

数据结构实习报告范文

数据结构实习报告范文

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

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

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

二、实习内容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)。

中央广播电视大学实验报告(学科:数据结构)姓名单位班级学号实验日期成绩评定教师签名批改日期
实验名称:实验五查找
5.1 折半查找
【问题描述】
某班学生成绩信息表中,每个学生的记录已按平均成绩由高到低排好序,后来发现某个学生的成绩没有登记到信息表中,使用折半查找法把该同学的记录插入到信息表中,使信息表中的记录仍按平均成绩有序。

【基本信息】
(1)建立现有学生信息表,平均成绩已有序。

(2)输入插入学生的记录信息。

(3)用折半查找找到插入位置,并插入记录。

【测试数据】
自行设计。

【实验提示】
(1)用结构数组存储成绩信息表。

(2)对记录中的平均成绩进行折半查找。

5.2 二叉排序树的建立
【问题描述】
参阅相关资料,阅读建立二叉排序树的程序。

【基本要求】
(1)掌握建立二叉排序树的原理和方法。

(2)能跟踪程序人工建立二叉排序树。

实验报告内容:
实验5.1 折半查找
设计程序代码如下:
#include<stdio.h>
#include<string.h>
#define N 5
struct student{
char name[10];
float avg;
}
void insort(struct student s[],int n)
{
int low,hight,mid,k;
char y[10];
float x;
low=1;
hight=n;
strcpy(y,s[0].name );
x=s[0].avg ;
while(low<=hight)
{
mid=(low+hight)/2;
if(x>s[mid].avg )
hight=mid-1;
else
low=mid+1;
}
for(k=0;k<low-1;k++){
strcpy(s[k].name,s[k+1].name) ;
s[k].avg =s[k+1].avg ;
}
printf("%d",low);
strcpy(s[low-1].name ,y) ;
s[low-1].avg =x;
}
void main()
{
Struct student a[N]=
{{"caozh",96},{"cheng",95},{"zhao",93},{"wang",92},{"chen",91}};
struct student stu[N];
int i;
for(i=0;i<N;i++)
stu[i+1]=a[i];
printf("初始%d 位同学的信息表\n",MAX);
printf("排名姓名平均分数\n");
for(i=1;i<=N;i++)
printf("%d: %6s %3.2f\n",i,stu[i].name,stu[i].avg);
printf("\n");
printf("\n");
printf("请输入学生的姓名:");
scanf("%s",stu[0].name );
printf("\n");
printf("请输入平均成绩:");
scanf("%f",&stu[0].avg );
printf("\n");
insort(stu,N);
printf("折半排序后同学的信息表\n",MAX);
printf("排名姓名平均分数\n");
for(i=0;i<=N;i++)
{
printf("%d: %6s %3.2f\n",i+1,stu[i].name,stu[i].avg);
}
printf("\n");
}
●程序运行结果如下:
实验5.2 二叉排序树的建立
●设计程序代码如下:
#include<stdio.h>
#include<stdlib.h>
#define MAX 5
typedef struct Bnode
{
int key;
struct Bnode *left;
struct Bnode *right;
}Bnode;
Bnode * btInsert(int x,Bnode *root);
void Inorder(Bnode *root);
void main()
{
int i;
int a[MAX]={60,40,70,20,80};
Bnode * root=NULL;
printf("按关键字序列建立二叉排序树\n");
for(i=0;i<MAX;i++) printf("%d ",a[i]);
printf("\n");
for(i=0;i<MAX;i++) root=btInsert(a[i],root);
printf("中序遍历的二叉排序树\n");
Inorder(root);
printf("\n");
}
Bnode * btInsert(int x,Bnode * root)
{
Bnode *p,*q;
int flag=0;
p=(Bnode *)malloc(sizeof(Bnode));
p->key=x;
p->right=p->left=NULL;
if(root==NULL)
{ root=p; return p; }
q=root;
while(flag==0)
{
if(q->key>x)
{
if(q->left!=NULL)
q=q->left;
else
{
q->left=p;
flag=1;
}
}
else
{
if(q->right!=NULL)
q=q->right;
else
{
q->right=p;
flag=1;
}
}
}
return root;
}
void Inorder(Bnode *root)
{
if(root!=NULL) {
Inorder(root->left);
printf("%d ",root->key);
Inorder(root->right);
}
}
程序运行结果如下:。

相关文档
最新文档