(中央电大)数据结构实验报告1
- 格式:doc
- 大小:87.50 KB
- 文档页数:4
数据结构课程设计实验报告完整版【正文】一、实验目的本实验主要目的是通过实践,掌握数据结构的基本概念、常见数据结构的实现方式以及在实际应用中的应用场景和效果。
二、实验背景数据结构是计算机科学与技术领域中的一个重要概念,是研究数据的组织方式、存储方式、访问方式以及操作等方面的方法论。
在计算机科学领域,数据结构是实现算法和解决问题的基础,因此对数据结构的理解和应用具有重要意义。
三、实验内容本次数据结构课程设计实验主要分为以下几个部分:1. 实验环境的准备:包括选择合适的开发平台、安装必要的软件和工具。
2. 实验数据的收集和处理:通过合适的方式收集实验所需的数据,并对数据进行处理和整理。
3. 数据结构的选择和实现:根据实验需求,选择合适的数据结构,并进行相应的数据结构实现。
4. 数据结构的测试和优化:对所实现的数据结构进行测试,包括性能测试和功能测试,并根据测试结果对数据结构进行优化和改进。
5. 实验报告的撰写:根据实验过程和结果,撰写完整的实验报告,包括实验目的、实验背景、实验内容、实验结果和结论等。
四、实验过程1. 实验环境的准备本实验选择了Visual Studio作为开发平台,安装了相应版本的Visual Studio,并根据官方指引进行了相应的配置和设置。
2. 实验数据的收集和处理本实验选取了一份包含学生信息的数据集,包括学生姓名、学号、性别、年龄等信息。
通过编写Python脚本,成功提取了所需信息,并对数据进行了清洗和整理。
3. 数据结构的选择和实现根据实验需求,我们选择了链表作为数据结构的实现方式。
链表是一种常见的动态数据结构,能够高效地插入和删除元素,适用于频繁插入和删除的场景。
在实现链表时,我们定义了一个节点结构,包含数据域和指针域。
通过指针的方式将节点连接起来,形成一个链式结构。
同时,我们还实现了相关的操作函数,包括插入、删除、查找等操作。
4. 数据结构的测试和优化在完成链表的实现后,我们对其进行了性能测试和功能测试。
《数据结构》实验报告目录一、实验概述 (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++、或其他编程语言实现数据结构的操作,提高编程能力和算法设计能力。
本次实验报告将对实验的目的、内容、步骤、结果及分析等方面进行详细阐述,旨在通过实验过程的学习,提高学生对数据结构理论知识的理解和应用能力。
二、实验原理数据结构的基本概念:介绍数据结构的基本定义,包括数据元素、数据集合、数据关系等基本概念,以及数据结构的三要素:逻辑结构、存储结构和运算。
栈和队列:介绍栈和队列的定义、特点、基本运算及其在算法设计中的重要性。
树和二叉树:讲解树的基本概念、二叉树的结构特点、遍历方法、二叉搜索树及其在数据检索中的应用。
数据结构实验报告一数据结构实验报告一引言数据结构是计算机科学的重要基础,它研究如何组织和存储数据,以便高效地访问和操作。
在本次实验中,我们将学习并实践一些常见的数据结构,包括数组、链表和栈。
通过实验,我们将深入理解这些数据结构的特点和应用场景。
实验一:数组数组是一种线性数据结构,它由一系列相同类型的元素组成,并按照一定的顺序存储。
在本次实验中,我们将学习如何创建和操作数组。
首先,我们需要了解如何声明和初始化一个数组。
在C语言中,可以使用以下语法来声明一个整型数组:int array[5];接下来,我们可以使用下标操作符[]来访问数组中的元素。
例如,要访问数组中的第一个元素,可以使用以下语法:int firstElement = array[0];除了访问元素,我们还可以修改数组中的值。
例如,要将第三个元素的值改为10,可以使用以下语法:array[2] = 10;数组的优点是可以快速访问任意位置的元素,但缺点是大小固定,不易动态调整。
实验二:链表链表是一种动态数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。
在本次实验中,我们将学习如何创建和操作链表。
首先,我们需要了解如何声明和初始化一个链表。
在C语言中,可以使用以下结构体来定义一个链表节点:struct Node {int data;struct Node* next;};接下来,我们可以使用malloc函数来动态分配一个节点的内存空间,并将其指针赋给链表的头指针。
例如,要创建一个包含三个节点的链表,可以使用以下语法:struct Node* head = (struct Node*)malloc(sizeof(struct Node));struct Node* second = (struct Node*)malloc(sizeof(struct Node));struct Node* third = (struct Node*)malloc(sizeof(struct Node));然后,我们可以使用箭头操作符->来访问节点中的数据元素和指针。
国开数据结构本提交实验报告一、引言数据结构是计算机科学中的重要概念,包括各种基本数据结构(如数组、链表、堆栈、队列、树、图等)和它们之间的关系。
数据结构的选择和设计直接影响了算法的效率和程序的质量。
国开数据结构本是一门培养学生具备良好数据结构理论和实践能力的课程。
本实验报告旨在讨论数据结构本的实验报告提交要求和相关的实验内容。
二、实验报告提交要求为了能够及时了解学生的学习情况和掌握学生实际编程能力,国开教务部门对数据结构本的实验报告提出了一些具体的要求。
2.1 实验题目和目标每个实验的实验题目需要明确指定,并包含实验的目标和要求。
实验题目应具体、明确,以便让学生清楚地了解实验的内容和目标。
2.2 实验环境和工具学生需要在指定的实验环境下进行实验,教务部门会明确指出所需要使用的工具和软件版本。
学生需要自行安装和配置相关环境和工具,并确保实验环境正常运行。
2.3 实验报告格式和要求实验报告需要按照教务部门给出的格式进行书写,包括实验报告的标题、作者、时间、实验目的、实验内容、实验步骤、实验结果和实验总结等部分。
实验报告应具备良好的结构和逻辑,清晰地展示实验的过程和结果。
2.4 实验代码和文件提交学生需要按要求将实验代码和文件提交给教务部门,以便教师进行批改和评分。
学生需要确保代码和文件的准确性和完整性,并按要求命名和打包提交。
三、实验内容国开数据结构本的实验内容丰富多样,涉及到各种基本数据结构和相关算法的实现和应用。
以下列举了部分实验内容:3.1 线性表的实现线性表是数据元素的一个有限序列,包括线性顺序表和线性链表。
学生需要实现线性表的基本操作,如插入、删除、修改和查找等。
实验目标是掌握线性表的存储结构和基本操作。
3.2 栈和队列的实现栈和队列都是重要的数据结构,栈具有后进先出(LIFO)的特性,队列具有先进先出(FIFO)的特性。
学生需要实现栈和队列的基本操作,如进栈、出栈、入队和出队等。
实验目标是理解栈和队列的特性和应用。
实验一单链表的插入,删除,初始化一、实验环境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的数据元素个数。
实验报告(五)实验名称查找使用重要设备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. 实验实施(1)线性表:通过实现线性表的顺序存储和链式存储,实现插入、删除、查找等操作。
(2)栈和队列:通过实现栈和队列的顺序存储和链式存储,实现入栈、出栈、入队、出队等操作。
(3)串:通过实现串的顺序存储和链式存储,实现串的插入、删除、查找等操作。
(4)树:通过实现二叉树、二叉搜索树、平衡二叉树等,实现树的插入、删除、查找、遍历等操作。
(5)图:通过实现图的邻接矩阵和邻接表存储,实现图的插入、删除、查找、遍历等操作。
3. 实验总结实验结束后,教师组织学生进行实验总结,总结实验过程中的收获和不足,提出改进措施。
四、实验成果通过本次数据结构实验实训,学生取得了以下成果:1. 掌握了数据结构的基本概念、性质和应用场景。
一、实验实训背景数据结构是计算机科学中一个重要的基础课程,它是计算机程序设计中处理数据元素集合的方法和技巧。
数据结构不仅关系到算法设计的效率,也影响到程序的可读性和可维护性。
为了加深对数据结构理论知识的理解,提高编程能力,我们进行了数据结构实验实训。
二、实验实训目的1. 理解并掌握常见数据结构(如线性表、栈、队列、链表、树、图等)的基本概念、性质和操作。
2. 掌握数据结构的实现方法,能够运用数据结构解决实际问题。
3. 培养编程能力和算法设计能力,提高代码质量和效率。
4. 了解数据结构在实际应用中的重要性,为后续课程学习打下基础。
三、实验实训内容1. 线性表线性表是数据结构中最基本的结构,它包含一系列数据元素,元素之间具有线性关系。
我们通过实现顺序表和链表,分别讨论了它们的优缺点和适用场景。
2. 栈和队列栈是一种后进先出(LIFO)的数据结构,队列是一种先进先出(FIFO)的数据结构。
我们分别实现了栈和队列的顺序存储结构和链式存储结构,并分析了它们的适用场景。
3. 链表链表是一种非线性结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
我们实现了单链表、双向链表和循环链表,并讨论了它们的特点和应用。
4. 树和图树是一种层次结构,图是一种网状结构。
我们实现了二叉树、二叉搜索树、堆、图等数据结构,并分析了它们的性质和操作。
5. 算法设计我们通过实现冒泡排序、选择排序、插入排序、快速排序等排序算法,以及查找算法(如二分查找、顺序查找等),掌握了排序和查找算法的设计和实现方法。
四、实验实训过程1. 阅读实验指导书,了解实验内容和要求。
2. 分析实验原理,确定实现方法。
3. 编写代码,实现数据结构和算法。
4. 测试代码,验证数据结构和算法的正确性。
5. 分析实验结果,总结实验心得。
五、实验实训结果与分析1. 通过实验,我们掌握了常见数据结构的基本概念、性质和操作,提高了编程能力。
2. 在实现数据结构和算法的过程中,我们学会了如何根据实际问题选择合适的数据结构,提高了算法设计能力。
《数据结构》实验报告一实验内容:线性表链式存储结构下基本操作的实现学号:姓名:一、上机实验的问题和要求(需求分析):[ 题目] 线性表链式存储结构下基本操作的实现(初始化、赋值、取值、插入、删除、等)。
二、程序设计的基本思想,原理和算法描述:首先基于线性链表的存储结构建一个单链表(下面的程序实现的是通过头插法逆序建表),在此基础上实现对单链表的赋值、取值、插入、删除以及两个表的归并,需要注意的是插入(删除)过程中指针的修改。
三、调试和运行程序过程中产生的问题及采取的措施:1、注意scanf的格式;2、在编写程序过程中注意链表指针的正确修改;四、源程序及注释[ 源程序] 程序名:1.cpp#include<stdio.h>#include<process.h>#include<malloc.h>#define true 1#define false 0#define ok 1#define error 0#define overflow -2#define initsize 100#define increment 10#define null 0typedef int status;typedef int elemtype;typedef struct lnode{ elemtype data;struct lnode *next;}lnode,*linklist;void listtraverse(linklist l){//遍历链式表llinklist p=l->next;while(p!=null){printf("%d\n",p->data);p=p->next;}}void creatlist(linklist &l,int n){//逆位序输入个元素的值,建立带表头节点的单链表l int i;linklist p;l=(linklist)malloc(sizeof(lnode));l->next=null;for(i=n;i>0;--i){p=(linklist)malloc(sizeof(lnode));p->data=i;p->next = l->next;l->next = p;}}//creatlist status getelem(linklist l,int i,elemtype &e){//取带头节点的单链表l中第i个元素,用e返回int j;linklist p;p=l->next;j=1;while(p&&j<i){p=p->next;++j;}if(!p||j>i)return error;e=p->data;return ok;}//getelemstatus listinsert(linklist &l,int i,elemtype e){ //在带头节点的单链表l中第i个位置前插入元素e linklist p,s;int j=0;p=l->next;while(p&&j<i-2){p=p->next;++j;}if(!p||j>i-1)return error;s=(linklist)malloc(sizeof(lnode));s->data=e;s->next=p->next;p->next=s;return ok;}//listinsertvoid main(){linklist l;int i,e,j,f;int n;printf("请输入节点个数:");scanf("%d",&n);creatlist(l, n);printf("建表成功!");listtraverse(l);printf("please input the location i:");scanf("%d",&i);getelem(l,i,e);printf("the i th elem is %d\n",e);printf("please input the inserted elem's num and the value: "); scanf("%d %d",&j,&f);listinsert(l,j,f);listtraverse( l); }五、运行结果如输入结点个数为: 5运行结果: 1 2 3 4 5又如输入要查找的元素为: 3运行结果:3输入要插入的位置和元素值:3 8运行结果:1 2 8 3 4 5输入要删除元素的位置:3运行结果:8《数据结构》实验报告一实验内容:约瑟夫环学号:姓名:一、上机实验的问题和要求(需求分析):[ 题目] 设有n个人围坐一圈,现从某个人开始报数,数到m的人出列,接着从出列的下一个人开始重新报数,数到m的人又出列,如此下去,直到所有人都出列为止。
中央广播电视大学实验报告(学科:数据结构)姓名单位班级学号实验日期成绩评定教师签名批改日期实验名称:实验一线性表线性表的链式存储结构【问题描述】某项比赛中,评委们给某参赛者的评分信息存储在一个带头结点的单向链表中,编写程序:(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)显示在评分中给出最高分和最低分的评委的有关信息(姓名、年龄、所给分数等)。
(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;
}
程序运行结果如下:
实验结束。
实验结论:线性表采用链式存储(链表)时:以结构变量存储结点,动态生成结点,以指针链接结点,能有效利用存储空间,插入删除方便,但不能随机访问.单向链表可从某结点访问到后继结点。
单向链表操作的关键步骤:建立链表的头插法:指针变量p 开辟单元,生成结点,指针变量q 始终指向头结点,操作为:p->next=q->next; q->next=p; 尾插法:指针变量q 始终指向尾结点,p 指针开辟单元,生成结点:q->next=p; q=p; ?插入:p 所指向结点的后面插入新结点s 所指结点s->next=p->next; p->next=s; ?删除:p,q 指向相邻结点,q 所指结点是p 所指结点的后继,删除q 所指结点,p->next=q->next; ?遍历:p=p->next;。