国家开放大学电大《数据结构》实验报告

合集下载

国家开放大学《数据结构》课程实验报告(实验3 ——栈、队列、递归设计)参考答案

国家开放大学《数据结构》课程实验报告(实验3 ——栈、队列、递归设计)参考答案
{
x=Pop(s); /*出栈*/
printf("%d ",x);
InQueue(sq,x); /*入队*/
}
printf("\n");
printf("(10)栈为%s,",(StackEmpty(s)?"空":"非空"));
printf("队列为%s\n",(QueueEmpty(sq)?"空":"非空"));
ElemType Pop(SeqStack *s); /*出栈*/
ElemType GetTop(SeqStack *s); /*取栈顶元素*/
void DispStack(SeqStack *s); /*依次输出从栈顶到栈底的元素*/
void DispBottom(SeqStack *s); /*输出栈底元素*/
} SeqQueue; /*定义顺序队列*/
void InitStack(SeqStack *s); /*初始化栈*/
int StackEmpty(SeqStack *s); /*判栈空*/
int StackFull(SeqStack *s); /*判栈满*/
void Push(SeqStack *s,ElemType x); /*进栈*/
sq=(SeqQueue *)malloc(sizeof(SeqQueue));
InitQueue(sq);
printf("(8)队列为%s\n",(QueueEmpty(sq)?"空":"非空"));
printf("(9)出栈/入队的元素依次为:");

数据结构实验报告2

数据结构实验报告2

数据结构实验报告2数据结构实验报告21、实验目的本次实验的目的是通过使用数据结构来解决一个特定的问题。

具体而言,我们将会使用某种数据结构(例如链表、堆栈、队列等)来实现一个特定功能,并对其性能进行评估。

2、实验背景在本次实验中,我们将会探索数据结构在解决实际问题中的应用。

数据结构是计算机科学的重要组成部分,它提供了一种组织和管理数据的方式,以便能够高效地访问和操作这些数据。

3、实验内容在本次实验中,我们选择了一种经典的数据结构,以实现一个特定的功能。

具体而言,我们将会使用链表来实现一个简单的联系人管理系统。

3.1 数据结构选择我们选择了链表作为联系人管理系统的数据结构。

链表是一种灵活的数据结构,它能够动态地增加或删除元素,并且支持高效的插入和删除操作。

3.2 实现功能我们的联系人管理系统将会具有以下功能:- 添加联系人:用户可以输入联系人的姓名、方式号码等信息,并将其添加到联系人列表中。

- 删除联系人:用户可以选择要删除的联系人,并从列表中删除该联系人。

- 查找联系人:用户可以根据姓名或方式号码来查找联系人,并显示相关信息。

- 显示所有联系人:系统将会将所有联系人按照姓名的字母顺序进行排序,并将其显示在屏幕上。

4、实验步骤下面是本次实验的具体步骤:4.1 初始化联系人管理系统在系统开始之前,我们需要初始化联系人管理系统。

这包括创建一个空的联系人列表,并提供用户菜单来选择相应功能。

4.2 添加联系人用户可以选择添加联系人的功能,并输入联系人的相关信息。

系统将会将联系人添加到联系人列表中。

4.3 删除联系人用户可以选择删除联系人的功能,并输入要删除联系人的姓名或方式号码。

系统将会在联系人列表中查找并删除相应联系人。

4.4 查找联系人用户可以选择查找联系人的功能,并输入要查找联系人的姓名或方式号码。

系统将会在联系人列表中查找相应联系人,并显示其相关信息。

4.5 显示所有联系人用户可以选择显示所有联系人的功能。

数据结构实验报告一

数据结构实验报告一

数据结构实验报告一数据结构实验报告一一、引言数据结构是计算机科学中非常重要的一门课程,它研究的是数据的组织、存储和管理方式。

在本次实验中,我们将学习并实践一些常用的数据结构,包括数组、链表和栈。

通过实验,我们将深入理解这些数据结构的原理和应用。

二、实验目的本次实验的目的是通过编写代码实现一些常用的数据结构,并测试它们的功能和性能。

通过实际操作,我们将掌握这些数据结构的基本操作和使用方法。

三、实验过程1. 数组数组是一种线性数据结构,它由一组连续的存储单元组成。

在本次实验中,我们将实现一个动态数组,它可以根据需要自动调整大小。

我们首先定义一个数组类,包含插入、删除和查找等基本操作。

然后,我们编写测试代码,验证数组的功能和性能。

2. 链表链表是另一种常用的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。

在本次实验中,我们将实现一个单向链表。

我们首先定义一个节点类,然后定义一个链表类,包含插入、删除和查找等基本操作。

最后,我们编写测试代码,验证链表的功能和性能。

3. 栈栈是一种特殊的线性数据结构,它只能在一端进行插入和删除操作。

栈的特点是后进先出(LIFO)。

在本次实验中,我们将实现一个栈。

我们首先定义一个栈类,包含入栈、出栈和查看栈顶元素等基本操作。

然后,我们编写测试代码,验证栈的功能和性能。

四、实验结果通过实验,我们成功实现了动态数组、单向链表和栈的基本操作。

我们编写了测试代码,并对这些数据结构的功能和性能进行了验证。

实验结果表明,这些数据结构在不同场景下都有很好的表现,并且可以满足我们的需求。

五、实验总结本次实验让我们更加深入地理解了数据结构的原理和应用。

通过实际编写代码并进行测试,我们掌握了数组、链表和栈等常用数据结构的基本操作和使用方法。

实验过程中,我们遇到了一些问题,但通过不断的调试和优化,最终成功解决了这些问题。

通过本次实验,我们不仅提高了编程能力,也增强了对数据结构的理解和应用能力。

电大数据结构实验报告

电大数据结构实验报告

实验一单链表的插入,删除,初始化一、实验环境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的数据元素个数。

数据结构实验报告3

数据结构实验报告3

数据结构实验报告3数据结构实验报告3引言:数据结构是计算机科学中的一个重要概念,它涉及到数据的组织、存储和管理。

在本次实验中,我们将探索一些常见的数据结构,并通过实验来验证它们的性能和效果。

一、线性表线性表是最基本的数据结构之一,它是一种由一组数据元素组成的有序序列。

在本次实验中,我们使用了顺序表和链表来实现线性表。

顺序表是一种连续存储的数据结构,它可以通过下标来访问元素。

我们通过实验比较了顺序表的插入和删除操作的时间复杂度,发现在插入和删除元素较多的情况下,顺序表的性能较差。

链表是一种非连续存储的数据结构,它通过指针来连接各个元素。

我们通过实验比较了链表的插入和删除操作的时间复杂度,发现链表在插入和删除元素时具有较好的性能。

二、栈栈是一种特殊的线性表,它只允许在表的一端进行插入和删除操作。

在本次实验中,我们实现了栈的顺序存储和链式存储两种方式。

顺序存储的栈使用数组来存储元素,我们通过实验比较了顺序存储栈和链式存储栈的性能差异。

结果表明,在元素数量较少的情况下,顺序存储栈具有较好的性能,而在元素数量较多时,链式存储栈更具优势。

三、队列队列是一种特殊的线性表,它只允许在表的一端进行插入操作,在另一端进行删除操作。

在本次实验中,我们实现了队列的顺序存储和链式存储两种方式。

顺序存储的队列使用数组来存储元素,我们通过实验比较了顺序存储队列和链式存储队列的性能差异。

结果表明,顺序存储队列在插入和删除元素时具有较好的性能,而链式存储队列在元素数量较多时更具优势。

四、树树是一种非线性的数据结构,它由一组称为节点的元素组成,通过节点之间的连接来表示数据之间的层次关系。

在本次实验中,我们实现了二叉树和二叉搜索树。

二叉树是一种每个节点最多有两个子节点的树结构,我们通过实验验证了二叉树的遍历算法的正确性。

二叉搜索树是一种特殊的二叉树,它的左子树的所有节点都小于根节点,右子树的所有节点都大于根节点。

我们通过实验比较了二叉搜索树的插入和查找操作的时间复杂度,发现二叉搜索树在查找元素时具有较好的性能。

数据结构实验报告及心得体会

数据结构实验报告及心得体会

数据结构实验报告及心得体会一、概述:介绍本次实验的目的、背景以及所使用的实验环境和工具。

本次实验旨在通过实际操作,深入理解和掌握数据结构的原理及应用。

实验背景源于课程学习的理论知识与实际应用相结合的需求,通过实验操作,期望能够将课堂所学的数据结构知识更好地运用到实际编程和解决现实问题中。

本次实验所使用的实验环境为先进的计算机实验室,配备了高性能的计算机硬件和丰富的软件开发工具。

为了完成实验,我使用了Java编程语言,并结合Eclipse开发环境进行编程和调试。

我还参考了相关的数据结构专业书籍和在线资源,以便更好地理解和应用数据结构知识。

在实验过程中,我严格按照实验指导书的步骤进行操作,并认真记录了实验数据和结果。

通过本次实验,我深刻体会到了数据结构的重要性,也对数据结构的实现和应用有了更深入的了解。

二、实验内容:分别介绍线性数据结构(线性表)、非线性数据结构(二叉树、图)的实验内容,包括其实现方法、操作过程等。

每个实验都包含具体的实验目的和预期结果。

三、实验过程及结果分析:详细描述实验过程,包括实验步骤的执行情况,遇到的问题及解决方法。

对实验结果进行展示,并进行数据分析和结论。

这部分是实验报告的核心部分,体现了学生的实践能力和问题解决能力。

四、心得体会:分享在实验过程中的心得体会,包括遇到的困难、收获,对数据结构的理解与认识提升,以及实验过程中的团队协作和学习体验等。

这部分内容可以体现出学生的思考深度和学习的主观感受。

五、总结与展望:对本次实验报告进行总结,并对未来数据结构与算法的学习提出展望和建议。

这部分内容可以帮助学生梳理所学知识,明确未来的学习方向。

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

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

实验报告四图的存储方式和应用(学科:数据结构)姓名单位班级学号实验日期成绩评定教师签名批改日期实验名称:实验四图的存储方式和应用4.1建立图的邻接矩阵【问题描述】根据图中顶点和边的信息编制程序建立图的邻接矩阵。

【基本要求】(1)程序要有一定的通用性。

(2)直接根据图中每个结点与其他结点的关联情况输入相关信息,程序能自动形成邻接矩阵【测试用例】【实现提示】(1)对图的顶点编号。

(2)在上图中,以顶点1为例,因为顶点2,3,4与顶点1关联,可以输入信息1 2 3 4,然后设法求出与顶点1关联的结点,从而求得邻接矩阵中相应与顶点1的矩阵元素。

实验图4-1【实验报告内容】设计程序代码如下:#include<stdio.h>#define MaxVertexNum 5#define MaxEdgeNum 20#define MaxValue 1000typedef int VertexType;typedef VertexType vexlist [MaxVertexNum];typedef int adjmatrix [MaxVertexNum] [MaxVertexNum];void Createl(vexlist Gv,adjmatrix GA,int n,int e){int i,j,k,w;printf("输入%d个顶点数据\n",n);for(i=0;i<n;i++) scanf("%d",&Gv[i]);for(i=0;i<n;i++)for(j=0;j<n;j++){if(i==j) GA[i][j]=0;else GA[i][j]=MaxValue;}Printf(“输入一条边的两端点序号i和j及边上的权w\n”);printf("输入%d条无向带权边\n",e);for(k=1;k<=e;k++){scanf("%d%d%d",&i,&j,&w);GA[i][j]=GA[j][i]=w;}}void main(){vexlist vl;adjmatrix a;Createl(vl,a,5,8);}。

数据结构实验报告及心得体会

数据结构实验报告及心得体会

数据结构实验报告及心得体会一、引言数据结构是计算机科学中的重要基础课程,通过实验环节的学习,我们能够更好地掌握和应用数据结构的概念、算法和操作。

本报告旨在总结和分享我们进行的数据结构实验,并提出相应的心得体会。

二、实验一:线性表的实现与应用1. 实验目的本实验旨在通过实现和应用线性表的基本操作,掌握线性表的存储结构和算法。

2. 实验内容我们选择了顺序表和链表两种线性表的实现方式,并实现了插入、删除和查找等基本操作。

通过实验,我们发现顺序表适用于元素个数较少、频繁查找的情况,而链表适用于插入和删除操作较多、元素个数不确定的情况。

3. 实验心得通过实验一,我们深刻认识到数据结构的不同实现方式对算法的影响。

选择合适的数据结构可以提高算法效率,提高程序的性能。

同时,我们也意识到了在实际应用中,根据问题的具体特点选择不同的数据结构才能得到最优解。

三、实验二:栈与队列的应用本实验旨在通过实现和应用栈和队列的基本操作,掌握栈和队列的特性及其在实际应用中的作用。

2. 实验内容我们分别实现了顺序栈、链式栈、顺序队列和链式队列,并实现了入栈、出栈、入队和出队等基本操作。

我们发现栈适用于实现回溯算法、递归算法等,而队列适用于广度优先搜索、线程池等场景。

3. 实验心得通过实验二,我们进一步理解了栈和队列在实际编程中的运用。

它们提供了方便的数据结构,帮助我们解决了许多实际问题。

同时,实验过程中,我们也发现了栈溢出的问题,意识到了合理管理栈空间的重要性。

四、实验三:树与二叉树的实现与应用1. 实验目的本实验旨在通过实现和应用树和二叉树的基本操作,掌握树和二叉树的存储结构和算法。

2. 实验内容我们实现了树和二叉树的基本操作,包括创建、插入、删除和遍历等。

通过实验,我们发现树在表示具有部分层次结构的问题时更合适,而二叉树在表示递归结构时更加方便。

通过实验三,我们深入理解了树和二叉树的特性及其应用。

树和二叉树是许多高级数据结构的基础,熟练掌握它们的操作对于解决实际问题非常重要。

国家开放大学电大考试《数据结构》课程实验报告

国家开放大学电大考试《数据结构》课程实验报告

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

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

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

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

(3)显示要求的结果。

【实验步骤】(1)运行PC中的Microsoft V isual C++ 6.0程序,(2)点击“文件”→“新建”→对话窗口中“文件”→“c++ Source File”→在“文件名”中输入“sy1-1.cpp”→在“位置”中选择储存路径为“桌面”→“确定”,(3)输入程序代码,程序代码如下#include#include#include#include#include#define NUL 0#define PWRS 5struct 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("\n去掉1个最高分和1个最低分后的有效评委成绩如下:\n");print(head);}void input(NODE *s){printf("请输入评委的姓名: ");scanf("%S",&s->/doc/9851b6a0f524ccbff1218455. html);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->/doc/9851b6a0f524ccbff1218455 .html,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=NUL;for(i=1;i<=m;i++){p=(NODE*)malloc(sizeof(NODE)); input(p);p->next=NUL;q->next=p;q=p;}return (head);}void print(NODE *h){int i;for(i=1;i<=PWRS&&h->next!=NUL;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!=NUL;p=p->next){if(p->data.score>pmax->data.score) pmax=p;if(p->data.scoredata.score) pmin=p;sum+=p->data.score;}printf("给出最高分的评委姓名:%s 年龄:%d 分值:%f",pmax->/doc/9851b6a0f524ccbff1218455.h tml,pmax->data.age,pmax->data.score); printf("\n");printf("给出最低分的评委姓名:%s 年龄:%d 分值:%f",pmin->/doc/9851b6a0f524ccbff1218455.h tml,pmin->data.age,pmin->data.score); printf("\n\n");sum-=pmin->data.score;sum-=pmax->data.score;for (q=h,p=h->next;p!=NUL;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);printf("该选手的最后得分是:%f",ave); return 1;}运行结果如下:2、线性表的顺序存储结构【问题描述】用顺序表A记录学生的信息,编写程序:(1)将A表分解成两个顺序表B和C,使C表中含原A表中性别为男性的学生,B表中含原表中性别为女性的学生,要求学生的次序与原A表中相同。

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

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

国开数据结构(本)数据结构课程实验报告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. 总结与展望通过本次数据结构课程的实验,我们深入了解并掌握了数据结构的基本概念、操作和应用。

国家开放大学《数据结构》课程实验报告(实验2——线性表)参考答案

国家开放大学《数据结构》课程实验报告(实验2——线性表)参考答案
printf("\n");
//在链表中删除最高分和最低分结点
for(q=head,p=head->next;p!=NULL;q=p,p=p->next)
{
if(p==pmin) { q->next=p->next; p=q; } //删除最低分结点
};
typedef struct pw PW;
//定义链表结点
struct node
{
PW data;
struct node * next;
};
typedef struct node NODE;
NODE *create(int n); //建立单链表
void input(NODE *s,int i); //输入第i个评委信息
(5)遍历链表,累加求和,计算总分及平均分,并输出相关信息。
完整程序
//实验1.1线性表的链接存储结构
#include
#include
#include
#define PWRS 5 //定义评委人数
//定义评委信息
struct pw
{
char name[8]; //姓名
short age; //年龄
float score; //评分
NODE *create(int n)
{
NODE *head,*p,*q;
inti;
p=(NODE*)malloc(sizeof(NODE));
head=p; q=p; p->next=NULL;
for(i=1; i<=n; i++)
{
p=(NODE*)malloc(sizeof(NODE));

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

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

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

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

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

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

(3)显示要求的结果。

【实验步骤】(1)运行PC中的Microsoft Visual C++ 程序,(2)点击“文件”→“新建”→对话窗口中“文件”→“c++ Source File”→在“文件名”中输入“”→在“位置”中选择储存路径为“桌面”→“确定”,(3)输入程序代码,程序代码如下:#include <>#include <>#include <>#include <>#include <>#define NULL 0#define PWRS 5 2.2f ge=n; ame);printf("性别0女1男: ");scanf("%d",&m[i].sex);printf("年龄: ");scanf("%d",&m[i].age);printf("\n");}return 1;}int calc(STD *m,STD *n,STD *r,float &Fage,float &Mage){ int i,j=1,k=1;n[0].age=r[0].age=0;for( i=1;i<=m[0].age;i++){ if(m[i].sex==0){strcpy(n[j].name,m[i].name);n[j].sex=m[i].sex; n[j].age=m[i].age;n[0].age++; Mage+=m[i].age;j++;}else{strcpy(r[k].name,m[i].name);r[k].sex=m[i].sex; r[k].age=m[i].age;r[0].age++;Fage+=m[i].age;k++;}}Mage=Mage/n[0].age; Fage=Fage/r[0].age;cout<<"女生的平均年龄是:"<<Mage<<"男生的平均年龄是:"<<Fage<<endl;return 1;}void print(STD *m){for(int i=1;i<=m[0].age;i++){printf ("姓名:%3s, 性别(0女1男):%d, 年龄:%d\n",m[i].name,m[i].sex,m[i].age);}}程序运行结果如下:实验结束。

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

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

数据结构形成性考核册实验名称:实验一线性表线性表的链式存储结构【问题描述】某项比赛中,评委们给某参赛者的评分信息存储在一个带头结点的单向链表中,编写程序:(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表中相同。

国家开放大学《数据结构》课程实验报告(实验3 ——栈、队列、递归设计)参考答案

国家开放大学《数据结构》课程实验报告(实验3 ——栈、队列、递归设计)参考答案
}
/*判队空*/
int QueueEmpty(SeqQueue *sq)
{
if(sq->rear==sq->front)
return 1;
else
return 0;
}
/*循环队列入队*/
void InQueue(SeqQueue *sq,ElemType x)
{
if ((sq->rear+1)%MaxSize==sq->front) /*队满*/
InitStack(s);
printf("(2)栈为%s\n",(StackEmpty(s)?"空":"非空"));
printf("(3)输入要进栈的数据个数:");
scanf("%d",&n);
printf("依次输入进栈的%d个整数:",n);
/*数据依次进栈*/
for(i=0; i<n; i++)
{
printf("循环队列已空,不能进行出队操作!\n");
exit(1);
}
else{
x=sq->data[sq->front];
sq->front=(sq->front+1)%MaxSize;
return x;
}
}
/*取队头元素*/
ElemType GetQueue(SeqQueue *sq)
{
void InitQueue(SeqQueue *sq); /*初始化队列*/
int QueueEmpty(SeqQueue *sq); /*判队空*/

国家开放大学《数据结构》课程实验报告(实验6——查找)参考答案

国家开放大学《数据结构》课程实验报告(实验6——查找)参考答案
}
/*按平均成绩进行折半查找并插入新记录,使表仍按平均成绩降序排列*/
int BinSort(Student *a,int n,Student x)
{
int low,high,mid;
int i,j;
/*折半查找*/
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
void main()
{
Student a[N]={{"Zhao",95},{"Qian",90},{"Sun",86},{"Li",75}},x;
int n=4; /*学生人数,即表长*/
printf("初始%d位学生的信息表如下:\n",n);
Display(a,n);
printf("\n\n");
《数据结构》课程实验报告
(实验6——查找)
学生姓名
学 号
班 级
指导老师
实验名称
实验成绩
实验报告




实验目的:
某班学生成绩信息表中,每个学生的记录已按平均成绩由高到低排好序,后来发现某个学生的成绩没有登记到信息表中,使用折半查找法把该同学的记录插入到信息表中,使信息表中的记录仍按平均成绩有序。
实验要求:
(1)建立现有学生信息表,平均成绩已有序。
(2)输入插入学生的记录信息。
(3)用折半查找找到插入位置,并插入记录。
设计思路:
(1)用结构数组存储成绩信息表。
(2)对记录中的平均成绩进行折半查找并插入。
实验内容源自程序代码:/*实验5.1折半查找*/

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

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

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

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

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

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

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

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

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

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

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

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

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

国家开放大学《数据结构》课程实验报告(实验4——二叉树)参考答案

国家开放大学《数据结构》课程实验报告(实验4——二叉树)参考答案
《数据结构》课程实验报告
(实验4二叉树)
学生姓名
学 号
班 级
指导老师
实验名称
实验成绩
实验报告
实ቤተ መጻሕፍቲ ባይዱ



实验目的:
(1)根据数组tree,建立与该二叉树对应的链式存储结构。
(2)对该二叉树采用中序遍历法显示遍历结果。
实验要求:
(1)在主函数中,通过键盘输入建立设定的完全二叉树的顺序存储结构。
(2)设计子函数,其功能为将顺序结构的二叉树转化为链式结构。
(2)中序遍历采用递归算法,即中序遍历左子树、访问根结点、中序遍历右子树。




程序代码:
/*实验3.1二叉树的顺序存储结构和链式存储结构*/
#include <stdio.h>
#include <stdlib.h>
#define MaxSize 20
/*二叉树链式存储结构结点定义*/
typedef struct BTreeNode






指导教师 日期
(3)设计子函数,其功能为对给定二叉树进行中序遍历,显示遍历结果。
(4)通过实例判断算法和相应程序的正确性。
实验基本原理:
(1)顺序存储的二叉树转化为链式存储结构,采用递归算法,递归函数的形式为Creab(tree,n,i,b),其中形参:tree为顺序存储二叉树的数组,n为二叉树的结点数,i是二叉树某结点在数组tree中的下标(初始值为1),b为要建立的链式存储二叉树结点指针。转化时,首先建立*b结点,将tree[i]的值赋给*b的数据域,再调用递归函数分别构造左子树和右子树。

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

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

数据结构课程实验报告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
pa=pc->next;u=pb;pb=pb->next;free(u);
break;} //a=b
case 1: {u=pb->next;pb->next=pa;pc->next=pb;
pc=pb;pb=u; break;} //a>b
} //switch}//while
if(pb) {pc->next=pb; } free(lb); }
} polynomialnode, *polynomial ;
void addpolyn (polynomial &la, polynomial &lb){
pa=la->next;pb=lb->next;pc=la;//pa,pb分别指向la,lb的第一个结点
while (pΒιβλιοθήκη &&pb) {a=pa->expn;b=pb->expn;
数据结构课程实验报告
学生姓名
曹晓鑫
学 号
1915001215086
班 级
指导老师
实验名称
实验2线性表
实验成绩
实验报告




实验目的及要求:
掌握线性表的基本操作如线性表的初始化、查找、插入、删除等,以及线性表的存储结构的运用,并利用线性表实现一元多项式的相加。




实验设计思路、步骤和方法等:
通过对线性表的基本操作,对线性表进行初始化,用带表头结点的有序链表表示多项式,通过一系列线性表的基本操作实现一元多项式相加。设p,q分别指向A,B中某一结点,p,q初值是第一结点,比较p->exp与q->exp,p->exp < q->exp: p结点是结果多项式中的一项,p后移,q不动;p->exp > q->exp: q结点是结果多项式中的一项,将q插在p之前,q后移,p不动;p->exp = q->exp:系数相加,直到p或q为NULL。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构形成性考核册
实验名称:实验一线性表
线性表的链式存储结构
【问题描述】
某项比赛中,评委们给某参赛者的评分信息存储在一个带头结点的单向链表中,编写程序:
(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;
}
程序运行结果如下:。

相关文档
最新文档