《数据结构》教学重点.pdf
《《数据结构》教学重点.pdf》由会员分享,可在线阅读,更多相关《《数据结构》教学重点.pdf(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1章 绪论【教学目的要求】熟悉各名词、术语的含义,掌握基本概念,特别是数据的逻辑结构和存储结构之间的关系。分清哪些是逻辑结构的性质,哪些是存储结构的性质。了解抽象数据类型的定义、表示和实现方法。掌握计算语句频度和估算算法时间复杂度的方法。【重点】数据结构的3个层次5个要素、抽象数据类型、算法分析。【难点】抽象数据类型、算法分析。【教学方法】多媒体教学和传统教学相结合。【课时安排】2 学时。【教学过程】K导入U当前,计算机所处理的数据不再是简单的数值,而是字符串、图形、图像、语音、视频等复杂的数据。而这些复杂的数据不仅量大,而且具有一定的结构。数据结构所研究的就是这些有结构的数据,因此,数据结
2、构的知识不论对研制系统软件还是开发应用软件都非常重要,它是学习软件知识和提高软件设计水平的重要基础。本章主要介绍数据结构的概念、数据类型和抽象数据类型、算法和算法分析等知识。K讲解X1.1 数据结构的概念1.1.1 为什么要学习数据结构1.计算机处理的问题有:1)数值计算问题:解决问题的关键是数学分析和计算方法。2)非数值计算问题:设计合适的数据结构。2.计算机解决问题的步骤:具 体 问 题 驾 数 学 模 型 也 算 法 型 程序程序设计:为计算机处理问题编制一组指令集。算法:处理问题的策略。数据结构:问题的数学模型。学习数据结构的目的是为了了解计算机处理对象的特性,将实际问题中所涉及的处理
3、对象在计算机中表示出来并对它们处理。同时,通过算法设计训练来提高学生的思维能力,通过程序设计的技能训练来提高学生的综合应用能力和专业素质。1-1-2相关概念和术语(1)数据:所有能被输入到计算机中,且被计算机处理的符号的总称,是计算机处理的信息的某种特定的符号表示形式。它可以是数值数据,也可以是非数值数据。(2)数据项:是具有独立含义的标识单位,是数据不可分割的最小单位。(3)数据元素:是数据的基本单位,它是数据项的集合。(4)数 据 对 象(数据元素类):具有相同性质的数据元素的集合。(5)数据结构:包括数据的逻辑结构和数据的物理结构。数据的逻辑结构:是指相互之间存在一种或多种特定关系的数据
4、元素的集合,它可看着是从具体问题抽象出来的数学模型,与数据的存储无关。它 通 常 有“集合结构、线性结构、树形结构、图形结构”四种基本结构。它的形式定义为:Data_Structures=(D,S)其中:D是数据元素的有限集,S是D上关系的有限集。令 数据的物理结构(又称数据的存储结构):是指逻辑结构在存储器中的表示(又称映象),包括数据元素的表示和数据元素间关系的表示。数据元素的表示方法:用二进制位(bit)的位串表示数据元素。数据元素间关系的表示方法:顺序存储和链式存储。1-1-3数据结构课程的内容数据结构是介于数学、计算机硬件和软件之间的一门计算机科学与技术专业的核心课程,是高级程序设计
5、语言、编译原理、操作系统等课程的基础。同时数据结构技术也广泛应用于信息科学、系统工程、应用数学及各种工程技术领域。数据结构的内容包括3个层次5个要素,如 表1-6所示:表1-6数据结构课程内容体系y面数据表示数据处理抽象逻辑结构基本运算实现存储结构算法评价不同数据结构的比较及算法分析1.2 数据类型和抽象数据类型1.2.1 数据类型在用高级程序语言编写的程序中,必须对程序中出现的每个变量、常量或表达式,明确说明它们所属的数据类型。因为类型明显或隐含地规定了在程序执行期间,变量或表达式所有可能取值的范围,以及在这些之上允许进行的操作。数据类型是一个值的集合和定义在此集合上的一组操作的总称。在用高
6、级程序语言中,数据类型可分为:原子类型和结构类型。1.2.2 抽象数据类型(Abstract Data Type 简称 ADT)(1)抽象:是指抽出反映问题本质的东西,舍去其非本质的细节。在程序设计发展的几个阶段,通过一步步抽象,不断突出“做什么?”,而 将“怎么做?”隐藏起来,即将一切用户不必了解的细节封装起来,从而简化了问题。(2)抽象数据类型:是指一个数学模型以及定义在此数学模型上的一组操作,ADT有两个重要特征:数据抽象:用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及它和外部用户的接口(即外界使用它的方法)数据封装:将实体的外部特性和其内部实现细节分离,并且对
7、外部用户隐藏其内部实现细节。抽象数据类型的描述方法:抽象数据类型可用(D,S,P)三元组表示。其中,D是数据对象,S是D上的关系集,P是 对D的基本操作集。ADT抽象数据类型名数据对象:数据对象的定义数据关系:数据关系的定义基本操作:基本操作的定义 ADT抽象数据类型名其中,数据对象和数据关系的定义用伪码描述,基本操作的定义格式为基本操作名(参数表)初始条件:初始条件描述操作结果:操作结果描述基本操作有两种参数:赋值参数只为操作提供输入值;引用参数以&打头,除可提供输入值外,还将返回操作结果。“初始条件”描述了操作执行之前数据结构和参数应满足的条件,若不满足,则操作失败,并返回相应出错信息。“
8、操作结果”说明了操作正常完成之后,数据结构的变化状况和应返回的结果。若初始条件为空,则省略之。抽象数据类型的表示和实现:需要通过固有数据类型(高级编程语言中已实现的数据类型)来实现。1.3 算法和算法分析1.3.1 算法特性算法是为了解决某类问题而规定的一个有限长的操作序列。个算法必须满足以下五个重要特性:(1)有穷性对于任意一组合法输入值,在执行有穷步骤之后一定能结束,即:算法中的每个步骤都能在有限时间内完成;(2)确定性对于每种情况下所应执行的操作,在算法中都有确切的规定,使算法的执行者或阅读者都能明确其含义及如何执行。并且在任何条件下,算法都只有一条执行路径;(3)可行性算法中的所有操作
9、都必须足够基本,都可以通过已经实现的基本操作运算有限次实现之;(4)有输入作为算法加工对象的量值,通常体现为算法中的一组变量。有些输入量需要在算法执行过程中输入,而有的算法表面上可以没有输入,实际上已被嵌入算法之中;(5)有输出它是一组与“输入”与确定关系的量值,是算法进行信息加工后得到的结果,这种确定关系即为算法的功能。1.3.2 算法描述算法可使用自然语言、程序流程图、N-S 图、伪码语言等方法来描述。L3.3算法性能分析与度量对于同一个问题的不同算法,如何来评价这些算法的优劣?首先,选用的算法应是“正确的”。其次,主要考虑以下3点(1)执行算法所耗费的时间。(2)执行算法所耗费的存储空间
10、,其中主要考虑辅助存储空间。(3)算法应易于理解、易于编码、易于调试。1.时间复杂度一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数量n表 示),或者说,它是问题规模的函数。假如,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可记作:T(n)=O(f(n),称T(n)为算法的(渐近)时间复杂度如何估算算法的时间复杂度?算 法=控 制 结 构+原操作算法的执行时间=原操作的执行次数x原操作的执行时间。算法的执行时间与原操作执行次数之和成正比。从算法中选取一种对于所研究的问题来说是基本操作的原操作,以该基本操作在算法中重复执行的次数作为算法运行时间的衡量准则
11、。例:for(i=1;i=n;+i)for(j=l;j=n;+j)ci,j=0;for(k=l;k=n;+k)ci,j+=ai,k*bk,j;)基本操作:乘法操作。时间复杂度:0(n3)按数量级递增排列,常见的时间复杂度为:0(l)0(log 2)O(n)O(n 蜒力 0(n2)0(n3)l a s t=l;r e t u r n L;)E l s er e t u r n -1;)2 .插入运算顺序表的插入是指在表的第i个位置上插入一个值为x的新元素,插入后使原表长为n的表(ai,a i-i,a .,a j成为表长为 n+1 的表(a i,a z,x,a”an)顺序表上完成这一运算的步骤如下
12、:(1)将a i至a n顺序向后移动,为新元素让出位置。(2)将x置入空出的第i个位置。(3)修改l a s t t指针(相当于修改表长),使之仍指向最后一个元素。顺序表的插入算法(见PI6)顺序表的插入.p p t此算法的时间复杂度为:O(n)3 .删除运算顺序表的删除是指将表中第i个元素从表中去掉,删除后使原表长为n的表,,a i,比,&+I,a n)成为表长为 n-1 的表(a i,a M,ai+i,an)顺序表上完成这一运算的步骤如下:(1)将a i+i至a n顺序向前移动,为新元素让出位置。(2)修改I s a t指针(相当于修改表长),使之仍指向最后一个元素。顺序表的删除算法(见P
13、18)此算法的时间复杂度为:0(n)4.按值查找顺序表中的按值查找是指在表中查找与给定值x相等的数据元素。顺序表上完成这一运算的方法是:从第一个元素山开始,依次和x比较,直到找到一个与x相等的数据元素,则返回它在顺序表中的序号;若查遍整个表都没有找到与x相等的元素,则返回-1。顺序表的按值查找算法(见P19)此算法的时间复杂度为:0(n)【作业布置】P38的习题2。【教学后记】通过本章教学,学生掌握了顺序表的定义及基本操作的实现。第2 章 2.3线性表的链式存储和运算实现【教学目的要求】使学生掌握单链表的定义及基本运算的实现;掌握循环链表和双向链表的定义。【重点】单链表的定义及基本运算的实现。
14、【难点】单链表的运算实现。【教学方法】多媒体教学和传统教学相结合。【课时安排】4学时。【教学过程】K导入U上堂课学习过的线性表的顺序存储特点是用物理上相邻实现了逻辑上的相邻,它要求用连续的存储单元顺序存储线性表中和各元素,因此,对顺序表的插入、删除需要通过移动元素来实现,影响了运行效率。本堂课我们将介绍线性表链式存储结构,它不需要用连续的存储单元来实现。K讲解H2.3.1单链表用一组地址任意的存储单元存放线性表中的数据元素。以元素(数据元素的映象)+指针(指示后继元素存储位置的)=结点(表示数据元素)。以“结点的序列”表示线性表,称作链表。以线性表中第一个数据元素a l的存储地址作为线性表的地
15、址,为线性表的头指针。链表是由一个个结点构成的,结点定义如下:typedef struct Node DataType data;/数据域datanextstruct Node*next;/指针域 LNode,*LinkList;说明:1.LNode是结点的类型。2.LinkList是指向LNode类型结点的指针类型。3.LNode*P表示定义了一个指向某结点的指针变量。4.P=new LNode;表示申请一块LNode类型的存储单元。p-data P-next5.上述P 所指向结点的数据域可表示为p-data,指针域可表示为P-nexto6.delteP;表示释放P 所指向的结点。2.3.2
16、单链表上基本运算的实现1.建立单链表(1)在链表的头部插入结点建立单链表算法略(2)在链表的尾部插入结点建立单链表算法略单链表的建立.PPt2.求表长(1)设 L 是带头结点的单链表算法略(2)设 L 是不带头结点的单链表算法略3.查找操作(1)按序号查找 Get_Linklist(L,i)算法略(2)按值查找即定位 Locate_Linklist(L,x)4.插入(1)在某结点p 后面插入新结点操作如下:s-next=p-next;/插入 L 中 p-next=s;(2)在某结点p前面插入新结点先要找到结点p的前驱结点q,再在结点q的后面插入。(3)插入运算 Insert_LinkList(
17、L,i,x)算法思路:查找第i-1个结点,若存在,继续,否则结束申请、填装新结点。将新结点插入,结束。算法略算法的时间复杂度为:O(n)5.删除(1)删除结点设p指向单链表中某结点,删 除p结点,操作如下:q-next=p-next;delete p;(2)删除运算 Delete_LinkList(L,i)算法思路:查找第i-1个结点,若存在,继续,否则结束若存在第i个结点则继续,否则结束。删除第i个结点,结束。算法略算法的时间复杂度为:0(n)2.3.3 循环链表最后一个结点的指针域的指针又指回第一个结点的链表。2.3.4 双向链表双向链表结点的定义如下:typedef struct DLn
18、ode DataType data;II 数据域struct DLNodeprior,*next;指向前驱和后驱的指针域 DLNode,*DLinkList;(1)在双向链表中插入一个结点设 p 是指向双向链表中某结点,s 指向待插入的值为x 的新结点,将 s 结点插入到p结点的前面,操作如下:0s-prior=p-prior;(2)p-prior-next=s;(3)s-next=p;p-prior=s;(2)在双向链表中删除指定结点设 p 是指向双向链表中某结点,删 除 p 结点。操作如下:(Dp-prior-next=p-next;(2)p-next-prior=p-prior;dele
19、te p;【作业布置】P39的习题6。【教学后记】通过本章教学,学生掌握了线性表的逻辑结构和线性表的顺序及链式存储,但对这二种存储的运算实现还不太理解,以后在教学中应加强学生对算法的理解和设计。第3章3.1栈【教学目的要求】使学生掌握栈的概念及基本运算操作,并能利用它解决实际问题。学会栈满和栈空的判断方法。【重点】栈的定义和判空与判满。【难点】栈的应用。【教学方法】多媒体教学和传统教学相结合。【课时安排】2学时。【教学过程】K导入U栈和队列是在软件设计中常用的两种数据结构,它们的用途非常广泛,这一节我们将先学习栈的有关基本知识及应用。K讲解H3.1 栈3.1.1 栈的定义及基本运算栈是限制在表
20、的一端(表尾)进行插入和删除操作的线性表。允许进行插入和删除操作的这一端称为栈顶,另一个固定端(表头)称为栈底,当表中没有元素时称为空栈。对于栈,常做的基本操作有以下几种:Init_Stack(s):栈初始化,构造一个 空 栈s。Empty_Stack(s):判断栈空,若s为空栈,返 回1,否则返回0。Push_Stack(s,x):入栈,插入新元素x为栈顶元素。Pop_Stack(s):出栈,若栈不空,则删除s 的栈顶元素。Top_Stack(s):读栈顶元素。Destroy_Stack(s):销毁栈s,s 不再存在。Clear_Stack(s):把 s 置为空栈。Length_Stack(
21、s):求栈的长度,返回s 的元素个数。3.1.2 栈的存储实现和运算实现1 .顺序栈利用顺序存储方式实现的栈称为顺序栈。类似于顺序表的定义。顺序栈的类型描述如下:#define MAXSIZE MAXSIZE为根据实际问题定义的足够大的整数typedef struct DateType datefMAXSIZE;int top;SeqStack;SeqStack*s;/定义一个指向顺序栈的指针变量。在上述存储结构上,栈基本操作的实现见P4142算法。2.链栈利用链式存储方式实现的栈称为链栈,注意链表中指针的方向是从栈顶到栈底。3.1.3 栈的应用举例例 3.1 数制转换问题十进制数N 和其他d
22、 进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理:N=(N/d)Xd+N%d,(其中:/为整除运算,为求余运算)。例 如:(3467)10=(6613)8,其运算过程如下:NN/8N%8346743334335415466606假设现要编制一个满足下列要求的程序:对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数。由于上述计算过程是从低位到高位顺序产生八进制数的各个数位,而打印输出,一般来说应从高位到低位进行,恰好和计算过程相反。因此,若将计算过程中得到的八进制数的各位顺序进栈,则按出栈序列打印输出的即为与输入对应的八进制数。算法如下:Typed
23、ef int Datatype;void conversion(int N,int r)SeqStack s;Datatype x;Init_ SeqStack(&s);/构造空栈scanf(%d,N);while(N)Push_ SeqStack(&s,N%r);N=N/r;while(!Empty_SeqStack(&s)Pop_SeqStack(&s,&x);coutx;)coutendl;这是利用栈的后进先出特性的最简单的例子。在这个例子中,栈操作的序列是直线式的,即先-味地入栈,然后一味地出栈。也许,有的读者会提出疑问:用数组直接实现不也很简单吗?仔细分析上述算法不难看出,栈的引入简
24、化了程序设计的问题,划分了不同的关注层次,使思考范围缩小了。而用数组不仅掩盖了问题的本质,还要分散精力去考虑数组下标增减等细节问题。例3.2迷宫问题(略)例3.3表达式求值(略讲)【作业布置】P62的习题2。【教学后记】通过本章教学,学生掌握了栈抽象数据类型的特点及栈满和栈空的判断条件,但用它解决实际问题还有待加强。第3章 3.2 队列【教学目的要求】使学生掌握队列的概念及基本运算操作,并能利用它解决实际问题。学会队列满和空的判断方法。【重点】队列的定义和判空与判满。【难点】循环队列。【教学方法】多媒体教学和传统教学相结合。【课时安排】2学时。【教学过程】K导入H上堂课我们学习了两种重要的数据
25、结构之一:栈,本堂课我们将继续学习另外一种重要的数据结构,队列。K讲解3.2队列3.2.1 队列的定义及基本运算队列是一种“先进先出”的数据结构,即插入操作在表的一端进行,而删除操作在表的另一端进行。把允许进行插入操作的一端称队尾(re a r),允许进行删除操作的一端称队首(f ro n t)o对于队列,常做的基本操作有以下几种:Init_Queue(q):队列初始化,构造一个空队列q。Empty_Queue(q):判断队空,若q为空栈,返 回1,否则返回0。In_Queue(q,x):入队,插入新元素x到队尾。Out_Queue(q,x):出队,若队不空,则删除队首元素。Front_Que
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 教学 重点
限制150内