数据结构实验报告模板(验证型)

合集下载

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

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

《数据结构》实验报告模板(附实例)---实验一线性表的基本操作实现实验一线性表的基本操作实现及其应用一、实验目的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篇

数据结构实验报告数据结构实验报告精选2篇(一)实验目的:1. 熟悉数据结构的基本概念和基本操作;2. 掌握线性表、栈、队列、链表等经典数据结构的实现方法;3. 掌握数据结构在实际问题中的应用。

实验内容:本次实验主要包括以下几个部分:1. 线性表的实现方法,包括顺序表和链表,分别使用数组和链表来实现线性表的基本操作;2. 栈的实现方法,包括顺序栈和链式栈,分别使用数组和链表来实现栈的基本操作;3. 队列的实现方法,包括顺序队列和链式队列,分别使用数组和链表来实现队列的基本操作;4. 链表的实现方法,包括单链表、双链表和循环链表,分别使用指针链、双向链和循环链来实现链表的基本操作;5. 综合应用,使用各种数据结构来解决实际问题,例如使用栈来实现括号匹配、使用队列来实现马铃薯游戏等。

实验步骤及结果:1. 线性表的实现方法:a) 顺序表的基本操作:创建表、插入元素、删除元素、查找元素等;b) 链表的基本操作:插入节点、删除节点、查找节点等;c) 比较顺序表和链表的优缺点,分析适用场景。

结果:通过实验,确认了顺序表适用于频繁查找元素的情况,而链表适用于频繁插入和删除节点的情况。

2. 栈的实现方法:a) 顺序栈的基本操作:进栈、出栈、判空、判满等;b) 链式栈的基本操作:进栈、出栈、判空、判满等。

结果:通过实验,掌握了栈的基本操作,并了解了栈的特性和应用场景,例如括号匹配。

3. 队列的实现方法:a) 顺序队列的基本操作:入队、出队、判空、判满等;b) 链式队列的基本操作:入队、出队、判空、判满等。

结果:通过实验,掌握了队列的基本操作,并了解了队列的特性和应用场景,例如马铃薯游戏。

4. 链表的实现方法:a) 单链表的基本操作:插入节点、删除节点、查找节点等;b) 双链表的基本操作:插入节点、删除节点、查找节点等;c) 循环链表的基本操作:插入节点、删除节点、查找节点等。

结果:通过实验,掌握了链表的基本操作,并了解了链表的特性和应用场景。

《数据结构》实验1实验报告

《数据结构》实验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实现树的过程等。

数据结构的应用指的是利用数据结构解决实际问题的过程,比如用栈实现括号匹配、用队列实现模拟银行等。

三、实验结果
通过本次实验,我对数据结构的基本概念、结构和操作、实现和应用有了更深入的了解,并能够熟练使用数据结构实现算法。

四、总结
本次实验主要介绍了数据结构的基本概念、结构和操作、实现和应用,经过本次实验,我对数据结构有了更深入的了解,并能够熟练使用数据结构实现算法。

数据结构试验报告格式

数据结构试验报告格式

实验项目名称 顺序表基本算法的设计与实现实验分数班级:计算085 姓名 学号 完成时间一、实验目的:**********二、实验要求:**********三、实验内容:1. 顺序表的初始化;2. 顺序表的建立;3. 顺序表的插入。

四、实验设计与实现:1. 顺序表的初始化Status Init_SqList(SqList &L)顺序表的初始化是通过malloc 函数在内存中申请LIST_INIT_SIZE 个空间,并将顺序表的表长length 设置为0,空间个数listsize 设置为初始分配量(1) 申请空间 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); (2) 置表长为0 L.length=0;(3) 设置空间个数L.listsize= LIST_INIT_SIZE; 2. 顺序表的建立 Status Create_SqList (SqList &L ,int n) 顺序表的建立是在顺序表初始化后,通过for 循环往顺序 表的存储空间中读入n 个数据元素,根据顺序存储的特点: Loc(a i )=Loc(a 1)+(i-1)*L 实现随机存储。

由于实验中将ElemType 看作是int ,所以这里的L 是2个字节,线性表元素a i 在程序中 用L.elem[i-1]表示。

用循环实现n 个元素的读入: for(i=1;i<=ni++) cout<<“请读入第”<<i<<“个数据元素”;cin>> L.elem[i-1]; 3. 顺序表的插入Status Insert_SqList (SqList &L ,int i ElemType e)顺序表的插入是在顺序表建立后,在顺序表的第i 个元素之前插入数据元素e 。

首先判断插入位置是否合法;其次,通过L.length 和L.listsize 判断顺序表中是否有多余的空间;如果空间满,则通过realloc 函数重新申请更大的空间,后完成插入操作;否则,直接完成插入操作。

数据结构实验报告

数据结构实验报告

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

数据结构实验是计算机科学专业的必修实践课程之一,通过实验,我们可以探索不同的数据结构类型,并理解它们的优势和应用。

本报告旨在总结我在数据结构实验中的学习和实践经验。

二、实验目的本次实验的主要目的是熟练掌握线性表、二叉树和图等常见数据结构的构建与操作方法。

通过编写代码,我们可以加深对这些数据结构的理解并且通过实验验证其性能。

三、实验过程1.线性表实验:在这一部分,我们使用C++语言实现了顺序表和链表两种线性表的数据结构,并比较了它们在插入、删除、查找等操作上的性能差异。

2.二叉树实验:我们在实验中实现了二叉树的构建和遍历算法,包括前序遍历、中序遍历和后序遍历。

通过实验,我们发现不同的遍历算法对于不同的问题有不同的效果。

3.图实验:本次实验中,我们实现了图的邻接矩阵和邻接表两种存储结构,并比较了它们在图的遍历和搜索等操作上的性能差异。

同时,我们还实现了最小生成树和最短路径算法,这些算法对实际应用具有重要意义。

四、实验结果根据我们的实验结果,我们可以得出以下结论:1.对于插入和删除等频繁变动的操作,链表比顺序表更适合,因为链表的插入和删除操作时间复杂度为O(1),而顺序表的插入和删除操作时间复杂度为O(n)。

2.在二叉树的遍历中,前序遍历是最简单和常用的一种方式,而中序遍历和后序遍历在某些特定情况下更有用。

例如,在寻找路径上的节点时,后序遍历可以更方便地找出叶子节点。

3.在图的存储中,邻接表比邻接矩阵更节省空间,特别在稀疏图的情况下。

而邻接矩阵在搜索操作中更高效,因为邻接矩阵可以在O(1)的时间内检查两个节点之间是否存在边。

4.最小生成树和最短路径算法在实际生活中有很多应用,例如在城市规划和网络布线中。

通过实验可以发现,Prim算法和Dijkstra算法都可以有效地解决这些问题。

五、实验总结通过本次实验,我对线性表、二叉树和图等常见数据结构有了更深入的了解,并且通过实践中的编码和测试,提高了我的编程能力和问题解决能力。

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

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

深 圳 大 学 实 验 报 告课程名称: 数据结构实验与课程设计 实验项目名称: 实验一:顺序表的应用 学院: 计算机与软件学院 专业: 指导教师: **报告人: 文成 学号: ********** 班级: 5 实验时间: 2012-9-17实验报告提交时间: 2012-9-24教务部制一、实验目的与要求:目的:1.掌握线性表的基本原理2.掌握线性表地基本结构3.掌握线性表地创建、插入、删除、查找的实现方法要求:1.熟悉C++语言编程2.熟练使用C++语言实现线性表地创建、插入、删除、查找的实现方法二、实验内容:Problem A: 数据结构——实验1——顺序表例程Description实现顺序表的创建、插入、删除、查找Input第一行输入顺序表的实际长度n第二行输入n个数据第三行输入要插入的新数据和插入位置第四行输入要删除的位置第五行输入要查找的位置Output第一行输出创建后,顺序表内的所有数据,数据之间用空格隔开第二行输出执行插入操作后,顺序表内的所有数据,数据之间用空格隔开第三行输出执行删除操作后,顺序表内的所有数据,数据之间用空格隔开第四行输出指定位置的数据Sample Input611 22 33 44 55 66888 352Sample Output11 22 33 44 55 6611 22 888 33 44 55 6611 22 888 33 55 6622HINT第i个位置是指从首个元素开始数起的第i个位置,对应数组内下标为i-1的位置Problem B: 数据结构——实验1——顺序表的数据交换Description实现顺序表内的元素交换操作Input第一行输入n表示顺序表包含的·n个数据第二行输入n个数据,数据是小于100的正整数第三行输入两个参数,表示要交换的两个位置第四行输入两个参数,表示要交换的两个位置Output第一行输出创建后,顺序表内的所有数据,数据之间用空格隔开第二行输出执行第一次交换操作后,顺序表内的所有数据,数据之间用空格隔开第三行输出执行第二次交换操作后,顺序表内的所有数据,数据之间用空格隔开注意加入交换位置的合法性检查,如果发现位置不合法,输出error。

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

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

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

数据结构课程实验报告

数据结构课程实验报告

数据结构课程实验报告目录1. 实验简介1.1 实验背景1.2 实验目的1.3 实验内容2. 实验方法2.1 数据结构选择2.2 算法设计2.3 程序实现3. 实验结果分析3.1 数据结构性能分析3.2 算法效率比较3.3 实验结论4. 实验总结1. 实验简介1.1 实验背景本实验是数据结构课程的一次实践性操作,旨在帮助学生加深对数据结构的理解和运用。

1.2 实验目的通过本实验,学生将学会如何选择合适的数据结构来解决特定问题,了解数据结构与算法设计的关系并能将其应用到实际问题中。

1.3 实验内容本实验将涉及对一些经典数据结构的使用,如链表、栈、队列等,并结合具体问题进行算法设计和实现。

2. 实验方法2.1 数据结构选择在实验过程中,需要根据具体问题选择合适的数据结构,比如针对需要频繁插入删除操作的情况可选择链表。

2.2 算法设计针对每个问题,需要设计相应的算法来实现功能,要考虑算法的效率和实际应用情况。

2.3 程序实现根据算法设计,编写相应的程序来实现功能,并进行调试测试确保程序能够正确运行。

3. 实验结果分析3.1 数据结构性能分析在实验过程中,可以通过对不同数据结构的使用进行性能分析,如时间复杂度和空间复杂度等,以便选择最优的数据结构。

3.2 算法效率比较实验完成后,可以对不同算法在同一数据结构下的效率进行比较分析,找出最优算法。

3.3 实验结论根据实验结果分析,得出结论并总结经验教训,为后续的数据结构和算法设计提供参考。

4. 实验总结通过本次实验,学生将对数据结构与算法设计有更深入的了解,并能将所学知识应用到实际问题中,提高自己的实践能力和解决问题的能力。

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

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

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

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

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

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

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

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

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

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

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

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

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

大学数据结构实验报告模板

大学数据结构实验报告模板

大学数据结构实验报告模板一、实验目的数据结构实验是计算机相关专业课程中的重要实践环节,通过实验可以加深对数据结构理论知识的理解,提高编程能力和解决实际问题的能力。

本次实验的主要目的包括:1、掌握常见数据结构(如数组、链表、栈、队列、树、图等)的基本操作和实现方法。

2、学会运用数据结构解决实际问题,培养算法设计和分析能力。

3、提高程序设计的规范性和代码质量,培养良好的编程习惯。

4、熟悉编程语言(如C、C++、Java 等)的开发环境和调试技巧。

二、实验环境1、操作系统:_____2、编程语言:_____3、开发工具:_____三、实验内容(一)线性表的实现与操作1、顺序表的实现定义顺序表的数据结构。

实现顺序表的初始化、插入、删除、查找等基本操作。

2、链表的实现定义链表的数据结构(单链表、双向链表或循环链表)。

实现链表的创建、遍历、插入、删除等操作。

(二)栈和队列的实现与应用1、栈的实现定义栈的数据结构。

实现栈的入栈、出栈、栈顶元素获取等操作。

利用栈解决括号匹配、表达式求值等问题。

2、队列的实现定义队列的数据结构。

实现队列的入队、出队、队头元素获取等操作。

利用队列实现广度优先搜索、任务调度等应用。

(三)树的实现与遍历1、二叉树的实现定义二叉树的数据结构(二叉链表或顺序存储)。

实现二叉树的创建、前序遍历、中序遍历、后序遍历。

2、二叉搜索树的实现实现二叉搜索树的插入、删除、查找操作。

3、平衡二叉树(如 AVL 树)的实现(选做)理解平衡二叉树的平衡调整算法。

实现平衡二叉树的插入和删除操作,并保持树的平衡。

(四)图的表示与遍历1、图的邻接矩阵和邻接表表示定义图的数据结构(邻接矩阵或邻接表)。

实现图的创建和初始化。

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

应用图的遍历解决最短路径、连通性等问题。

(五)排序算法的实现与性能比较1、常见排序算法的实现实现冒泡排序、插入排序、选择排序、快速排序、归并排序等算法。

数据结构实验报告模板(验证型)

数据结构实验报告模板(验证型)

学期: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();}}四.改写后程序的运行结果。

数据结构顺序栈验证实验报告

数据结构顺序栈验证实验报告

数据结构顺序栈验证实验报告数据结构顺序栈验证实验报告一、实验目的本实验旨在验证数据结构中顺序栈的基本操作和特性,包括入栈、出栈、判空、判满等操作。

二、实验原理顺序栈是一种采用数组来实现的线性数据结构。

它具有先进后出(Last In First Out,LIFO)的特性,即最后入栈的元素最先出栈。

顺序栈的主要操作包括入栈和出栈。

1.入栈操作:将元素添加到栈的末尾,同时更新栈顶指针。

2.出栈操作:从栈的末尾删除元素,同时更新栈顶指针。

3.判空操作:判断栈是否为空,即栈顶指针是否为-1.4.判满操作:判断栈是否已满,即栈顶指针是否达到栈的最大容量。

三、实验过程1.设计顺序栈的数据结构,包括定义栈的最大容量和栈顶指针。

2.实现入栈操作,将元素添加到栈中,并更新栈顶指针。

3.实现出栈操作,从栈中删除元素,并更新栈顶指针。

4.实现判空操作,判断栈是否为空。

5.实现判满操作,判断栈是否已满。

6.编写测试用例,对上述操作进行测试。

四、实验结果经过测试,顺序栈的各项操作均运行正常,符合预期的结果。

五、实验分析1.顺序栈的入栈操作的时间复杂度为O(1),出栈操作的时间复杂度为O(1)。

2.顺序栈的空间复杂度为O(n),其中n为栈的最大容量。

3.顺序栈的优点是结构简单,操作方便快捷。

缺点是无法动态调整栈的大小。

六、实验总结通过本次实验,充分理解了顺序栈的基本操作和特性。

顺序栈在实际应用中具有一定的局限性,但在某些场景下仍然是一种有效的数据结构。

附件:无法律名词及注释:1.数据结构:一种组织和存储数据的方式,旨在提高数据操作的效率和空间利用率。

2.顺序栈:使用数组实现的线性数据结构,具有先进后出的特性。

3.入栈:将元素添加到栈的末尾。

4.出栈:从栈的末尾删除元素。

5.判空:判断栈是否为空。

6.判满:判断栈是否已满。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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语言视乎都是为了考试或者做一些比较常规的题目,而这次实训却给我们的将所学知识运用于解决实际问题的机会,让人更有激情,这就是编写软件的在雏形,也让我们感受到了编写软件程序的乐趣。

但是不仅仅是如此,更为重要的是在运用所学知识的过程中,记住这些知识,并能够广泛的运用!这一次编写大作业的程序又让我感受到学程序可以锻炼缜密的思维了。

因为平时练习的都是小程序,所以句段比较少,一些错误都很容易被检查出来,但是这次实训却是上百段的语句,难以检查,似乎也没有经验去怎么检查,那一刹那感觉到很急,但又不知如何是好,可是又不轻易的向老师询问,因为好像蛮简单,相信自己能够检查出来,所以我一般都是独立思考的完成的,只有少部分是在老师和与同学讨论下完成的。

相关文档
最新文档