数据结构实验报告模板(验证型)
《数据结构》实验报告模板(附实例)--实验一线性表的基本操作实现

《数据结构》实验报告模板(附实例)---实验一线性表的基本操作实现实验一线性表的基本操作实现及其应用一、实验目的1、熟练掌握线性表的基本操作在两种存储结构上的实现,其中以熟悉各种链表的操作为重点。
2、巩固高级语言程序设计方法与技术,会用线性链表解决简单的实际问题。
二、实验内容√ 1、单链表的表示与操作实现 ( * )2、约瑟夫环问题3、Dr.Kong的艺术品三、实验要求1、按照数据结构实验任务书,提前做好实验预习与准备工作。
2、加“*”题目必做,其他题目任选;多选者并且保质保量完成适当加分。
3、严格按照数据结构实验报告模板和规范,及时完成实验报告。
四、实验步骤(说明:依据实验内容分别说明实验程序中用到的数据类型的定义、主程序的流程以及每个操作(成员函数)的伪码算法、函数实现、程序编码、调试与分析、总结、附流程图与主要代码)㈠、数据结构与核心算法的设计描述(程序中每个模块或函数应加注释,说明函数功能、入口及出口参数)1、单链表的结点类型定义/* 定义DataType为int类型 */typedef int DataType;/* 单链表的结点类型 */typedef struct LNode{ DataType data;struct LNode *next;}LNode,*LinkedList;2、初始化单链表LinkedList LinkedListInit( ){ // 每个模块或函数应加注释,说明函数功能、入口及出口参数 }3、清空单链表void LinkedListClear(LinkedList L){// 每个模块或函数应加注释,说明函数功能、入口及出口参数}4、检查单链表是否为空int LinkedListEmpty(LinkedList L){ …. }5、遍历单链表void LinkedListTraverse(LinkedList L){….}6、求单链表的长度int LinkedListLength(LinkedList L){ …. }7、从单链表表中查找元素LinkedList LinkedListGet(LinkedList L,int i){ //L是带头结点的链表的头指针,返回第 i 个元素 }8、从单链表表中查找与给定元素值相同的元素在链表中的位置LinkedList LinkedListLocate(LinkedList L, DataType x){ …… }9、向单链表中插入元素void LinkedListInsert(LinkedList L,int i,DataType x) { // L 为带头结点的单链表的头指针,本算法// 在链表中第i 个结点之前插入新的元素 x}10、从单链表中删除元素void LinkedListDel(LinkedList L,DataType x){ // 删除以 L 为头指针的单链表中第 i 个结点 }11、用尾插法建立单链表LinkedList LinkedListCreat( ){ …… }㈡、函数调用及主函数设计(可用函数的调用关系图说明)㈢程序调试及运行结果分析㈣实验总结五、主要算法流程图及程序清单1、主要算法流程图:2、程序清单(程序过长,可附主要部分)说明:以后每次实验报告均按此格式书写。
数据结构实验报告2篇

数据结构实验报告数据结构实验报告精选2篇(一)实验目的:1. 熟悉数据结构的基本概念和基本操作;2. 掌握线性表、栈、队列、链表等经典数据结构的实现方法;3. 掌握数据结构在实际问题中的应用。
实验内容:本次实验主要包括以下几个部分:1. 线性表的实现方法,包括顺序表和链表,分别使用数组和链表来实现线性表的基本操作;2. 栈的实现方法,包括顺序栈和链式栈,分别使用数组和链表来实现栈的基本操作;3. 队列的实现方法,包括顺序队列和链式队列,分别使用数组和链表来实现队列的基本操作;4. 链表的实现方法,包括单链表、双链表和循环链表,分别使用指针链、双向链和循环链来实现链表的基本操作;5. 综合应用,使用各种数据结构来解决实际问题,例如使用栈来实现括号匹配、使用队列来实现马铃薯游戏等。
实验步骤及结果:1. 线性表的实现方法:a) 顺序表的基本操作:创建表、插入元素、删除元素、查找元素等;b) 链表的基本操作:插入节点、删除节点、查找节点等;c) 比较顺序表和链表的优缺点,分析适用场景。
结果:通过实验,确认了顺序表适用于频繁查找元素的情况,而链表适用于频繁插入和删除节点的情况。
2. 栈的实现方法:a) 顺序栈的基本操作:进栈、出栈、判空、判满等;b) 链式栈的基本操作:进栈、出栈、判空、判满等。
结果:通过实验,掌握了栈的基本操作,并了解了栈的特性和应用场景,例如括号匹配。
3. 队列的实现方法:a) 顺序队列的基本操作:入队、出队、判空、判满等;b) 链式队列的基本操作:入队、出队、判空、判满等。
结果:通过实验,掌握了队列的基本操作,并了解了队列的特性和应用场景,例如马铃薯游戏。
4. 链表的实现方法:a) 单链表的基本操作:插入节点、删除节点、查找节点等;b) 双链表的基本操作:插入节点、删除节点、查找节点等;c) 循环链表的基本操作:插入节点、删除节点、查找节点等。
结果:通过实验,掌握了链表的基本操作,并了解了链表的特性和应用场景。
《数据结构》实验1实验报告

南京工程学院实验报告<班级>_<学号>_<实验X>.RAR文件形式交付指导老师。
一、实验目的1.熟悉上机环境,进一步掌握语言的结构特点。
2.掌握线性表的顺序存储结构的定义及实现。
3.掌握线性表的链式存储结构——单链表的定义及实现。
4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。
5.掌握线性表在链式存储结构——单链表中的各种基本操作。
二、实验内容1.顺序线性表的建立、插入及删除。
2.链式线性表的建立、插入及删除。
三、实验步骤1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。
2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。
3.建立一个带头结点的单链表,结点的值域为整型数据。
要求将用户输入的数据按尾插入法来建立相应单链表。
四、程序主要语句及作用程序1的主要代码(附简要注释)public struct sequenlist{public const int MAXSIZE=1024; /*最大值为1024*/public elemtype[] vec;public int len; /* 顺序表的长度 */public sequenlist( int n){vec=new elemtype[MAXSIZE ];len = n;}};class Program{static void Main(string[] args){sequenlist list1 = new sequenlist(5);for (int i = 0; i < 5; i++){list1.vec[i] = i;}for (int i = 0; i < 5; i++){Console.Write("{0}---", list1.vec[i]) ;}Console.WriteLine("\n");Console.WriteLine("表长:{0}\n",list1.len );Console.ReadKey();}}程序2的主要代码(附简要注释)public void insertlist(int i, int x){if (len >= MAXSIZE)throw new Exception("上溢"); /*长度大于最大值则抛出异常*/if (i < 1 || i > len + 1)throw new Exception("位置");/插入位置小于1或大于len+1则抛出插入位置错误的异常for (int j = len; j >= i; j--)vec[j] = vec[j - 1]; //注意第j个元素存在数组下标为j-1处vec[i - 1] = x;len++;}};class Program{static void Main(string[] args){sequenlist list2 = new sequenlist(7);list2.vec[0] = 21;list2.vec[1] = 23;list2.vec[2] = 14;list2.vec[3] = 5;list2.vec[4] = 56;list2.vec[5] = 17;list2.vec[6] = 31;Console.Write("请输入第i个位置插入元素:");int loc =Convert.ToInt32( Console.ReadLine());Console.Write("请输入第{0}个位置插入的元素:", loc);int ele = Convert.ToInt32(Console.ReadLine());Console.WriteLine("插入前的线性表:");for (int i = 0; i < list2.len ; i++){Console.Write("{0}---", list2.vec[i]);}Console.WriteLine("\n");list2.insertlist(loc, ele);Console.WriteLine("插入后的线性表:");for (int i = 0; i < list2.len ; i++){Console.Write("{0}---", list2.vec[i]);}Console.WriteLine("\n");Console.ReadKey();}}程序3的主要代码(附简要注释)class Node{private int num;public int Num{set { num = value; }/输入值get { return num; }/获得值}private Node next;public Node Next{set { next = value; }get { return next; }}}class Pp{static void Main(string[] args){Node head;Node tempNode, tempNode1;int i;head = new Node();Console.WriteLine("输入六项数据:\n");Console.Write("输入第1项数据:");head.Num = Convert.ToInt32(Console.ReadLine());head.Next = null;tempNode = head;for (i = 1; i < 6; i++){tempNode1 = new Node();Console.Write("输入第{0}项数据:",i+1);tempNode1.Num = Convert.ToInt32(Console.ReadLine());/插入项转换为整形数值 tempNode1.Next = null;tempNode.Next = tempNode1;tempNode = tempNode.Next;}Console.WriteLine("线性表:");tempNode = head;for (i = 0; i < 6; i++){Console.Write("{0}", tempNode.Num);if (i < 5){Console.Write("--");}tempNode = tempNode.Next;}Console.ReadKey();}}五、程序运行结果截图程序1程序2程序3六、收获,体会及问题(写得越详细、越个性化、越真实越好,否则我不知道你做这个实验的心路历程,也就无法充分地判断你是否是独立完成的这个实验、你是否在做这个实验时进行了认真仔细地思考、通过这个实验你是否在实践能力上得到了提高)这次试验刚开始做时完全不知道从哪下手,才刚上了几节课,对于线性表、链式表都不是理解的很透彻,不知道用哪个软件编写程序。
《数据结构》实验报告参考模板

图的创建与遍历.一、实验目的1.掌握图的含义;2.掌握用邻接矩阵和邻接表的方法描述图的存储结构;3.理解并掌握深度优先遍历和广度优先遍历的存储结构。
二、实验要求1.认真阅读和掌握本实验的参考程序。
2.按照对图的操作需要,在创建好图后再通过遍历算法验证创建结果。
3.保存程序的运行结果,并结合程序进行分析。
三、实验内容以下参考程序是按邻接表的方法创建图,然后用深度优先遍历方法遍历图。
请认真理解程序,然后实现图的广度优先遍历。
四、程序流程图、算法及运行结果5-1#include "stdio.h"#define maxsize 1024 /*假定线性表的最大长度为1024*/#define n 100 /* 图的顶点最大个数 */typedef int datatype; /*假定线性表元素的类型为整型*/typedef char VEXTYPE; /* 顶点的数据类型 */typedef float ADJTYPE; /* 权值类型 */typedef struct{VEXTYPE vexs[n] ; /* 顶点信息数组 */ADJTYPE arcs[n][n] ; /* 边权数组 */int num ; /* 顶点的实际个数 */} GRAPH;/* 1.置空图 */void GraphInit(GRAPH *L){L->num=0;}/* 2.求结点数 */int GraphVexs(GRAPH *L){return(L->num);}/* 3.创建图 */void GraphCreate(GRAPH *L){int i,j;GraphInit(L);printf("请输入顶点数目:");scanf("%d",&L->num);printf("请输入各顶点的信息(单个符号):");for(i=0;i<L->num;i++){fflush(stdin);scanf("%c",&L->vexs[i]);}printf("请输入边权矩阵的信息:");for(i=0;i<L->num;i++){for(j=0;j<L->num;j++){scanf("%f",&L->arcs[i][j]);}}printf("图已经创建完毕!");}/* 4.图的输出 */void GraphOut(GRAPH L){int i,j;printf("\n图的顶点数目为:%d",L.num);printf("\n图的各顶点的信息为:\n");for(i=0;i<L.num;i++)printf("%c ",L.vexs[i]);printf("\n图的边权矩阵的信息为:\n");for(i=0;i<L.num;i++){for(j=0;j<L.num;j++){printf("%6.2f ",L.arcs[i][j]);}printf("\n");}printf("图已经输出完毕!");}/* 5.图的深度周游 */void DFS(GRAPH g,int qidian,int mark[])/* 从第qidian个点出发深度优先周游图g中能访问的各个顶点 */ {int v1;mark[qidian]=1;printf("%c ",g.vexs[qidian]);for(v1=0;v1<g.num;v1++){if(g.arcs[qidian][v1]!=0&&mark[v1]==0)DFS(g,v1,mark);}}/* 6.图的深度周游 */void GraphDFS(GRAPH g)/* 深度优先周游图g中能访问的各个顶点 */{int qidian,v,v1,mark[maxsize];printf("\n深度周游:");printf("\n请输入起点的下标:");scanf("%d",&qidian);for(v=0;v<g.num;v++){mark[v]=0;}for(v=qidian;v<g.num+qidian;v++){v1=v%g.num;if(mark[v1]==0)DFS(g,v1,mark);}}/* 队列元素的数据类型 */typedef int DATATYPE;typedef struct{DATATYPE data[maxsize]; /* 队中元素 */int front,rear; /* 队头元素下标、队尾元素后面位置的下标 */} SEQQUEUE;void QueueInit(SEQQUEUE *sq)/* 将顺序循环队列sq置空(初始化) */{sq->front=0;sq->rear=0;}int QueueIsEmpty(SEQQUEUE sq)/* 如果顺序循环队列sq为空,成功返回1,否则返回0 */{if (sq.rear==sq.front)return(1);elsereturn(0);}int QueueFront(SEQQUEUE sq,DATATYPE *e)/* 将顺序循环队列sq的队头元素保存到e所指地址,成功返回1,失败返回0 */ {if(QueueIsEmpty(sq)){ printf("queue is empty!\n");return 0;}else{ *e=sq.data[(sq.front)]; return 1;}}int QueueIn (SEQQUEUE *sq,DATATYPE x)/* 将元素x入队列sq的队尾,成功返回1,失败返回0 */ {if (sq->front==(sq->rear+1)%maxsize){printf("queue is full!\n");return 0;}else{sq->data[sq->rear]=x;sq->rear=(sq->rear+1)%maxsize;return(1);}}int QueueOut(SEQQUEUE *sq)/* 将队列sq队首元素出队列,成功返回1,失败返回0 */ {if(QueueIsEmpty(*sq)){printf("queue is empty!\n");return 0;}else{sq->front=(sq->front+1)%maxsize;return 1;}}/* 7.图的广度周游 */void BFS(GRAPH g,int v,int mark[])/* 从v出发广度优先周游图g中能访问的各个顶点 */ {int v1,v2;SEQQUEUE q;QueueInit(&q);QueueIn(&q,v);mark[v]=1;printf("%c ",g.vexs[v]);while(QueueIsEmpty(q)==0){QueueFront(q,&v1);QueueOut(&q);for(v2=0;v2<g.num;v2++){if(g.arcs[v1][v2]!=0&&mark[v2]==0){QueueIn(&q,v2);mark[v2]=1;printf("%c ",g.vexs[v2]); }}}}/* 8.图的广度周游 */void GraphBFS(GRAPH g)/* 深度优先周游图g中能访问的各个顶点 */ {int qidian,v,v1,mark[maxsize];printf("\n广度周游:");printf("\n请输入起点的下标:");scanf("%d",&qidian);for(v=0;v<g.num;v++){mark[v]=0;}for(v=qidian;v<g.num+qidian;v++){v1=v%g.num;if(mark[v1]==0)BFS(g,v1,mark);}}void main(){GRAPH tu;GraphCreate(&tu);GraphOut(tu);GraphDFS(tu);GraphBFS(tu);}友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!。
数据结构 实验报告完整版

四川师范大学计算机学院实验报告册院系名称:计算机科学学院课程名称:数据结构实验学期2010 年至2011 年第一学期专业班级:2010级教育技术学姓名:学号:指导教师:实验最终成绩:实验报告须知1.学生填写实验报告应按规范填写,填写格式见由任课老师给出的实验报告样本;2.学生应填写的内容包括:封面相关栏目、第一页中‘本学期(年)开设实验课程情况一览表’中的实验名称、学时数;每次报告中的实验性质、同组人姓名、实验日期、以及实验报告中的一至五项;3.教师填写内容为:实验评价、每次报告成绩、第一页中‘本学期(年)开设实验课程情况一览表’中成绩、及封面的实验最终成绩;4.学生实验结束后,教师应对学生实验结果进行核实,学生方可离开实验室。
5、实验成绩等级分为(90-100分)优,(80-89分)良,(70-79分)中,(60-69分)及格,(59分)不及格。
6.本实验册应妥善保管,本课程实验结束后应交回实验室。
本学期(年)开设实验课程情况一览表实验报告(1)分析:(1)类C语言面对对象,而C语言面对过程;(2)核心算法就相当于C语言的程序;(3)初步了解三元组的建立等知识;(4)初步了解利用C++编程的步骤及编程的组成部分;(5)初次接触还是对很多地方倍感疑惑,需要多多操作理解;实验报告(2)实验名称线性表实验:顺序存储、链式存储同组人姓名实验性质□基本操作■验证性■综合性□设计性实验日期2010年10月9日实验成绩教师评价:实验预习□实验操作□实验结果□实验报告□其它□五、实验结果的分析与评价结果:1)顺序存储2)链式存储分析:实验报告(3)五、实验结果的分析与评价结果:1)括号匹配2)队列存储1.链式存储队列2.循环存储队列分析:通过此次的数据结构实验,让我对队列的基本结构有了进一步了解了,以及队列上一些基本操作的实现,掌握了队列在我们实际生活中的应用以及在编程时的基本技巧.不过在编程过程中还是出现了让人头疼的地方,不过同过自己的翻阅资料还是可以独立的解决编程中的问题的,通过本次的实验让自己所学的知识得到了进一步的巩固,加深了对C语言的了解.实验报告(4)实验名称稀疏矩阵实验同组人姓名实验性质□基本操作□验证性■综合性□设计性实验日期实验成绩教师评价:实验预习□实验操作□实验结果□实验报告□其它□教师签名:分析:注意与C语言的矩阵转置相区分;不要混淆这两个的方案;实验报告(5)。
数据结构实验报告范例参考模板

《数据结构与算法》实验报告专业班级姓名学号实验项目实验一二叉树的应用实验目的1、进一步掌握指针变量的含义及应用。
2、掌握二叉树的结构特征,以及各种存储结构的特点及使用范围。
3、掌握用指针类型描述、访问和处理二叉树的运算。
实验内容题目1:编写一个程序,采用一棵二叉树表示一个家谱关系。
要求程序具有如下功能:(1)用括号表示法输出家谱二叉树,(2)查找某人的所有儿子,(3)查找某人的所有祖先。
算法设计分析(一)数据结构的定义为了能够用二叉树表示配偶、子女、兄弟三种关系,特采用以下存储关系,则能在二叉树上实现家谱的各项运算。
二叉树型存储结构定义为:typedef struct SNODE{char name[MAX]; //人名struct SNODE *left; //指向配偶结点struct SNODE *right; //指向兄弟或子女结点}FNODE;(二)总体设计实验由主函数、家谱建立函数、家谱输出函数、儿子查找函数、祖先查找函数、结点定位函数、选择界面函数七个函数共同组成。
其功能描述如下:(1)主函数:统筹调用各个函数以实现相应功能void main()(2)家谱建立函数:与用户交互建立家族成员对应关系void InitialFamily(FNODE *&head) //家谱建立函数(3)家谱输出函数:用括号表示法输出家谱输出形式为:父和母(子1和子妻1(孙1),子2和子妻2(孙2))void PrintFamily(FNODE *head) //家谱输出函数(4)儿子查找函数:在家谱中查找到某人所有的子女并输出,同时也能辨别出其是否为家族成员与是否有子女void FindSon(FNODE *b,char p[]) //儿子查找函数(5)祖先查找函数:在家谱中查找到某人所有的祖先并输出,同时也能辨别出其是否为家族中成员。
int FindAncestor(FNODE *head,char son[ ]) //祖先查找函数(6)结点定位函数:在家谱中找到用户输入人名所对应的结点。
大学数据结构实验报告模板

1.实验目的本实验的目的是通过实际操作、设计和分析数据结构的基本概念和算法,提高学生对数据结构的理解和应用能力。
2.实验背景在计算机科学与技术领域,数据结构是一种组织和存储数据的方式,它可以提高数据的访问效率和操作速度。
了解和熟练掌握数据结构的概念、原理和应用,对于计算机相关专业学生来说至关重要。
3.实验内容3.1 实验一:线性表的操作3.1.1 实验目标了解线性表的基本概念和操作,并能够编写对应的代码。
3.1.2 实验步骤a.实现线性表的基本操作,包括插入、删除、查找等。
b.分析并比较不同线性表实现方式的优缺点。
c.进行相关实验并记录结果。
3.1.3 实验结论通过本次实验,我加深了对线性表的理解,并了解了不同实现方式的差异。
3.2 实验二:栈和队列的应用3.2.1 实验目标了解栈和队列的基本概念和应用,掌握它们的各种操作。
3.2.2 实验步骤a.实现栈和队列的基本操作,如入栈、出栈、入队、出队等。
b.进行相关实验,验证栈和队列的应用场景。
3.2.3 实验结论通过本次实验,我深入了解了栈和队列的应用,并通过实验验证了它们的有效性。
4.实验结果与分析在实验过程中,我们通过对数据结构的操作和应用,得出了一系列实验结果并进行了相关分析。
这些结果对我们理解和应用数据结构起到了重要的作用。
5.实验总结与体会通过完成本次实验,我对数据结构的相关概念和应用有了更加深入的了解。
同时,在实验中我不仅掌握了相应的编程技巧,还培养了解决问题的能力和团队合作精神。
6.附件本文档附上了实验过程中所使用的代码、实验结果截图等相关附件,供参考和进一步研究使用。
7.法律名词及注释在本文档中涉及的法律名词及其注释如下:●版权:指作为文学、艺术和科学的创作成果的智力财产权。
●专利:指发明者对新发明所拥有的独占权。
●商标:指用于区别商品和服务来源的标识符,如商标、服务标志等。
数据结构实验报告模板

实验报告:数据结构
一、实验目的
本次实验的目的是熟悉数据结构的基本概念和实现,掌握数据结构的结构及操作,并能够熟练使用数据结构实现算法。
二、实验内容
本次实验的内容包括:数据结构的基本概念、数据结构的结构和操作、数据结构的实现和应用。
1、数据结构的基本概念
数据结构是指存储和组织数据的结构,是指以某种特定的方式来组织和存储数据,以便于有效地访问和操作数据。
数据结构可以分为两大类:线性结构和非线性结构。
线性结构是指数据元素之间存在一对一的线性关系,如数组、链表、栈和队列等;而非线性结构是指数据元素之间存在多对多的关系,如树、图等。
2、数据结构的结构和操作
数据结构的结构指的是数据元素之间的关系,是指数据元素之间的逻辑结构,比如数组的结构就是元素之间的线性关系,而树的结构则是元素之间的多对多关系。
数据结构的操作指的是操作数据元素的过程,比如插入、删除、查找等。
3、数据结构的实现和应用
数据结构的实现指的是用代码实现数据结构的过程,比如用C语言实现链表的过程,用Java实现树的过程等。
数据结构的应用指的是利用数据结构解决实际问题的过程,比如用栈实现括号匹配、用队列实现模拟银行等。
三、实验结果
通过本次实验,我对数据结构的基本概念、结构和操作、实现和应用有了更深入的了解,并能够熟练使用数据结构实现算法。
四、总结
本次实验主要介绍了数据结构的基本概念、结构和操作、实现和应用,经过本次实验,我对数据结构有了更深入的了解,并能够熟练使用数据结构实现算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
学期:2010-2011学年第一学期指导教师:杨华莉成绩:实验一顺序表的基本操作一、实验目的1.掌握使用VC++6.0调试程序的基本方法;2.掌握线性表的顺序存储结构的类型定义;3.掌握顺序表的基本操作的实现,如:插入、删除、遍历、查找、排序、修改、合并等;4.掌握顺序表的应用。
二、实验要求1.认真阅读和掌握本实验的示例程序。
2.上机运行示例程序,打印出程序的运行结果,并作必要的说明。
3.对示例程序,按照对线性表的操作需要,在程序中至少添加2个顺序表的相关操作。
如:i.查找并显示分数在区间[a,b)的学生信息;ii.查找并显示最高分或最低分学生信息;iii.统计不及格或及格人数及所占比例;iv.将信息表按学号、姓名或分数升序或降序排列;v.按学号顺序进行数据元素的插入;vi.删除指定学号或姓名的学生信息;vii.修改某个学生的信息;viii.其它。
4.重新改写主函数(要求必需调用自己添加的操作),打印出文件清单(自己添加的函数、修改后的主函数和运行结果)。
5.对修改后的程序,分析每一个算法(函数)的时间复杂度。
6.根据上述要求撰写实验报告,并简要给出算法设计小结和心得。
三、实验环境1.台式计算机每人一台;2.软件:Visual C++6.0四、实验内容和实验结果一.示例程序运行结果及说明二.自己添加的新函数(至少2个),要求加必要的注释。
SqList Delete_SqList(SqList &L)//删除学生信息{Elemtype x;int i=0;int choice=DMenu();char name[25];int num,k;if(!L.length){printf("表为空,无法删除!");exit(0);}switch(choice){case 1: //按姓名删除printf("\n请输入要删除的学生的姓名\n");scanf("%s",&name);k=strcmp(name,L.data[i].name);//比较姓名if(k==0){x=L.data[i-1];for(int m=L.length-1;m>=i-1;--m)L.data[i-1]=L.data[i];--L.length;break;}case 2: //按学号删除printf("\n请输入要删除学生的学号\n");scanf("%d",&num);if(num==L.data[i].num){for(int m=L.length-1;m>=i-1;--m)L.data[i-1]=L.data[i];--L.length;break;}case 3:break;}return L;}void TongJi_SqList(SqList L)//统计信息表中学生的信息{int i;int choice=TMenu();//选择所要统计的方式的菜单switch(choice){case 1: for(i=0;i<L.length;i++)//统计男生信息if(L.data[i].sex=='m')PrintElem(L.data[i]);break;case 2: for(i=0;i<L.length;i++)//统计女生的信息if(L.data[i].sex=='f')PrintElem(L.data[i]);break;case 3: for(i=0;i<L.length;i++)//统计不及格的人if(L.data[i].score<60)printf(“不及格的为:”);PrintElem(L.data[i]);break;case 4: for(i=0;i<L.length;i++)//统计优秀的人if(L.data[i].score>90)printf(“分数在90分以上的为:”);PrintElem(L.data[i]);break;case 5: break;}}void PaiXu_SqList(SqList L)//排序{int i,j,k;int choice=PMenu();//选择菜单switch(choice){case 1: //按序号升序排列for(i=0;i<L.length;i++)for(j=0;j<L.length-i;j++)if(L.data[j].num>L.data[j+1].num){k=L.data[j].num;L.data[j].num=L.data[j+1].num; //冒泡法排序L.data[j+1].num=k;}for(j=0;j<L.length;j++)//输出排序结果PrintElem(L.data[j]);break;case 2: //按分数降序排列for(i=0;i<L.length;i++)for(j=0;j<L.length-i;j++)if(L.data[j].score<L.data[j+1].score){k=L.data[j].score;L.data[j].score=L.data[j+1].score;L.data[j+1].score=k;}for(j=0;j<L.length;j++)//输出结果PrintElem(L.data[j]);break;case 3: //按分数升序排列for(i=0;i<L.length;i++)for(j=0;j<L.length-i;j++)if(L.data[j].score>L.data[j].score){k=L.data[j].score;L.data[j].score=L.data[j+1].score;L.data[j+1].score=k;}for(j=0;j<L.length;j++)//输出排序结果PrintElem(L.data[j]);break;case 4: break;}}三.改写后的主函数(要求必需调用自己添加的操作)void main(){//通过文件input1.txt输入数据,结果输出到文件output1.txt //打开输入输出文件FILE *in,*out;if((in=fopen("input1.txt","r"))==NULL){ printf("cannot open infile\n");exit(0);}if((out=fopen("output1.txt","w"))==NULL){ printf("cannot open infile\n");exit(0);}int choice;SqList L;Init_SqList(L);//系统文件初始化,构造空表Lwhile(1){choice=Menu();switch(choice){case 1: Creat_SqList(L,in);//导入数据,根据文件input.txt读入的数据建立顺序表Lbreak;case 2: Traver_SqList(L);//查询,输出顺序表break;case 3: Insert_SqList(L);// 在顺序表L中插入一个新元素break;case 4: Delete_SqList(L);break;//删除元素case 5: TongJi_SqList(L);break;//统计case 6: PaiXu_SqList(L);break;//排序case 7: Cheng_SqList(L);break;//修改case 0: SaveList(L,out);fclose(in);fclose(out);exit(-1);break;//保存数据,并退出系统}getchar();}}四.改写后程序的运行结果。
五.简要给出所选示例程序中算法的时间复杂度分析结果。
void PrintElem(Elemtype a);//打印输出数据元素a的各数据项此函数的void Init_SqList(SqList &L);//构造一个空的顺序表Lvoid SaveList(SqList L,FILE *out);//保存顺序表L的数据//建表,从文件读取数据,以尾插法建立顺序表Lvoid Creat_SqList(SqList &L,FILE *in);//查询,遍历顺序表L(输出L中的数据序列)void Traver_SqList(SqList L);void TongJi_SqList(SqList L);void PaiXu_SqList(SqList L);void Cheng_SqList(SqList L);//添加,在顺序表L中插入一个新元素SqList Insert_SqList (SqList &L);SqList Delete_SqList(SqList &L);六.简要给出算法设计小结和心得。
平时我们学C语言视乎都是为了考试或者做一些比较常规的题目,而这次实训却给我们的将所学知识运用于解决实际问题的机会,让人更有激情,这就是编写软件的在雏形,也让我们感受到了编写软件程序的乐趣。
但是不仅仅是如此,更为重要的是在运用所学知识的过程中,记住这些知识,并能够广泛的运用!这一次编写大作业的程序又让我感受到学程序可以锻炼缜密的思维了。
因为平时练习的都是小程序,所以句段比较少,一些错误都很容易被检查出来,但是这次实训却是上百段的语句,难以检查,似乎也没有经验去怎么检查,那一刹那感觉到很急,但又不知如何是好,可是又不轻易的向老师询问,因为好像蛮简单,相信自己能够检查出来,所以我一般都是独立思考的完成的,只有少部分是在老师和与同学讨论下完成的。