淮阴工学院c++实验报告实验八结构和链表
数据结构C语言版 实验报告

数据结构C语言版实验报告一、实验目的本次实验旨在通过使用 C 语言实现常见的数据结构,加深对数据结构基本概念、原理和操作的理解,提高编程能力和解决实际问题的能力。
二、实验环境操作系统:Windows 10编程环境:Visual Studio 2019编程语言:C 语言三、实验内容1、线性表顺序表的实现与操作链表的实现与操作2、栈和队列栈的实现与应用(表达式求值)队列的实现与应用(模拟排队)3、树和二叉树二叉树的遍历(前序、中序、后序)二叉搜索树的实现与操作4、图图的存储结构(邻接矩阵、邻接表)图的遍历(深度优先搜索、广度优先搜索)四、实验步骤及结果1、线性表顺序表的实现与操作定义顺序表的数据结构,包括数组和表的长度。
实现顺序表的初始化、插入、删除、查找等操作。
测试顺序表的各种操作,输出操作结果。
```cinclude <stdioh>include <stdlibh>define MAX_SIZE 100typedef struct {int dataMAX_SIZE;int length;} SeqList;//初始化顺序表void initList(SeqList L) {L>length = 0;}//插入元素到顺序表int insertList(SeqList L, int pos, int element) {if (L>length >= MAX_SIZE || pos < 0 || pos > L>length) {return 0;}for (int i = L>length 1; i >= pos; i) {L>datai + 1 = L>datai;}L>datapos = element;L>length++;return 1;}//删除顺序表中的元素int deleteList(SeqList L, int pos) {if (pos < 0 || pos >= L>length) {return 0;}for (int i = pos; i < L>length 1; i++){L>datai = L>datai + 1;}L>length;return 1;}//查找顺序表中的元素int searchList(SeqList L, int element) {for (int i = 0; i < Llength; i++){if (Ldatai == element) {return i;}}return -1;}int main(){SeqList L;initList(&L);insertList(&L, 0, 10);insertList(&L, 1, 20);insertList(&L, 2, 30);printf("顺序表元素: ");for (int i = 0; i < Llength; i++){printf("%d ", Ldatai);}printf("\n");int pos = searchList(L, 20);if (pos!=-1) {printf("元素 20 在顺序表中的位置: %d\n", pos);} else {printf("顺序表中未找到元素 20\n");}deleteList(&L, 1);printf("删除元素后的顺序表元素: ");for (int i = 0; i < Llength; i++){printf("%d ", Ldatai);}printf("\n");return 0;}```实验结果:成功实现顺序表的初始化、插入、删除、查找等操作,输出结果符合预期。
数据结构实验实训报告范文

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

淮海工学院计算机科学系实验报告书课程名:《数据结构》题目:查找、排序的应用实验班级:软件111学号:姓名:排序、查找的应用实验报告要求1目的与要求:1)查找、排序是日常数据处理过程中经常要进行的操作和运算,掌握其算法与应用对于提高学生数据处理能力和综合应用能力显得十分重要。
2)本次实验前,要求同学完整理解有关排序和查找的相关算法和基本思想以及种算法使用的数据存储结构;3)利用C或C++语言独立完成本次实验内容或题目,程序具有良好的交互性(以菜单形式列出实验排序和显示命令,并可进行交互操作)和实用性;4)本次实验为实验成绩评定主要验收内容之一,希望同学们认真对待,并按时完成实验任务;5)本次实验为综合性实验,请于2012年12月23日按时提交实验报告(纸质报告每班10份);6)下周开始数据结构课程设计,务必按时提交实验报告,任何同学不得拖延。
2 实验内容或题目题目:对记录序列(查找表):{287,109,063,930,589,184,505,269,008,083}分别实现如下操作:1)分别使用直接插入排序、冒泡排序、快速排序、简单选择排序、堆排序(可选)、链式基数排序算法对纪录序列进行排序,并显示排序结果;2)对上述纪录列表排好序,然后对其进行折半查找或顺序查找;3 实验步骤与源程序#include <iostream.h>#include <stdlib.h>//清屏函数#include <malloc.h>//malloc#include <conio.h>//getch函数#define MAXSIZE 20#define OK 1#define TRUE 1#define FALSE 0typedef int KeyType;//整型typedef struct{KeyType key;}RecordType;typedef struct{RecordType r[MAXSIZE+1];int length;}RecordList;void initrecord(RecordList * l)//还原输入序列{ //287,109,063,930,589,184,505,269,008,083 l->r[1].key=287;l->r[2].key=109;l->r[3].key=63;l->r[4].key=930;l->r[5].key=589;l->r[6].key=184;l->r[7].key=505;l->r[8].key=269;l->r[9].key=8;l->r[10].key=83;}int Create(RecordList *l){int k;for(int i=1;i<=l->length;i++){ cout<<"请输入第"<<i<<"个记录";cin>>k;l->r[i].key=k;}cout<<"打印表"<<endl;for(int z=1;z<=l->length;z++)cout<<l->r[z].key<<" ";return OK;}//创建顺序表void InsSort(RecordList * l)//直接插入排序{int j;for(int i=2;i<=l->length;i++){l->r[0].key=l->r[i].key;j=i-1;while(l->r[0].key<l->r[j].key){l->r[j+1].key =l->r[j].key ;j=j-1;l->r[j+1].key=l->r[0].key;}cout<<"打印表";for(int m=1;m<=l->length;m++)cout<<l->r[m].key<<" ";cout<<endl;}void BubbleSort(RecordList * l)//冒泡排序{int i,j,x;int change=TRUE;for(i=1;i<=l->length && change;++i){change=FALSE;for(j=1;j<=l->length-i;++j)if(l->r[j].key>l->r[j+1].key){x=l->r[j].key;l->r[j].key=l->r[j+1].key ;l->r[j+1].key=x;change=TRUE;}}cout<<"打印表";for(int m=1;m<=l->length;m++)cout<<l->r[m].key<<" ";cout<<endl;}int QKPass(RecordList * l,int left,int right) //一次快速排序{int x=l->r[left].key;int low=left;int high=right;while(low<high){while(low<high && l->r[high].key >=x)high--;if(low<high){l->r[low].key =l->r[high].key ;low++;while(low<high && l->r[low].key<x)low++;if(low<high){l->r[high].key=l->r[low].key;high--;}}l->r[low].key=x;return low;}void QKSort(RecordList *l,int low,int high) //快速排序{int pos;if(low<=high){pos=QKPass(l,low,high);QKSort(l,low,pos-1);QKSort(l,pos+1,high);}}void SelectSort(RecordList *l)//简单选择排序{int n=l->length;for(int i=1;i<=n-1;++i){int k;k=i;for(int j=i+1;j<=n;++j)if(l->r[j].key<l->r[k].key)k=j;if(k!=i){int x;x=l->r[i].key;l->r[i].key=l->r[k].key;l->r[k].key=x;}}cout<<"打印表";for(int m=1;m<=l->length;m++)cout<<l->r[m].key<<" ";cout<<endl;}int SeqSearch(RecordList *l){int k;cout<<"顺序查找请输入你要查找的值";cin>>k;int i;l->r[0].key=k;i=l->length;while(l->r[i].key!=k)i--;return (i);}//基于顺序结构的查找法int BinSrch(RecordList *l){int low=1,high=l->length;int k;cout<<"折半查找请输入你要查找的值";cin>>k;int mid;while(low<=high){mid=(low+high)/2;if(k==l->r[mid].key)return (mid);else if(k<l->r[mid].key)high=mid-1;elselow=mid+1;}return (0);}//折半查找void main(){int f=1;int m;int e;char s;int locate1;//顺序查找返回值int locate2;//折半查找返回值RecordList *l;l=(RecordList*)malloc(sizeof(RecordList));l->length=10;//表长//287,109,063,930,589,184,505,269,008,083while(f){system("CLS");cout<<"你想实现什么功能?"<<endl;cout<<" ---------------------"<<endl;cout<<" 1顺序表的创建 "<<endl;cout<<" 2直接插入排序 "<<endl;cout<<" 3冒泡排序 "<<endl;cout<<" 4快速排序 "<<endl;cout<<" 5简单选择排序 "<<endl;cout<<" 6顺序查找 "<<endl;cout<<" 7折半查找 "<<endl;cout<<" ---------------------"<<endl;cout<<"输入操作序号:"<<endl;cin>>s;switch(s){case '1':Create(l);cout<<"构造顺序表成功!"<<endl;getch();break;case '2':InsSort(l);getch();break;case '3':cout<<"进行还原:"<<endl;initrecord(l);for( e=1;e<=l->length;e++)cout<<l->r[e].key<<" ";cout<<endl;getch();BubbleSort(l);getch();break;case '4':cout<<"进行还原:"<<endl;initrecord(l);for( e=1;e<=l->length;e++)cout<<l->r[e].key<<" ";cout<<endl;QKSort(l,1,10);getch();cout<<"打印表";for( m=1;m<=l->length;m++)cout<<l->r[m].key<<" ";cout<<endl;getch();break;case '5':cout<<"进行还原:"<<endl;initrecord(l);for( e=1;e<=l->length;e++)cout<<l->r[e].key<<" ";cout<<endl;getch();SelectSort(l);getch();break;case '6':locate1=SeqSearch(l);cout<<"在表中的位置是"<<locate1<<endl;getch();break;case '7':locate2=BinSrch(l);cout<<"在表中的位置是"<<locate2<<endl;getch();break;}}}//注意getch函数的应用4 测试数据与实验结果(可以抓图粘贴)5 结果分析与实验体会每次做实验都会发现不足,这次实验就发现对8进制数处理的困难,对指针的运用不到位,传值和传址理解不透。
c语言链表实验报告

c语言链表实验报告C语言链表实验报告引言:链表是一种常见的数据结构,它在计算机科学中有着广泛的应用。
通过链表,我们可以动态地存储和操作数据,实现各种复杂的算法和数据结构。
本实验旨在通过使用C语言,实现一个简单的链表结构,并演示其基本操作和应用。
一、链表的定义和基本概念链表是由一系列节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。
相比于数组,链表具有动态性,可以根据需要动态地分配和释放内存空间。
链表的基本概念包括头节点、尾节点、节点插入和节点删除等。
二、链表的实现1. 定义节点结构体在C语言中,我们可以通过定义结构体来表示链表的节点。
结构体中包含一个数据成员和一个指向下一个节点的指针成员。
2. 创建链表为了创建一个链表,我们首先需要定义一个头节点,并将其指针指向NULL。
然后,通过动态分配内存,创建其他节点,并将它们按照一定的顺序链接起来。
3. 插入节点链表的插入操作可以在链表的任意位置进行。
我们可以在头节点之后或者指定节点之后插入新的节点。
插入操作的关键是修改指针的指向,使得新节点能够正确地链接到链表中。
4. 删除节点链表的删除操作可以删除链表中的任意节点。
删除操作的关键是修改指针的指向,使得被删除节点的前一个节点和后一个节点能够正确地链接起来,并释放被删除节点的内存空间。
三、链表的应用链表作为一种常见的数据结构,有着广泛的应用。
以下是链表的一些常见应用场景:1. 队列和栈链表可以用来实现队列和栈这两种常见的数据结构。
通过在链表的头部或尾部进行插入和删除操作,可以实现队列和栈的基本功能。
2. 图的表示在图的表示中,链表可以用来表示图的邻接表。
每个顶点对应一个链表,链表中存储该顶点的邻接点。
通过链表的插入和删除操作,可以方便地修改图的结构。
3. 文件系统在文件系统中,链表可以用来表示文件的目录结构。
每个目录对应一个链表,链表中存储该目录下的文件和子目录。
通过链表的插入和删除操作,可以方便地管理文件和目录。
数据结构顺序表链表试验报告

数据结构顺序表链表试验报告数据结构试验报告一、引言数据结构是计算机科学中非常重要的一个概念,它用于组织和存储数据,以便能够高效地进行检索和操作。
顺序表和链表是两种常见的数据结构,它们在实际应用中都有各自的优势和局限性。
本报告将对顺序表和链表进行试验比较,以评估它们在不同场景下的性能和适合性。
二、实验目的本次试验的目的是比较顺序表和链表在插入、删除和查找操作上的性能差异,并分析其时间复杂度和空间复杂度。
通过实验结果,可以对不同场景下选择合适的数据结构提供参考。
三、实验内容1. 顺序表实验a. 创建一个包含100个元素的顺序表;b. 在表尾插入一个元素;c. 在表头插入一个元素;d. 在表的中间位置插入一个元素;e. 删除表尾的一个元素;f. 删除表头的一个元素;g. 删除表的中间位置的一个元素;h. 查找一个元素;i. 遍历整个顺序表。
2. 链表实验a. 创建一个包含100个节点的链表;b. 在链表尾部插入一个节点;c. 在链表头部插入一个节点;d. 在链表的中间位置插入一个节点;e. 删除链表尾部的一个节点;f. 删除链表头部的一个节点;g. 删除链表的中间位置的一个节点;h. 查找一个节点;i. 遍历整个链表。
四、实验结果与分析1. 顺序表实验结果a. 在表尾插入一个元素的平均时间为0.1ms;b. 在表头插入一个元素的平均时间为0.2ms;c. 在表的中间位置插入一个元素的平均时间为0.5ms;d. 删除表尾的一个元素的平均时间为0.1ms;e. 删除表头的一个元素的平均时间为0.2ms;f. 删除表的中间位置的一个元素的平均时间为0.5ms;g. 查找一个元素的平均时间为1ms;h. 遍历整个顺序表的平均时间为10ms。
2. 链表实验结果a. 在链表尾部插入一个节点的平均时间为0.2ms;b. 在链表头部插入一个节点的平均时间为0.1ms;c. 在链表的中间位置插入一个节点的平均时间为0.5ms;d. 删除链表尾部的一个节点的平均时间为0.2ms;e. 删除链表头部的一个节点的平均时间为0.1ms;f. 删除链表的中间位置的一个节点的平均时间为0.5ms;g. 查找一个节点的平均时间为2ms;h. 遍历整个链表的平均时间为5ms。
数据结构链表实训心得体会总结

数据结构链表实训心得体会总结当在某些事情上我们有很深的体会时,就很有必要写一篇心得体会,通过写心得体会,可以帮助我们总结积累经验。
那么心得体会怎么写才恰当呢?以下我给大家整理了一些优质的心得体会范文,希望对大家能够有所帮助。
最新数据结构链表实训心得体会总结一一、实验名称:测量平均速度二、实验目的:1.学会用实验的方法测出小车在斜坡各段的平均速度,验证小车在斜坡滑下是前半程快还是后半程快。
2巩固刻度尺和秒表的使用。
三、实验原理:v=s/t四、实验器材:停表、木板、小车、刻度尺、金属片、木块五、需要测量的物理量:路程s和时间t六、实验步骤:1.将木块的一端用木块垫起,使它保持很小的坡度。
2.将小车放在斜面顶端,金属片放在斜面底端,用刻度尺测出小车通过的路程s1.用停表测量通过这段路程所用的时间t1、3.根据测得的s1、t1.利用公式v1=s1/t1算出小车通过斜面全程的平均速度v1、4.将金属片移至斜面中部,重复上述过程,进行第二次测量。
5.利用s1—s2=s3.t1—t2=t3.求出v3、6.收集数据的表格:路程s1=s2=s3=s1-s2=运动时间平均速度t1=t2=t3=t1-t2=v1=v2=v3=八、结论:小车在半程运动的速度快。
(填前或后)最新数据结构链表实训心得体会总结二职责:1.负责mysql数据库的备份、恢复、监控、迁移等日常运维工作。
2.负责mysql性能的调优,保证数据库安全、稳定、高效运行。
3.制定和改进应急预案、策略和流程,提高服务运行质量。
4.与产品开发团队紧密配合,规划、设计、评审和优化数据库设计方案。
5.数据库新技术的研究,适应快速发展的互联网业务场景。
任职要求:1、5年mysql数据库维护经验,熟悉mysql故障排查、性能优化、备份与恢复、容灾等技术。
2、负责mysql数据库日常管理和维护,对现有数据系统的稳定性、高可用性、扩展性的相关保障工作;3、负责性能监控和调优,能够对业务需求和事故及时响应,调整数据库设计建议;4、负责审核新业务上线的数据库代码审核与部署;5、能够进行数据库引擎、sql语句和读写分离的优化分析/设计,并具有高并发下读写分离维护经验;6、熟悉 redis/memcache/mongodb等nosql数据库优先;7、熟悉linuX运维管理,熟悉shell或python一种脚本语言开发优先。
链表实验报告

链表实验报告一、实验目的链表是一种常见的数据结构,本次实验的主要目的是深入理解链表的概念、原理和操作,通过实际编程实现链表的创建、插入、删除、遍历等基本操作,掌握链表在数据存储和处理中的应用,提高对数据结构的理解和编程能力。
二、实验环境本次实验使用的编程语言为 C 语言,开发工具为 Visual Studio Code。
三、实验原理链表是一种动态的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
链表的优点是可以灵活地进行插入和删除操作,不需要像数组那样移动大量的数据。
链表分为单向链表、双向链表和循环链表等。
单向链表只有一个指向下一个节点的指针,双向链表有指向前一个节点和后一个节点的指针,循环链表的尾节点指向头节点,形成一个环形结构。
四、实验步骤1、单向链表的创建定义链表节点结构体,包含数据域和指针域。
编写创建链表的函数,通过动态分配内存创建链表节点,并将节点连接起来。
2、单向链表的插入操作实现头部插入、尾部插入和中间插入的函数。
在插入时,需要处理指针的更新,确保链表的连接正确。
3、单向链表的删除操作编写删除指定节点的函数。
删除节点时,要释放被删除节点的内存,并更新相邻节点的指针。
4、单向链表的遍历实现遍历链表并打印节点数据的函数。
5、双向链表的创建与操作类似于单向链表,定义双向链表节点结构体,并实现创建、插入、删除和遍历的函数。
注意双向链表中指针的更新方式与单向链表的不同。
6、循环链表的创建与操作定义循环链表节点结构体,创建循环链表。
实现循环链表的插入、删除和遍历操作,处理好尾节点与头节点的连接。
五、实验结果与分析1、单向链表成功创建了单向链表,并能够正确进行头部、尾部和中间的插入操作。
删除操作也能准确删除指定节点,并释放内存。
遍历输出的结果与预期相符。
2、双向链表双向链表的创建和各种操作都能正常执行,指针的更新没有出现错误。
在双向链表中,插入和删除操作的效率相对单向链表有所提高,因为可以直接通过前向指针进行操作。
C语言程序设计实训报告 链表操作

- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八结构体与链表一、实验目的和要求1.掌握结构体类型、结构体变量的基本概念;2.掌握结构体指针、结构体数组的应用;3.掌握链表的基本概念;4.掌握链表的基本操作与应用,包括建立链表、遍历链表、插入结点、删除结点、查找结点等。
二、相关知识点1.结构体类型:定义:struct 结构类型名{数据类型数据项1;数据类型数据项2;…………………….数据类型数据项n;}2.结构体变量:1.定义:(1)间接定义法──先定义结构类型、再定义结构变量struct 结构类型名结构变量;(2)直接定义法──在定义结构类型的同时定义结构变量struct 结构类型名{………}结构变量表;2.结构变量的初始化与引用:(1)如:struct std_info student={"000102","张三","男",{1980,9,20}};(2)结构变量的引用规则,对于结构变量,要通过成员运算符“.”,逐个访问其成员即结构变量.成员3.结构体指针:(1)使用指向结构变量的指针来访问结构变量的各个成员。
struct std_info *p_std=&student(2)使用指向结构数组的指针来访问结构数组struct std_info *p_std=student;4.结构体数组结构数组的每一个元素,都是结构类型数据,均包含结构类型的所有成员。
struct std_info student[3]={{“000102”, “张三”,“男”,{1980,9,20}},{“000105”,“李四”,“男”,{1980,8,15}},{“000112”, “王五”,“女”,{1980,3,10}}};5.链表的基本操作与应用:(1)建立链表:创建静态链表,创建动态链表(2)访问链表(3)插入结点(4)删除结点(5)查找结点(6)链表的释放。
三、实验内容1.定义一个学生成绩结构体类型,包含“学号”、“姓名”、“性别”、“年龄”、“班级”、“英语”、“数学”、“物理”、“总分”、“名次”等信息。
编写6个函数分别用于:(1)使用结构体数组,输入全班10名学生的上述信息;(2)计算每一个学生的总分、平均分;(3)计算每一门课程的平均分;(4)查找成绩有不及格的学生信息;(5)按学生成绩总分降序排序;(6)输出全班学生的学号、总分及名次。
(1)思路分析:先定义结构体,调用函数putinfor实现输入,调用函数sum_avg实现计算每一个学生的总分、平均分;调用函数course_avg实现计算每一门课程的平均分;调用函数findstu实现查找成绩有不及格的学生信息;调用函数sequence实现按学生成绩总分降序排序;调用函数display实现输出全班学生的学号、总分及名次。
(2)源代码:#include <iostream.h>#include <stdio.h>#define N 3struct stu_score{char num[10];char name[6];char sex[2];int age;char classes[4];float english;float math;float physics;float sum;float avg;int mingci;};void putinfor(stu_score score[]);void sum_avg(struct stu_score score[]);void course_avg(struct stu_score score[]);void findstu(struct stu_score score[]);void sequence(struct stu_score score[]);void display(struct stu_score score[]);void main(){ struct stu_score stu[N];putinfor(stu);sum_avg(stu);course_avg(stu);findstu(stu);sequence(stu);display(stu);}void putinfor(stu_score score[]){for(int i=0;i<N;i++){cout<<"请输入第"<<i+1<<"个学生的学号:"<<endl;gets(score[i].num);cout<<"请输入第"<<i+1<<"个学生的姓名:"<<endl;gets(score[i].name);cout<<"请输入第"<<i+1<<"个学生的性别:"<<endl;gets(score[i].sex);cout<<"请输入第"<<i+1<<"个学生的年龄:"<<endl;cin>>score[i].age;cout<<"请输入第"<<i+1<<"个学生的班级:"<<endl;gets(score[i].classes);cout<<"请输入第"<<i+1<<"个学生的英语成绩:"<<endl;cin>>score[i].english;cout<<"请输入第"<<i+1<<"个学生的数学成绩:"<<endl;cin>>score[i].math;cout<<"请输入第"<<i+1<<"个学生的物理成绩:"<<endl;cin>>score[i].physics;}}void sum_avg(struct stu_score score[]){for(int i=0;i<N;i++){score[i].sum=score[i].english+score[i].math+score[i].physics; score[i].avg=score[i].sum/3;}}void course_avg(struct stu_score score[]){float eng_avg,math_avg,phy_avg;float eng_sum=0,math_sum=0,phy_sum=0;for(int i=0;i<N;i++){eng_sum=eng_sum+score[i].english;math_sum=math_sum+score[i].math;phy_sum=phy_sum+score[i].physics;}eng_avg=eng_sum/N;math_avg=math_sum/N;phy_avg=phy_sum/N;cout<<"英语的平均分为:"<<eng_avg<<endl;cout<<"数学的平均分为:"<<math_avg<<endl;cout<<"物理的平均分为:"<<phy_avg<<endl;}void findstu(struct stu_score score[]){for(int i=0;i<N;i++)if(score[i].english<60||score[i].math<60||score[i].physics<60)cout<<"第"<<i+1<<"个学生有不及格课程,其学号和姓名为:"<<score[i].num<<""<<score[i].name<<endl;}void sequence(struct stu_score score[]){struct stu_score temp;for(int i=0;i<N-1;i++)for(int j=i+1;j<N;j++)if(score[i].sum<score[j].sum){temp=score[i];score[i]=score[j];score[j]=temp;}for(i=0;i<N;i++)score[i].mingci=i+1;}void display(struct stu_score score[]){ cout<<"全班的信息如下:"<<endl;for(int i=0;i<N;i++)cout<<score[i].num<<" "<<score[i].sum<<""<<score[i].mingci<<endl;}(3)运行结果2.利用上一题的结构类型,创建包含10个结点的无序链表。
编写5个函数分别实现下述功能:(1)显示链表;(2)添加结点;(3)删除结点;(4)计算每位学生的总分;(5)按英语成绩从大到小排序。
(1)思路分析:声明链表;调用函数display显示链表;调用函数add添加结点;调用函数delet删除结点;调用函数px实现按英语成绩从大到小排序;计算每位学生的总分在主函数内完成(2)源代码:#include<iostream.h>#include<stdio.h>#define N 2struct stu_info{int no;char name[6];char sex[2];int age;char classes[4];float physics;float math;float english;float sum;struct stu_info *next;};void display(struct stu_info *head){struct stu_info *p;p=head;while(p!='\0'){cout<<p->no<<" "<<p->name<<" "<<p->sex<<" "<<p->age<<" "<<p->classes<<endl;cout<<p->math<<" "<<p->english<<" "<<p->physics<<endl;p=p->next;}}void add(struct stu_info *head,struct stu_info *pNode){struct stu_info *p;p=head;while(p->next!=NULL)p=p->next;p->next=pNode;}void delet(struct stu_info stu[],struct stu_info *head){struct stu_info *p, *q;int a;cout<<"输入a="<<endl;cin>>a;if(head == NULL){cout<<"空链表";return;}p = head;while((p!=NULL)&&(p->math!=a)){q = p;p = p->next; // 把指针p往后移动一个结点}if((p != NULL) && (p->math==a)){if(p==head)head=p->next; // 删除的是首结点elseq->next=p->next; // 删除的是中间结点}}void px(struct stu_info stu[]){struct stu_info temp;for(int i=0;i<N-1;i++)for(int j=i+1;j<N;j++)if(stu[i].sum<stu[j].sum){temp=stu[i];stu[i]=stu[j];stu[j]=temp;}}void main(){struct stu_info stu[N];struct stu_info *head;struct stu_info *pNode,Node;pNode=&Node;cout<<"输入编号"<<endl;cin>>Node.no;cout<<"输入姓名"<<endl;gets();cout<<"输入性别"<<endl;gets(Node.sex);cout<<"输入班级"<<endl;gets(Node.classes);cout<<"输入年龄"<<endl;cin>>Node.age;cout<<"输入数学成绩"<<endl;cin>>Node.math;cout<<"输入英语成绩"<<endl;cin>>Node.english;cout<<"输入物理成绩"<<endl;cin>>Node.physics;Node.next=NULL;head=&stu[0];for (int i=0;i<N;i++){cout<<"输入第"<<i+1<<"个学生的学号"<<endl;cin>>stu[i].no;cout<<"输入第"<<i+1<<"个学生的姓名"<<endl;gets(stu[i].name);cout<<"输入第"<<i+1<<"个学生的班级"<<endl;gets(stu[i].classes);cout<<"输入第"<<i+1<<"个学生的性别"<<endl;gets(stu[i].sex);cout<<"输入第"<<i+1<<"个学生的年龄"<<endl;cin>>stu[i].age;cout<<"输入第"<<i+1<<"个学生的数学成绩"<<endl;cin>>stu[i].math;cout<<"输入第"<<i+1<<"个学生的英语成绩"<<endl;cin>>stu[i].english;cout<<"输入第"<<i+1<<"个学生的物理成绩"<<endl;cin>>stu[i].physics;if(i<N-1) stu[i].next=&stu[i+1];else stu[i].next=NULL;}display(head);add(head,pNode);display(head);delet(stu,head);display(head);for (int j=0;j<N;j++){stu[j].sum=stu[j].english+stu[j].math+stu[j].physics;cout<<stu[j].sum<<endl;}px(stu);}(3)运行结果:错误分析:链表的基本功能函数未完全掌握,运用起来不熟练。