NCRE公共基础知识教案第1章.docx
《NCRE公共基础知识教案第1章.docx》由会员分享,可在线阅读,更多相关《NCRE公共基础知识教案第1章.docx(28页珍藏版)》请在冰豆网上搜索。
NCRE公共基础知识教案第1章
【教学课题】
算法
(第1章数据结构,第1节)
【目的要求】
掌握算法的概念,算法的特点,理解算法时间复杂度和空间复杂度的含义,掌握时间复杂度的计算方法。
【教学重点】
算法的概念,算法特点,时间复杂度的概念和计算
【教学难点】
时间复杂度的概念和计算
【方法与手段】
讲授+多媒体演示
【作业布置】
1、什么是算法,算法的特征有哪些?
2、算法的基本要素有哪些?
3、什么是算法的时间复杂度和空间复杂度?
第1章数据结构和算法
1.1算法
一、算法(Algorithm)(P1)
1、基本概念
解题方案准确而完整的描述(为解决某个问题而采取的方法和步骤)。
(不受机器、程序设计语言、编程者等因素的限制,不等于程序,但程序可以看作是算法的一种描述,程序=算法+数据,更具体说:
程序=算法+数据结构+程序设计方法+语言和环境)
2、基本特征
(1)可行性
(算法中每个步骤必须有效可行,如a/b,其中b不能为零)
(2)确定性
算法中每个步骤都有明确的意义,不允许模棱两可,不允许歧义。
(3)有穷性(避免进入无限循环)
算法中的操作必须在有限时间内完成。
如:
循环必须有终止条件。
(4)拥有足够的情报
(算法中运算对象必须有初值,可以输入,也可直接赋值,必须输出)
3、算法基本要素(P2)
(1)对数据的运算和操作
基本的运算有:
算术运算(加、减、乘、除等)、逻辑运算(与、或、非等)、关系运算(大于、小于、等于、不等于等)、数据传输(赋值、输入、输出等)
(2)算法的控制结构
算法中各操作之间的执行顺序(顺序结构、选择结构、循环结构)
4、算法设计基本方法(P3)
(1)列举法
根据问题,列举所有可能情况。
如:
从一个地方到达另一个地方的途径。
(2)归纳法
根据少量情况,分析归纳,得出一般关系。
如:
找出数列中的通项式。
(3)递推法
从已知初始条件出发,逐步推出所有中间结构和最后结果。
如:
案件侦破中根据以有线索进行的推理。
本质上是归纳。
(4)递归法
将复杂的问题一层层进行分解,最后归结为一些简单的问题,然后将简单的问题解决,再沿着分解的逆过程逐步进行综合,将最初的问题解决。
如:
求n!
可用n!
=n*(n-1)!
递归调用来实现。
递归法分为直接递归和间接递归。
递归的基础也是归纳。
(5)减半递推技术
又叫分治法,重复将问题的规模减半。
如:
设方程f(x)=0在区间[a,b]上的实根,且f(a)与f(b)异号,利用二分法求方程在[a,b]上的根。
减半递推法也是归纳法的一个分支。
(6)回溯法
也叫试探法,基本思想是:
从一条路往前走,能进则进,不能进则退回来,换一条路再试。
二、算法复杂度(P5)
(算法复杂度包括:
时间复杂度和空间复杂度)
1、时间复杂度
(1)概念
所谓时间复杂度是指执行算法所需要的计算工作量。
(2)计算方法
在实际中常用算法中所需基本运算的执行次数来度量算法的计算工作量,即时间复杂度。
算法所执行的基本运算次数还与问题的规模有关,是问题规模的函数,记作:
算法的工作量=f(n),其中n是问题的规模。
通常也记为:
T(n)=O(f(n))
(3)举例
如下三个程序段:
A、{++x;s=0;}
B、for(i=1;i<=n;i++){++x;s+=x;}
C、for(j=1;j<=n;j++)
for(k=1;k<=n;k++){++x;s+=x;}
以上三个程序段中,++x为基本运算,运算次数即算法的计算工作量分别为:
1,n,n2,也就是说时间复杂度分别为:
1,n,n2,通常用:
O
(1)、O(n)、O(n2)表示。
(4)分析时间复杂度的方法
平均性态:
指用各种特定输入下的基本运算次数的加权平均值来度量时间复杂度。
最坏情况复杂性:
指在规模为n时,算法所执行的基本运算的最大次数。
2、空间复杂度(P6)
算法的空间复杂度一般是指执行这个算法所需要的内存空间。
包括:
算法程序所占的空间、输入的初始数据所占的空间、算法执行过程中所需的额外空间。
如果额外空间是个常数,则称该算法是原地工作的。
在实际工作中通常采用压缩存储技术来减少不必要的额外空间。
【教学课题】
数据结构有基本概念
(第1章数据结构,第2节)
【目的要求】
理解数据结构的概念,搞清什么是逻辑结构、什么是物理结构,掌握数据结构的图形表示形式,线性结构和非线性结构的区别。
【教学重点】
逻辑结构与存储结构,数据结构的表示方法,线性结构和非线性结构
【教学难点】
数据结构的表示方法,各元素间的相互关系,线性结构的特点
【方法与手段】
讲授+多媒体演示
【作业布置】
1、简述有序表的对分查找规则?
2、什么是数据结构,什么是数据的逻辑结构,什么是数据的存储结构?
3、什么是线性结构,什么是非线性结构?
1.2数据结构的基本概念(P7)
一、概述(P7)
(计算机广泛用于数据处理,处理的数据很多,并且各有特点,如何组织并处理这些数据,节省计算机的存储空间,最终提高数据的处理效率,就是数据结构要研究的内容)
1、数据结构研究的问题(3个方面)
(1)数据的逻辑结构:
数据集合中各数据元素之间的固有的逻辑关系;
(2)数据的存储结构:
数据集合中各数据元素在计算机中的存储关系,又叫物理结构;
(3)对各种数据结构进行的运算。
2、研究数据结构的目的:
(总的而言,就是提高数据的处理效率)
(1)提高数据处理的速度;
(2)节省数据处理过程中所占用的存储空间。
(常用的数据结构是软件设计的基础)
二、什么是数据结构(P8)
1、数据处理(对数据元素的各种运算)
所谓数据处理,是指对数据集合中的各元素以各种方式进行运算,具体包括:
插入、删除、查找、添加、更改等,同时也包括对数据元素进行分析。
(高效率的数据处理能大大提高计算机的工作效率,如何提高数据的处理效率也就是数据结构所要研究的内容)
2、数据处理效率受数据的表示方式影响
(1)例1-3无序表的顺序查找和有序表的对分查找。
(两个表数据相同,只是排列方式不同)
无序表顺序查找分析:
A、查找规则:
从第1个元素开始,逐个将表中的元素与被查数进行比较,直到表中某个元素与被查数相等(查找成功)或者表中所有元素与被查数都进行了比较并且都不相等(查找失败)为止;
B、这种查找法效率低,特别是对于大规模数据表特别费时;
C、例如查找54时,需要进行9次比较运算,才能查找成功。
有序表对分查找分析:
A、
查找规则:
将被查数与表的中间元素比较:
如果相等,则查找成功,查找结束;如
果不等,
然后对保留的部分(后半部分或前半部分)再按上述方法查找,直到查找成功或查找失败为止。
B、对分查找效率较高,只适应于有序表;
C、例如查找54时,只需要进行2次比较运算,查找成功。
小结:
用不同的方法表示数据,对数据的处理效率有明显的影响。
(2)例1-4在学生登记情况表中按学号查找某学生情况或者查找某个分数段的学生情况。
按学号查找学生情况分析:
采用适当的查找方法,把待查学号与表中学号进行比较,查找相应信息,实现容易。
查找分数段学生情况分析:
通常情况要将所有学生情况都扫描一遍,也就是说要扫描分数段外的同学信息,效率较低。
我们可以将表中的数据按分数段重新组织。
(见P10,表1.2、1.3、1.4、1.5)
小结:
数据的不同表示方式,影响着数据的处理效率。
(数据的表示方式实际上就是数据结构的一个方面,所以数据结构影响着数据的处理效率)
3、什么是数据结构(P10)
(1)概念
数据结构是指具有相互关联的数据元素的集合,包括数据的逻辑结构和存储结构(又叫物理结构)。
(如:
季节的数据集合、家庭成员的数据集合、数值的数据集合等)
(或者说:
数据结构是指反映数据元素间关系的数据元素的集合,是指带有结构的数据元素的集合)
(2)数据元素
A、数据元素简称为元素,具有广泛的意义。
(一般而言,现实世界中客观存在的一切个体都可以是数据元素,在数据处理领域中,每一个需要处理的对象都可以抽象成数据元素)
B、数据集合中的数据元素通常都具有一定的关联(即联系),这种固有的关系常常简单地用前后件关系(或直接前驱与直接后继关系)来描述;
C、数据元素间的任何关系都可以用前后件关系来描述。
(数据结构应包含两方面的信息:
表示数据元素的信息和表示数据元素之间的前后件关系)
4、数据的逻辑结构(P11)
(1)概念
反映数据元素之间逻辑关系(前后件关系)的数据结构,就是数据的逻辑结构,与数据元素在计算机中的存储位置无关。
有两个构成要素:
数据元素的集合、前后件关系。
(2)表示方式
B=(D,R)
其中:
B表示数据结构,D为数据元素的集合,R为表示数据元素间的前后关系,常用二元组表示,如二元组(a,b)表示a是b的前件,b是a的后件。
(3)例如
一年四季数据结构可以表示成
B=(D,R)
D={春,夏,秋,冬}
R={(春,夏),(夏,秋),(秋,冬)}
(又如家庭成员数据结构的表示)
5、数据的存储结构(物理结构)(P12)
(数据结构中的各元素在计算机存储空间中的位置关系与逻辑关系是不同的)
(1)概念
数据的逻辑结构在计算机存储空间中的存放形式称为数据的存储结构,也称数据的物理结构。
存储结构中不仅存储数据元素信息,还要存储元素间前后件关系的信息。
(2)一种逻辑结构可以表示成多种存储结构。
常见的存储结构有:
顺序、链接、索引等。
三、数据结构的图形表示(P13)
1、数据结构表示方式
二元组表示(集合的形式)
图形表示
2、数据结构的图形表示
(1)构成
春
结点:
数据结点,用中间标有数据元素值的方框表示,如:
有向线段:
→,表示数据元素间的前后件关系,从前件结点指向后件结点。
(如:
P13,图1.2,图1.3)
(2)优点:
形象直观
(3)说明
A、根结点:
没有前件的结点;
B、终端结点(叶子结点):
没有后件的结点;
C、内部结点:
数据结构中除了根结点和终端结点之外的其他结点;
D、数据结构中元素结点可能是动态变化的,有可能被进行多种运算;
E、数据结构中各元素之间的关系也可能动态变化。
(P14,图1.4)
四、线性结构与非线性结构(P14)
1、空的数据结构与非空的数据结构(根据结点或元素数量分)
空的数据结构:
没有元素的数据结构称为空的数据结构(没有结点)
2、线性数据结构和非线性数据结构(根据元素间前后件关系的复杂程度分)
(1)线性数据结构
概念:
有且只有一个根结点,每一个结点最多有一个前件,也最多有一个后件的数据结构。
线性结构又叫线性表。
特点:
在一个线性结构中插入或者删除一个结点还应是线性结构。
(2)非线性数据结构
概念:
如果一个数据结构不是线性结构,则称之为非线性结构。
(3)说明
线性结构和非线性结构都可以是空的数据结构。
如果空数据结构的运算按线性结构的规则来处理,则属于线性结构,否则属于非线性结构。
【教学课题】
线性表及其顺序存储结构
(第1章数据结构,第3节)
【目的要求】
理解线性表的意义,搞清线性表的顺序存储结构,掌握线性表插入与删除操作的算法,并能用C程序编程实现。
【教学重点】
线性表的概念,线性表顺序存储结构,插入运算,删除运算
【教学难点】
插入去处,删除运算
【方法与手段】
讲授+多媒体演示
【作业布置】
1、什么是线性表?
线性表有什么特点?
2、线性表的顺序存储有什么特点?
3、简述线性表插入运算和删除运算的基本规则?
1.3线性表及其顺序存储结构(P15)
一、线性表的基本概念
1、什么是线性表(LinearList)
线性表是由n(n≥0)个元素a1,a2,a3…,an组成的一个有限序列,表中的每个数据元素,除了第一个,有且只有一个前件,除了最后一个,有且只有一个后件。
2、常见的线性表
一维数组,矩阵(二维数组),数据库表等
(线性表中的数据元素可以是一个单一的数据,也可以若干数据的组合,如数据库表中的记录)
3、线性表的表示(集合)
(a1,a2,a3,…,ai,…,an)
其中:
ai就是相应的数据元素(结点)
(线性表也可以是一个空表)
4、线性表的特点
是一种线性结构,元素在表中的位置由其序号决定,元素之间的相对位置是线性的。
对于非空的线性表,具有如下特点:
(1)有且只有一个根结点;
(2)有且只有一个终端结点;
(3)内部结点有且只有一个前件,有且只有一个后件。
线性表中结点的个数n称为线性表的长度。
结点个数为0的线性表,称为空表。
二、线性表的顺序存储结构(P16)
1、线性表通常采用顺序存储的方法来存储各个元素。
(这种方法又叫顺序分配)
2、顺序存储的特点
(1)所有元素所占的存储空间是连续的;
(2)在存储空间中各元素是按逻辑顺序依次存放。
(线性表中的前后件两个元素在存储空间中是紧邻的,并且前件一定在后件的前面)
3、举例
例如一维、二维数组的内存表示。
4、线性表存储结构下的基本运算
(1)在指定位置插入一个元素
(2)删除线性表中的指定元素
(3)查找某个或某些特定的元素
(4)线性表的排序
(5)按要求将一个线性表拆分为多个线性表
(6)将多个线性表合并为一个线性表
(7)复制线性表
(8)逆转一个线性表
三、插入运算(P17)
1、例1.9图1.7(a)为一个长度为8的线性表顺序存储在长度为10的存储空间中。
现要求在第2个元素(18)之前插入一个新元素87。
(具体分析见P17)
2、插入运算基本规则
一般情况下,要在第i(1≤i≤n)个元素之前插入一个新元素,首先从最后一个元素(即第n个)开始,直到第i个元素之间共n-i+1个元素依次向后移动一个位置,移动结束后,第i个位置就被空出,然后将新元素放到第i个位置即可。
3、具体应用
定义一个有10个元素的一维数组,并输入9个数到前面9个元素,然后插入一个数m到第n个元素处,其中插入的数m和元素位置n从键盘输入。
(讲授时,先把m和n的值定为一个具体的数来进行)
4、说明
(1)上溢:
当前存储空间已满,还往其中插入数据时,就会出现“上溢”的错误。
(2)执行一次插入操作,线性表长度就会增加1。
四、删除运算(P18)
1、例1.10图1.8(a)为一个长度8的线性表顺序存储在长度为10的存储空间。
现要求删除线性表中的第1个元素(29)。
(具体分析见P18)
2、删除元素基本规则
一般情况下,要删除第i(1≤i≤n)个元素时,就要从第i+1个元素开始,直到第n个元素之间共n-i个元素依次向前移动一个位置。
3、具体应用
定义一个有10个元素的一维数组,并输入数据,然后删除第n个元素,其中元素位置n从键盘输入。
4、说明
一个线性表,执行一次删除操作后,线性表的长度减小1。
【教学课题】
栈和队列
(第1章数据结构,第4节)
【目的要求】
理解栈的意义,搞清栈的存储方式,掌握入栈与退栈运算,理解队列的意义与特点,搞清队头与队尾指针的移动,掌握循环队列的特点。
【教学重点】
栈的概念,存储方式,入栈与退栈,队列的概念,队列指针的移动,循环队列
【教学难点】
入栈与退栈运算,队列指针的移动,循环队列
【方法与手段】
讲授+多媒体演示
【作业布置】
1、什么是栈,栈有什么特点?
2、什么是队列,队列有什么特点?
3、简述栈和循环队列的基本运算.
1.4栈和队列
一、栈及其基本运算(P19)
1、什么是栈(stack)
(1)概念
栈是只能在一端进行插入与删除操作的线性表。
其中允许插入与删除操作的一端称为栈顶,而不允许进行插入删除操作的端称为栈底,常用指针top指向栈顶位置,指针bottom指向栈底。
(类似于往瓶中放东西或取东西,也类似于子弹夹的结构)
(2)特点
FILO(FirstInLastOut,先进后出)或LIFO(LastInFirstOut,后进先出)
2、栈的顺序存储及其运算
(1)顺序存储
通常用一维数组S(1:
m)作为栈的顺序存储空间。
常用栈底指针(bottom)指向栈空间的低地址端(即数组的起始地址,也就是第一个元素的位置),用栈顶指针(top)指向栈空间的高地址端(即数组中最后一个元素位置)(图1.9、1.10)当top=0时表示栈空,top=m时表示栈满。
(2)栈的基本运算
入栈运算:
就是往栈中插入一个元素,即在栈顶位置插入一个新元素。
具体操作是:
先将栈顶指针top加1,然后新元素插入到栈顶指针指向的新位置。
退栈运算:
就是从栈中删除一个元素,即取出栈顶元素赋给一个变量。
具体操作是:
先将当前栈顶元素赋给一个变量,然后栈顶指针top减1。
(第一步操作可以省略)
读栈顶元素:
就是将栈顶元素赋给一个指定的变量,栈顶指针位置不变。
(3)栈的上溢与栈的下溢
上溢:
当栈空间已满时,如果再进行入栈操作,就会出现上溢错误。
下溢:
当栈已空时,如果再进行退栈操作,就会出现下溢错误。
二、队列及其基本运算(P21)
1、什么是队列(queue)
(1)概念
队列就是允许在一端进行插入,而在另一端进行删除的线性表。
其中允许插入的一端称为队尾,常用rear指针指向队尾元素,允许删除的一端称为队头,常用front指针指向排头元素的前一个位置。
(类似于日常生活中的排队行为,图1.12)
(2)特点
FIFO(FirstInFirstOut,先进先出)或LILO(LastInLastOut,后进后出)
(3)特别说明
A、关于队头与队尾指针的指向,总的原则:
队列中的头尾指针不是头空就是尾空。
(图1.11,尾空,图1.12头空)。
B、为了描述方便,在C中约定:
初始化建空队列时,令front=rear=0,每当队列插入新元素时,尾指针(rear)增加1,每当删除队列的头元素时,头指针(front)增加1。
所以在非空的队列中,尾指针始终指向队列尾元素的下一个位置,头指针始终指向队列的头元素。
(图1.11)
C、但如果说“尾指针指向队尾元素,头指针指向队头元素的前一位置”也应认可。
(图1.12,1.13)
(4)队列运算
入队运算:
往队列的队尾插入一个元素。
具体操作:
先将队尾指针(rear)加1,然后将新的元素放入到队尾指针指向的位置。
(图1.12c)
退队运算:
从队列的排头删除一个元素。
具体操作:
先将队头指针(front)加1,然后将指针所指向的元素的值赋给一指定的变量。
(图1.12b)
(5)队列的顺序存储
在程序设计中,通常定义一维数组作为队列的顺序存储空间。
2、循环队列及其运算(P22)
(1)概念
所谓循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。
(循环队列的环形表示如右图所示)
(2)指针的指向
循环队列中常用队尾指针指向队列的队
尾元素,队头指针指向指向排头元素的前一
个位置。
(头尾指针之间的所有元素为队列的元
素,据此可以计算队列中元素的个数(r-f+m)%m)
(3)循环队列运算
A、入队运算
入队运算是在循环队列的队尾加入一个新元素。
具体操作:
先将队尾指针rear增加1,如果rear的值超过了队列的长度,就把rear置为1;然后,将新元素插入到队尾指针指向的位置。
B、退队运算
退队运算是将循环队列的排头位置退出一个元素并赋给指定的变量。
具体操作:
先将队头指针front增加1,如果front的值超过了队列长度,就把front置为1;然后,将排头指针元素赋给指定的变量。
(4)队列的上溢和下溢
上溢:
当队列已满时,如果执行插入操作,则会产生上溢错误。
下溢:
当队列已空时,如果执行退队操作,则会产生下溢错误。
【教学课题】
线性链表
(第1章数据结构,第5节)
【目的要求】
理解线性表的不足,搞清链式存储结构的特点,掌握线性链表的插入与删除运算,理解循环列表的特点。
【教学重点】
线性表的缺点,链式存储结构及其特点,线性链表的特点,线性表的插入与删除运算,循环列表及其特点。
【教学难点】
链式存储结构的理解,线性链表的插入与删除运算,循环列表的特点
【方法与手段】
讲授+多媒体演示
【作业布置】
1、什么是链式存储结构,有什么特点?
2、简述在线性链表中包含元素x的结点之前插入一个新元素b的过程,要求有图示和文字描述。
3、简述在线性链表中删除包含元素x的结点p的过程,要求有图示和文字描述。
4、循环链表有什么特点?
1.5线性链表
一、线性链表的基本概念(P24)
1、线性表顺序存储的优缺点
(1)优点
结构简单,运算方便,适应于长度不大且固定的线性数据
(2)缺点
A、工作量大:
插入或删除元素时,为保证运算后仍为顺序存储,需移动大量的数据;
B、空间不便于扩充:
容易出现“上溢”错误;
C、不便于对存储空间的动态分配:
要用多个线性表时,如果平均分配空间,会出现用不着或不够用的现象;常用的方法就是共享整个存储空间,对某个线性表动态分配存储空间,那么势必在分配空间前必须将上次使用空间的线性表元素移开,这就导致工作量剧增。
2、链式存储结构
(1)概述
用一组任意的存储单元存储数据的存储结构,其中存储单元称为存储结点,简称结点(NODE),每个结点由两部分组成:
一部分用于存放数据元素值,称为数据域,一部分用于存放指针,称为指针域,指针域中的指针总是指向该结点的前一个结点或后一个结点(即前件或后件)。
(其中的“任意”主要是指各结点的位置可以连续也可以不连续,不同于顺序结构各结点必须连续存放)
(具体形式如图1.16所示)
(2)特点
存储空间可以连续也可以不连续,各结点的存储顺序与逻辑关系可以不一致,其逻辑关系由指针域来确定。
(图1.15与1.17代表连续存储的线性链表,图1.18代表不连续存储的线性链表)
(3)说明
链式存储可以表示线性结构也可以表示非线性结构。
3、线性链表(P25)
(1)概念
线性表的链式存储结构称为线性链表。
系统为线性表的每个元素划分占若干字节的一小块存储空间,同时这一小块存储空间一部分用于存放数据元素的值,称为数据域,另一部分用于存放该元素后一结点的位置,称为指针域。
(2)说明
A、线性链表中用专门的指针HEAD指向第一个元素,即第一个结点,此指针被称为头指针;
B、线性链表中的最后一个元素,即终端结点没有后件,其指针域为空,用NULL或0表示,代表链表终止。
C、如果HEAD=NULL(或0)时,线性表就是一个空表;
D、线性单链表(单向链表):
每个结点只有一个指针域的链表。
这种链表只能顺指针向链尾方向进行扫描,不能反向扫描;
E、双向链表:
每个结点有左指针(Llink,指向前件)和右指针(Rlink,指向后件)两个指针的线性链表。
(图1.19所示);
F、程序中,通常利用结构体变量来构造链表。
4、带链的栈(又称为可利用栈)(P26)
(1)带链的栈的表示
(图1.20)
(2)作用:
可利用栈常用来收集存储空间中所有空闲的存储结点。
当需要存储结点时,即从可利用的栈的顶部取出栈顶结点;当系统要释放一个存储结点时,将该结点空间放回到可利用栈的栈顶。
存储结点的入栈如图1.21a所示,出栈操作如图1.21b所示,都在栈顶进行。
5、带链的队列(P27)
(1)带链的队列的表示(图1.22a所示)
(2)结点的插入和删除:
插入