《数据结构》实验讲义
数据结构 实验3讲课讲稿

数据结构实验3《数据结构》实验报告年级_2012级__ 学号_ 姓名 _ 成绩______专业_计算机科学与技术实验地点__指导教师_实验项目:实验三队列实验性质设计性实验日期:一、实验目的:1、掌握队列及其基本操作的实现。
2、进一步掌握实现数据结构的编程方法。
二、实验内容与要求:1、实验题目一:队列的定义及其相关操作算法的实现要求:编程实现队列的类型定义及其初始化操作、入队操作、出队操作、取队头操作、输出操作等,并对其进行验证。
2、实验题目二:病人看病模拟要求:利用题目一所定义的队列(顺序队或链队)实现病人看病模拟程序,并进行验证给出结果。
三、实验问题描述编写一个程序,反映病人到医院看病,排队看医生的情况。
在病人排队过程中,主要重复两件事:(1)病人到达诊室,将病历本交给护士,拍到等待队列中候诊。
(2)护士从等待队列中取出下一位病人的兵力,该病人进入诊室就诊。
要求模拟病人等待就诊这一过程,程序采用菜单方式,其选项及功能说明如下:(1)排队————输入排队病人的病历号,加入到病人排队队列中。
(2)就诊————病人排队队列中最前面的病人就诊,并将其从队列中删除。
(3)查看排队————从队首到队尾列出所有的排队病人的病历号。
(4)不再排队,余下依次就诊————从队首到队尾列出所有的排队病人的病历号,并退出运行。
(5)下班————退出运行。
四、实验步骤1.实验问题分析此程序采用队列数据结构,存储结构为单链表,采用此种结构一方面可以减少数据复杂程度,增加系统稳定性也利用动态分配内存的方法,便于内存管理,充分利用内存空间2.功能(函数)设计void SeeDoctor(){ int sel,flag=1,find,no;QuType *qu;QNode *p;qu=(QuType *)malloc(sizeof(QuType));qu->front=qu->rear=NULL;}五、实验结果(程序)及分析#include<stdio.h>#include<malloc.h>typedef struct qnode{int data;struct qnode *next;}QNode;typedef struct {QNode *front,*rear;}QuType;void SeeDoctor(){int sel,flag=1,find,no;QuType *qu;QNode *p;qu=(QuType *)malloc(sizeof(QuType));qu->front=qu->rear=NULL;while(flag==1){printf("1:排队 2:就诊 3:查看排队 4:不再排队,余下依次就诊 5:下班请选择:");scanf("%d",&sel);switch(sel){case 1:printf(" >>输入病历号:");do{scanf("%d",&no);find=0;p=qu->front;while(p!=NULL && !find)if(p->data==no)find=1;elsep=p->next;if(find)printf(" >> 输入的病历号重复,重新输入:");}while(find==1);p=(QNode *)malloc(sizeof(QNode));p->data=no;p->next=NULL;if(qu->rear==NULL)qu->front=qu->rear=p;else{qu->rear->next=p;qu->rear=p;}break;case 2:if(qu->front==NULL)printf(" >>没有排队的病人!\n");else{p=qu->front;printf(" >>病人%d就诊\n",p->data);if(qu->rear==p)qu->front=qu->rear=NULL;elsequ->front=p->next;free(p);}break;case 3:if(qu->front == NULL)printf(" >>没有排队的病人!\n");else{p=qu->front;printf(" >>排队病人:");while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}break;case 4:if(qu->front==NULL)printf(" >>没有排队的病人!\n");else{p=qu->front;printf(" >>病人按以下顺序就诊:");while(p!=NULL){printf("%d",p->data);p=p->next;}printf("\n");}flag=0;break;case 5:if(qu->front!=NULL)printf(" >>请排队的病人明天就医!\n"); flag=0;break;}}}int main(){SeeDoctor();return 0;}六、结论与分析在本次试验中进一步理解队列的基本运算的实现,掌握队列的定义及其基本操作,掌握队列的存储结构及基本运算的实现和掌握队列的操作和应用,差不多也提高使用理论知识指导解决实际问题的能力。
数据结构实验讲义

数据结构实验讲义一实验步骤随之计算机性能的提高,它所面临的软件开发的复杂度也日趋增加。
然而,编制一个10,000行的程序的难度绝不仅仅是一个5,000行的程序两倍,因此软件开发需要系统的方法。
一种常用的软件开发方法,是将软件开发过程划分为分析、设计、实现和维护四个阶段。
虽然数据结构课程中的实习题的复杂度远不如(从实际问题中提出来的)一个“真正的,,软件,但为了培养一个软件工作者所应具备的科学工作的方法和作风,我们制订了如下所述完成实习的五个步骤:’(一)问题分析和任务定义通常,实习题目的陈述比较简洁,或者说是有模棱两可的含义。
因此,在进行设计之前,首先应该充分地分析和理解问题,明确问题要求做什么?限制条件是什么。
注意:本步骤强调的是做什么?而不是怎么做。
对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。
例如:输入数据的类型、值的范围以及输入的形式;输出数据的类型、值的范围及输出的形式;若是会话式的输入,则结束标志是什么?是否接受非法的输入?对非法输入的回答方式是什么等。
这一步还应该为调试程序准备好测试数据,包括合法的输入数据和非法形式的输入数据。
(二)数据类型和系统设计在设计这一步骤中需分逻辑设计和详细设计两步实现。
逻辑设计指的是,对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的原则划分模块,定义主程序模块和各抽象数据类型;详细设计则为定义相应的存储结构并写出各函数的伪码算法。
在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基本操作的规格说明尽可能明确具体。
作为逻辑设计的结果,应写出每个抽象数据类型的定义(包括数据结构的描述和每个基本操作的规格说明),各个主要模块的算法,并画出模块之间的调用关系图。
详细设计的结果是对数据结构和基本操作的规格说明作出进一步的求精,写出数据存储结构的类型定义,按照算法书写规范用类c语言写出函数形式的算法框架。
数据结构(第1章)讲义

树
01
02
03
树的定义
树是一种递归定义的数据 结构,其中每个节点可以 有多个子节点,但只有一 个父节点。
树的性质
树具有层次性、有序性和 无环性等性质。
树的表示方法
树可以使用多种方式表示, 如嵌套结构、邻接矩阵等。
森林
森林的定义
森林是由若干棵树组成的集合, 其中每棵树都是一个独立的数据
结构。
森林的性质
社交网络
社交网络中需要处理大量的用户关系和信息,数 据结构在其中发挥着重要的作用。例如,使用图 数据结构可以表示用户之间的关系,使用哈希表 可以快速查找用户信息。
THANKS FOR WATCHING
感谢您的观看
05 排序与查找
排序算法
• 冒泡排序:通过重复地遍历待排序的数列,比较相邻的两个元素,若它们的顺 序错误则交换它们,直到没有需要交换的元素为止。
• 选择排序:在未排序的序列中找到最小(或最大)的元素,存放到排序序列的 起始位置,然后再从剩余未排序的元素中继续寻找最小(或最大)元素,然后 放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
的中间元素开始,如果中间元素正好是目标值,则搜索过程结束;如果目标值 大于或小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且同 样从中间元素开始比较。 • 哈希查找:通过哈希函数将关键字转化为数组下标,然后在对应的数组下标位 置上进行查找。 • 二叉查找树查找:在二叉查找树中进行查找,从根节点开始,如果当前节点的 关键字等于目标值,则查找成功;如果当前节点的关键字大于目标值,则在左 子树中继续查找;如果当前节点的关键字小于目标值,则在右子树中继续查找 。
• 插入排序:将一个数据插入到已经排好序的有序数据中,从而得到一个新的、 个数加一的有序数据。
《数据结构实验》讲义

《数据结构实验》讲义实验1线性表的基本操作所属院系计算机科学与技术所属年级2022-03所属课程数据结构试验实验目的1.掌握线性表的特点及其存储结构2.掌握线性表的基本操作实验要求1.线性表可以用顺序表也可以用单链表实现,鼓励大家用两种方式实现;2.创建线性表时,数据从键盘输入整形数据;3.线性表类型定义和或各种操作的实现,可以用教材给出的方法,也可以自己设计。
实验环境硬件平台:计算机CPU主频2.0G以上;内存128兆以上;软件平台:Window2003或以上版本,ViualC++6.0。
实验内容1.用结构体描述一个线性表;2.创建线性表,在线性表中实现插入、删除、按位置查找、按元素值查找和求表长等操作;3.设计选择式菜单,以选择菜单方式进行操作。
实验步骤实验指导定义顺序表#defineLIST_INIT_SIZE100/某线性表存储空间的初始分配量某/#defineLISTINCREMENT2/某线性表存储空间的分配增量某/tructSqLit{ ElemType某elem;/某存储空间基址某/intlength;/某当前长度某/ intlitize;/某当前分配的存储容量(以izeof(ElemType)为单位)某/};定义算法函数StatuInitLit(SqLit&L)/某算法2.3某/{/某操作结果:构造一个空的顺序线性表某/L.elem=(ElemType某)malloc(LIST_INIT_SIZE某izeof(ElemType));if(!L.elem)e某it(OVERFLOW);/某存储分配失败某/L.length=0;/某空表长度为0某/L.litize=LIST_INIT_SIZE;/某初始存储容量某/returnOK;}StatuLitInert(SqLit&L,inti,ElemTypee)/某算法2.4某/{/某初始条件:顺序线性表L已存在,1≤i≤LitLength(L)+1某//某操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1某/ElemType 某newbae,某q,某p;if(i<1||i>L.length+1)/某i值不合法某/returnERROR;if(L.length>=L.litize){/某当前存储空间已满,增加分配某/if(!(newbae=(ElemType某)realloc(L.elem,(L.litize+LISTINCREMENT)某izeof(ElemType))))e某it(OVERFLOW);/某存储分配失败某/L.elem=newbae;/某新基址某/L.litize+=LISTINCREMENT;//增加存储容量}q=L.elem+i-1;/某q为插入位置某/for(p=L.elem+L.length-1;p>=q;--p)/某插入位置及之后的元素右移某/某(p+1)=某p;某q=e;//插入e++L.length;/某表长增1某/returnOK;}主函数样例voidmain(){SqLitL;Statui;intj;i=InitLit(&L);printf(\初始化L后:L.elem=%uL.length=%dL.litize=%d\\n\for(j=1;j<=5;j++)i=LitInert(L,1,j);printf(\在L的表头依次插入1~5后:某L.elem=\for(j=1;j<=5;j++)cout<printf(\}思考题1、编写一个算法实现两个有序(从小到大)表合并成为一个有序表。
《数据结构》实验指导书

《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课, 上机实习是对学生的一种全面综合训练, 是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。
实习着眼于原理与应用的结合, 使学生学会把学到的知识用于解决实际问题, 起到深化理解和灵活掌握教学内容的目的。
同时, 通过本课程的上机实习, 使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
实习包括的步骤1. 简要描述题目要求, 对问题的描述应避开算法及所涉及的数据类型, 只是对所需完成的任务做出明确的陈述, 例如输入数据的类型、值的范围以及输入的形式, 输出数据的类型、值的范围以及输出的形式。
2. 选定数据结构, 写出算法, 根据自顶向下发展算法的方法, 首先描述算法的基本思想, 然后进行算法细化, 再对所设计的算法的时间复杂性和空间复杂性进行简单分析。
3. 准备好上机所需的程序, 选定一种程序设计语言(如C 语言), 手工编好上机程序, 并进行反复检查, 使程序中的逻辑错误和语法错误减少到最低程度。
对程序中有疑问的地方, 应做出标记, 以便在上机时给予注意。
4.上机输入和调试程序, 在调试程序过程中除了系统的问题以外, 一般应自己独立解决。
在程序调试通过后, 打印输出程序清单和运行结果。
5.上机结束后, 总结和整理实习报告。
实习报告的内容1.简述题目要解决的问题是什么, 并说明输入和输出数据的形式。
2.简述存储结构和算法的基本思想。
3.列出调试通过的源程序。
4.列出上面程序对应的运行结果。
分析程序的优缺点、时空性能以及改进思想, 写出心得体会。
实验一线性表一. 目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现, 提高分析和解决问题的能力。
要求仔细阅读并理解下列例题, 上机通过, 并观察其结果, 然后独立完成后面的实习题。
数据结构实验指导书(本科正式)

《数据结构》实验指导书实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。
【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。
(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。
若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。
若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。
【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立线性表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。
二、用C语言编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立单链表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。
三、用C语言编程实现两个按递增顺序排列线性表的合并1、编程实现合并按递增顺序排列的两个顺序表算法;2、编程实现合并按递增顺序排列的两个单链表算法。
【思考问题】结合实验过程,回答下列问题:1、何时采用顺序表处理线性结构的问题为最佳选择;2、何时采用链表处理线性结构的问题为最佳选择。
【实验报告要求】1、根据对线性表的理解,如何创建顺序表和单链表;2、实现顺序表插入和删除操作的程序设计思路;3、实现链表插入和删除操作的程序设计思路;4、实现两表合并操作的程序设计思路;5、调试程序过程中遇到的问题及解决方案;6、本次实验的结论与体会。
数据结构实验课教案

数据结构实验课教案第一章:实验课概述1.1 实验目的掌握数据结构的基本概念和操作培养动手能力和实际问题解决能力加深对理论知识的理解和应用1.2 实验环境计算机操作系统编程语言(如C/C++,Java等)相关开发工具和调试器1.3 实验内容安排每实验课安排一个或多个相关数据结构的实现和应用每个实验包括理论讲解、代码编写、调试和测试每个实验结束后进行讨论和问题解答第二章:线性表的实现2.1 实验目的掌握线性表的基本操作和实现学习使用数组和指针描述线性表2.2 实验内容实现一个简单的线性表,包括初始化、插入、删除、打印等操作分析线性表的时间复杂度2.3 实验步骤讲解线性表的基本概念和操作编写线性表的实现代码调试和测试代码,验证正确性分析和讨论线性表的时间复杂度第三章:栈和队列的实现3.1 实验目的掌握栈和队列的基本操作和实现学习使用数组和链表描述栈和队列3.2 实验内容实现一个简单的栈,包括初始化、压入、弹出、打印等操作实现一个简单的队列,包括初始化、入队、出队、打印等操作分析栈和队列的时间复杂度3.3 实验步骤讲解栈和队列的基本概念和操作编写栈和队列的实现代码调试和测试代码,验证正确性分析和讨论栈和队列的时间复杂度第四章:线性表的应用4.1 实验目的学习线性表在实际问题中的应用培养实际问题解决能力4.2 实验内容实现一个简单的线性表应用,如学生管理系统、电话簿等分析线性表在应用中的性能和优缺点4.3 实验步骤讲解线性表在实际问题中的应用场景编写线性表应用的实现代码调试和测试代码,验证正确性分析和讨论线性表在应用中的性能和优缺点第五章:实验总结与拓展5.1 实验目的总结本实验课的学习内容拓展对数据结构知识的了解和应用5.2 实验内容总结本实验课所学的数据结构和操作思考和讨论如何将数据结构应用到实际问题中5.3 实验步骤回顾和总结本实验课的学习内容编写实验总结报告思考和讨论数据结构在实际问题中的应用提出问题和拓展建议第六章:树与二叉树6.1 实验目的理解树和二叉树的基本概念掌握树的遍历和操作实现二叉树的基本操作6.2 实验内容实现二叉树的创建、遍历(前序、中序、后序)实现二叉树的查找和销毁分析二叉树的性能6.3 实验步骤讲解树和二叉树的基本概念编写二叉树的实现代码调试和测试代码,验证正确性分析和讨论二叉树的性能第七章:图的应用7.1 实验目的理解图的基本概念掌握图的遍历和操作实现图的算法7.2 实验内容实现图的创建和表示实现图的遍历(深度优先搜索、广度优先搜索)实现图的路径查找和最小树算法7.3 实验步骤讲解图的基本概念和表示方法编写图的实现代码调试和测试代码,验证正确性分析和讨论图的算法性能第八章:排序算法8.1 实验目的理解排序算法的原理掌握常见排序算法的实现分析排序算法的性能8.2 实验内容实现冒泡排序、选择排序、插入排序等简单排序算法实现快速排序、归并排序、堆排序等高级排序算法分析各种排序算法的性能8.3 实验步骤讲解排序算法的基本原理和分类编写排序算法的实现代码调试和测试代码,验证正确性分析和讨论排序算法的性能第九章:查找算法9.1 实验目的理解查找算法的基本概念掌握常见查找算法的实现分析查找算法的性能9.2 实验内容实现顺序查找、二分查找等简单查找算法实现哈希查找、树查找等高级查找算法分析各种查找算法的性能9.3 实验步骤讲解查找算法的基本概念和分类编写查找算法的实现代码调试和测试代码,验证正确性分析和讨论查找算法的性能第十章:实验报告与总结10.1 实验目的总结本实验课的学习内容10.2 实验内容整理实验过程中遇到的问题及解决方案分析实验结果和算法性能提出改进意见和拓展建议10.3 实验步骤整理实验笔记和代码总结实验收获和体会提出改进意见和拓展建议十一章:算法设计与分析11.1 实验目的学习算法设计的基本方法掌握算法分析的技巧提高解决问题的能力11.2 实验内容学习常见的算法设计策略,如贪心算法、动态规划、分治法等分析算法的时间复杂度和空间复杂度11.3 实验步骤介绍算法设计的重要概念和策略通过案例学习不同类型的算法设计编写算法的伪代码或代码实现分析算法的性能,讨论其优缺点十二章:综合应用项目12.1 实验目的综合运用所学的数据结构和算法解决实际问题培养实际项目开发和团队协作能力提高编程和调试技能12.2 实验内容选择一个实际问题,如图书管理系统、学生信息管理系统等设计合适的数据结构和算法来解决问题完成系统的编码和测试12.3 实验步骤确定项目需求和功能模块设计数据结构和算法框架编写代码并实现功能模块进行单元测试和系统测试,优化性能十三章:实验技巧与最佳实践13.1 实验目的学习编程和调试技巧掌握版本控制和代码review了解软件开发的最佳实践13.2 实验内容学习使用调试工具和性能分析工具学习使用版本控制系统,如Git进行代码review,学习代码质量的重要性13.3 实验步骤讲解调试工具的使用和性能分析的方法演示版本控制系统的操作和代码review 的流程学生练习使用调试工具和版本控制系统学生进行代码review 的实际操作十四章:实验成果展示与评价14.1 实验目的展示实验成果,分享学习经验培养演讲和表达能力接受同伴和教师的评价14.2 实验内容学生进行实验成果的展示同伴和教师对学生的实验成果进行评价学生间互相评价和学习交流14.3 实验步骤准备实验成果展示的PPT和讲稿进行实验成果的展示和讲解接受同伴和教师的评价和提问反馈评价,进行学习和改进十五章:实验课总结与展望15.1 实验目的总结整个实验课的学习过程和成果反思学习中的不足和收获展望未来学习的方向和目标15.2 实验内容讨论实验课的学习经验和改进意见确定未来学习的计划和目标15.3 实验步骤回顾整个实验课的学习过程和每个实验的内容分析和反思学习中的成就和不足讨论和确定未来学习的计划和目标重点和难点解析本文档为“数据结构实验课教案”,共包含十五个章节。
《数据结构》讲义

数据是描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。
换句话说,数据是对客观事物采用计算机能够识别、存储和处理的形式所进行的描述;是计算机加工处理的对象。
包括数值、字符、声数据元素是组成数据的基本单位一个数据元素可由若干个数据项组成()数据对象是性质相同的数据元素的集合,是数据的一个子集。
…},字母字符数据对象是集合象。
由此可看出,不论数据元素集合是无限集(如整数集)Data Structure)数据元素相互之间的关系称为结构( Structure ),有四种基本结构。
集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其它关系。
线性结构:结构中的数据元素之间存在着一对一的线性关系。
图状结构或网状结构:结构中的数据元素之间存在着多对多的任意关系。
为数据结构的有限集,S是D上关系的有限集。
表示复数的虚部。
存储结构(又称物理结构)是逻辑结构在计算机中的存储映象,是逻辑结构在计算机中的实现,它包括据元素的表示和关系的表示形式化描述:要存入机器中,建立一从,使S(D逻辑结构与存储结构的关系为:数据结构的内容可归纳为三个部分:逻辑结构、存储结构和运算集合。
按某种逻辑关系组织起来的一批数据,按一定的映象方式把它存放在计算机的存储器中,并在这些数据上定义了一个运算的集合,(Data Type)数据类型是一组性质相同的值集合以及定义在这个值集合上的一组操作的总称合,即该类型的取值范围,以及该类型中可允许使用的一组运算。
例如高级语言中的数据类型就是已经实现的从这个意义上讲,数据类型是高级语言中允许的变量种类,计算机中使用的是二进制数,汇编语言中则可给出各种数据的十进制表示,如二进制数据的抽象; 使用者在编程时可以直接使用据抽象,出现了数据类型,(Abstract Data Type))是指基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。
抽象数据类型的定义取决于客观存在的一组逻辑特性,而与其在计算机内如何表示和实现无关,即不论其内部结构如何变化,只要它的数学特性不变,都不影响其外部使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》实验讲义课程简介实验(选做,设计性实验,2学时) 实验题目:学生成绩管理系统●学生记录结构如下:struct student_type{char id[5];/*学生学号*/char name[11];/*学生名字*/int age;/*学生年龄*/int math;/*数学成绩*/int eng;/*英语成绩*/int ds;/*数据结构成绩*/int os;/*操作系统成绩*/}●10个学生信息如下:1001 zengliang 19 86 87 84 801002 yaochang 18 75 85 79 681003 chuhua 20 85 98 76 891004 liuchang 21 69 85 75 881005 zhaoxia 19 89 85 75 841006 lina 20 89 84 95 751007 chenzhen 19 90 85 87 851008 wangkai 20 82 86 50 691009 xiaoyu 19 84 74 70 801010 weikun 20 68 84 79 86实验目的:1、熟悉C语言的书写规范,注意输入、输出的方式及错误处理方式。
2、理解算法五个要素的确切含义,掌握计算语句频度和估算算法时间复杂度的方法。
3、熟悉C语言函数的定义、函数的调用,参数的传递等细节4、熟悉C语言读写文件的函数及其使用。
实验要求:●将这10个学生信息存入到磁盘文件stu_list.in中。
●将磁盘文件中的所有学生记录读入内存中一块静态顺序空间中(使用数组申请),求出所有学生数学的平均成绩。
●将磁盘文件中的所有学生记录读入内存中一块动态申请的顺序空间中(使用函数malloc()申请),求出所有学生数学的平均成绩。
实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)实验一(必做, 设计性实验,2学时,来自第二章)实验题目:顺序表基本操作1、在非递减有序顺序表中插入一个元素x,保持顺序表有序性(2.11)2、比较两个顺序表的大小(2.12)3、顺序表元素的逆置(2.21)4、两个(有序或无序)顺序表的合并(书上算法2.1和2.2)实验目的:1、熟悉将算法转换成程序代码的过程。
2、了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C语言描述方法。
3、熟练掌握顺序表的基本操作:查找、插入、删除、合并等,掌握顺序表的随机存取特性。
实验要求:1、要求用静态分配的一维数组和动态分配的一维数组来完成实验题目。
分析静态分配的一维数组和动态分配的一维数组在顺序表基本操作实现上的共同点和区别。
2、对顺序表插入的算法,要求用两种方法实现:(1)自己编写函数实现;(2)调用顺序表基本操作ListInsert(SqList &L,int i,ElemType x),比较使用自己编写的插入函数和调用顺序表基本操作的函数两种实现方法之间的优缺点。
3、对所编写的算法进行时间复杂度分析。
实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)实验二(必做, 设计性实验,2学时,来自第二章)实验题目:单链表的基本操作1、在线性单链表中删除值介于mink和maxk之间的结点(2.19)。
2、线性单链表逆置(2.22)3、两个(有序或无序)单链表的合并(2.24)实验目的:1、了解线性表的链式存储结构及其顺序存取特性,熟练掌握线性表的链式存储结构的C语言描述方法,2、熟练掌握动态链表的基本操作查找、插入、定位等,能在实际应用中选择适当的链表结构。
3、掌握用链表表示特定形式的数据的方法,并能编写出有关运算的算法。
实验要求:1、与实验二比较,对于线性表的基本操作的实现,使用顺序存储结构和链式存储结构各有什么优缺点。
2、选做:使用书37页,一种带头结点的线性链表LinkList来完成以上题目。
体会作为链表中位序的概念和位置的概念哪个更重要。
实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)实验三(必做, 设计性实验,4学时,来自第三章)实验题目:栈和队列的基本操作1、用栈实现括号匹配的检验2、用栈实现形如a+b@b+a#的中心对称的字符序列的检验。
3、用栈和队列实现形如a+b@b+a#的中心对称的字符序列的检验。
实验目的:1、熟练掌握栈这种抽象数据类型,能在相应的应用问题中正确选用它。
2、熟练掌握栈类型的两种实现方法(顺序栈和链式栈),两种存储结构和基本操作的实现算法,注意栈空和栈满的判断条件及它们的描述方法。
3、熟练掌握队列这种抽象数据类型,能在相应的应用问题中正确选用它。
4、掌握循环队列与其它顺序结构实现上的不同及解决办法,熟悉各种队列的基本操作在循环队列上的实现。
实验要求:1、选择合适的存储结构(顺序栈或链式栈)表示栈,给出其定义。
2、在上述存储结构上实现栈的基本操作:初始化、置栈空、入栈、出栈、取栈顶元素等。
3、选择合适的存储结构(循环队列)表示队列,解决队空、队满判断条件相同的矛盾。
4、实现基于循环队列的存储结构的基本操作,初始化、队空/满判断,入队、出队、取队头元素,求队列长度等。
5、对所写出的算法进行时间复杂度分析。
实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)实验(选做, 设计性实验,2学时,来自第四章)实验题目:字符串基本操作的实现1、假设串以堆分配存储结构表示,设计一个算法,完成串的替换操作Replace(&S,T,V)。
2、实现串匹配的KMP算法及它的改进算法。
3、假设串以堆分配存储结构表示,设计一个算法,求串S和串T的一个最长公共字串,并分析你的算法时间复杂度。
实验目的:1、掌握串的三种存储结构。
2、熟练掌握串的基本操作。
3、熟悉串的应用。
实验要求:1、定义串的堆分配存储结构2、熟练从键盘或文件中读入源字符串。
3、实现对字符串的替换、查找、匹配等运算。
4、比较并分析你的算法的时间复杂度。
实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)实验四(必做, 设计性实验,2学时,来自第五章)实验题目:三元组表表示的稀疏矩阵的加法运算的实现1、设稀疏矩阵以三元组顺序表为压缩存储结构,写出矩阵转置的算法。
转置后的矩阵以三元组顺序表表示。
2、设稀疏矩阵以三元组顺序表为压缩存储结构,写出矩阵相加的算法,用三元组表C存放和矩阵。
实验目的:1、了解压缩的基本原理。
2、了解稀疏矩阵的三元组表的压缩存储方法。
3、熟悉三元组表表示的稀疏矩阵运算的实现。
实验要求:1、定义稀疏矩阵压缩存储的存储结构-三元组顺序表2、将稀疏矩阵压缩到三元组顺序表中。
3、实现矩阵转置的经典算法和三元组顺序表表示的稀疏矩阵的转置运算,其中三元组顺序表表示的稀疏矩阵的转置算法需用普通和快速转置算法来实现。
4、实现矩阵相加的经典算法和三元组顺序表表示的稀疏矩阵的加法运算。
5、比较并分析你的算法的时间复杂度。
实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)实验五(必做,设计性实验,2学时,来自第六章)实验题目:二叉树的递归及非递归的遍历及其应用1、二叉树的前、中、后序遍历算法和非递归算法的实现2、求二叉树中叶子结点数目的递归算法。
3、编写求二叉树深度的递归算法。
实验目的:1、熟练掌握二叉树的二叉链表存储结构的C语言实现。
2、掌握二叉树的基本操作-前序、中序、后序遍历二叉树的三种方法。
3、了解非递归遍历过程中“栈”的作用和状态,而且能灵活运用遍历算法实现二叉树的其它操作。
实验要求:1、创建二叉树的二叉链表结构、遍历先、中、后序的递归函数显示不同遍历序列,结合习题了解二叉树遍历的应用实例。
2、遍写前、中、后、层序遍历的非遍历函数,注意用以前作过的栈和队列作辅助存储结构。
3、思考遍历二叉树还有哪些应用?实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)实验六(必做,验证性实验,2学时,来自第六章)实验题目:Huffman树及Huffman编码的算法实现实验目的:1、了解该树的应用实例,熟悉掌握Huffman树的构造方法及Huffman编码的应用,2、了解Huffman树在通信、编码领域的应用过程。
实验要求:1、输入一段100—200字的英文短文,存入一文件a中。
2、写函数统计短文出现的字母个数n及每个字母的出现次数3、写函数以字母出现次数作权值,建Haffman树(n个叶子),给出每个字母的Haffman编码。
4、用每个字母编码对原短文进行编码,码文存入文件b中。
5、用Haffman树对b中码文进行译码,结果存入文件c中,比较a,c 是否一致,以检验编码、译码的正确性。
实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)实验(必做,验证性实验,2学时,来自第七章)实验题目:图的深度优先遍历实验目的:1、熟悉图的数组表示法和邻接表存储结构,2、掌握构造有向图、无向图的算法,3、在掌握以上知识的基础上,熟悉图的深度优先遍历算法,并实现。
实验要求:1、图的数组表示法定义及基本操作的实现。
2、图的邻接表表示法定义及基本操作的实现。
3、写函数实现图的深度优先遍历(分别在两种结构上)4、在邻接表上实现关键路径的求法,在邻接矩阵上实现最短路经、最小生成树的求法。
实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)实验七(必做,验证性实验,2学时,来自第九章)实验题目:查找实验目的:1、熟练掌握顺序表和有序表的查找方法,2、以一、两个算法为例,掌握其时间复杂度的分析方法。
实验要求:1、验证并设计顺序表的查找(顺序查找、折半查找)算法2、验证二叉排序树上的查找(创建、查找、插入)算法3、验证Hash表查找(Hash函数定义、建立,查找,插入)算法(选做)实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)实验八(必做,验证+设计,4学时,来自第十章)实验题目:排序实验目的:1、了解排序的方法、过程及原则。
2、掌握插入排序、快速排序、选择排序、归并排序的算法思想3、以一、两个算法为例,实现以上各类算法,掌握其时间复杂度的分析方法。
实验要求:1、定义待排序序列的存储结构。
2、验证插入排序、快速排序、选择排序、归并排序中各排序方法中的一、二个排序算法。
实验内容和实验步骤:(由学生填写)实验用测试数据和相关结果分析:(由学生填写)实验总结:(由学生填写)附录:实验报告的要求实验报告是反映学生实验效果的最主要的依据,也是学生正确地表达问题、综合问题和发现问题的能力的基本培养手段,因而是非常重要的内容,本课程的实验报告中要包括以下几项内容:(一)实验题目;参见实验讲义(二)实验目的;参见实验讲义(三)实验要求;参见实验讲义(四)实验内容和实验步骤;1.需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输入值的范围;(2)输出的形式;(3)程序所能实现的功能;2.概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。