210 likes | 324 Views
计算机科学与技术专业(本科). 数据结构. 第一讲 绪 论. 目 录. ● 关于该课程和课程学习. 教学要求 理解数据结构的基本术语, 掌握逻辑结构和物理结构的 概念。 理解各类数据结构的特征 及表示方法。 理解数据结构的评价标准, 掌握时间复杂性的分析方法。 了解数据结构使用的算法 工具。. ● 数据结构的基本术语. ● 数据结构的分类和表示. ● 数据结构的算法评价. ● 数据结构的算法工具. ● 下单元导学. 一、关于该课程和课程学习. 1 、关于课程.
E N D
计算机科学与技术专业(本科) 数据结构 第一讲 绪 论
目 录 ●关于该课程和课程学习 教学要求 理解数据结构的基本术语, 掌握逻辑结构和物理结构的 概念。 理解各类数据结构的特征 及表示方法。 理解数据结构的评价标准, 掌握时间复杂性的分析方法。 了解数据结构使用的算法 工具。 ●数据结构的基本术语 ●数据结构的分类和表示 ● 数据结构的算法评价 ●数据结构的算法工具 ●下单元导学
一、关于该课程和课程学习 1、关于课程 ◎课程任务:掌握各种数据结构的特征、性质 、表示和操 作运算, 掌握对数据进行搜索和排序等运算 的基本方法 ◎课程性质:属专业基础课和技术基础课,是该专业的主干 课程 之一 ◎ 课程属性:中央统设,4个学分 ◎课程特点:概念多,算法多,算法分析难 ◎ 文字教材:殷人昆编著《数据结构》、徐孝凯等编的实验 指导、习题解答和中央电大编的形成性考核册
2、关于课程学习 ◎课堂辅导:重点内容讲授、难题解析 ◎上机实验:做实验指导书中的七个 ◎平时作业:形成性考核册中的全部题目,提交 4次,批改2次,检查完成情况2次 ◎上机考试:期末进行,按题目自行编程、调试, 一个小时完成 ◎考核方法:作业和实验15%,上机考试15%, 期末闭卷笔试统考70%
3、《数据结构》课程教学模式 ---- 单元循环式 根据课程内容的内在联系将其分成若干单元,以单元循环重复教学。 第一循环是参考辅导教师的导学意见,学生初读主教材该单元的内容,思考对主要知识点的理解并提出疑难 第二循环是学生在校园网“专业论坛”的本课程平台就单元内容提问和讨论,或用电子邮件和电话方式向请求辅导教师解答 第三循环是辅导教师在广泛收集学生提问的基础上,筛选出带有普遍性的问题,进行集中答疑 第四循环是学生完成《形成性考核册》中相应的作业 第五循环是从《实验指导书》中选择一两个与单元内容相关的实验上机编程调式 第六循环是学生借助《数据结构课程网站》(sjjg.ougz.com.cn)的“同步练习”平台按6种题型进行练习和测试 第七循环是辅导教师作单元小结,并提出下单元的导学意见
二、基本术语 1、数据—用文字符号、数字符号及其它规定的符号对现实世界的事物及其活动的抽象描述 2、数据元素—数据整体中相对独立的单位 3、数据结构 ◎数据结构是指数据及其相互之间的联系 ◎数据结构有逻辑结构和物理结构之分 ◎物理结构是一种逻辑结构在存储器中的存储方式,存贮方式有顺序、链接、索引、散列等多种,所以一种逻辑结构可以采用多种物理结构存贮 ◎逻辑结构所关注的是数据之间的联系,是这种联系的抽象描述 ◎通常所说的数据结构就是指逻辑结构
三、数据结构的分类及表示方法 实例:教务处人事简表(表1—1) ◎目录行包括六个数据项,这些定义了表的结构 ◎共有十条记录,一个记录就是一个数据元素 ◎“职工号”的值能唯一地标识一个记录,该数据项叫做 关键项
05 01 03 08 02 07 04 06 09 10 1、线性结构 设表1—1中只考虑年龄大小的排列 ◎图形表示 ◎二元组表示 line= (K,R) K={01,02,03,04,05,06,07,08,09,10} R={r} r={〈05,01〉, 〈01,03〉, 〈03,08〉, 〈08,02〉, 〈02,07〉, 〈07,04〉, 〈04,06〉, 〈06,09〉, 〈09,10〉} ◎结构特点:数据元素之间最多只有一个前驱,最多只有一个后继,元素之间是一对一联系,即1︰1
01 02 03 04 05 06 07 08 09 10 2、树形结构 设表1—1中只考虑领导和被领导关系 ◎图形表示 ◎二元组表示 tree=(K,R) K={01,05,03,08,04,06,02,07,09,10} R={r} r={〈 01,02〉, 〈01,03〉, 〈01,04〉, 〈02,05〉, 〈03,06〉,〈03,07〉, 〈03,08〉, 〈04,09〉,〈04,10〉} ◎结构特点:每个元素最多有一个前驱,但可有多个后继,元素之间是一对多关系,即1︰N,有层次关系
01 01 02 04 02 04 05 05 09 09 07 07 简化 03 03 08 08 06 06 10 10 3、图形结构 设表1—1中只考虑个人之间的关系 ◎图示
◎二元组表示 graph=(K,R) K= {01,02,03,04,05,06,07,08,09,10} R={r} r={(01,02),(01,05),(04,01),(02,03),(05,03),(03,06),(07,06),(07,10),(08,07),(04,07),(04,09)} ◎特点:每个元素可以有多个前驱和多个后即 N︰M,包含回路,无层次关系。 ◎图有有向图和无向图之分。
四、算法评价 1、算法 ◎算法即解决特定问题的方法,可以描述为“数据结构+程序语言” ◎对同一个问题,不同人所设计的算法互不同 ◎本课程的目的就是要对特定的问题,按照具体要求,选择适当的数据结构,设计出较好的算法
2、算法评价标准 ◎正确性——合理的数据输入下,在有限的运行时间内得出正确的结果 ◎健壮性——对不合理的数据输入的反应和处理能力 ◎可读性——供人们阅读的方便程度 ◎简单性——采用数据结构和方法的简单程度 ◎时间复杂度(计算复杂度)——算法运行时间的相 对量度 ◎空间复杂度——算法运行中临时占用空间大小的量度
3、时间复杂度(Time Complexity) ◎算法运行时间约等于计算机执行一个简单操作的时间与算法所包含简单操作次数之积 ◎任何一个算法最终都分解成简单操作来具体执行,减小这种简单操作的次数是本课程能有所作为的 ◎算法包含的简单操作次数的多少叫做时间复杂度 ◎若解决一个问题的规模为n,则TC=f (n)
例1:累加求和 原算法:int sum(int b[ ],int n) { int s=0; for(int i=0;i<n;i++) s+=b[i]; return s;} 分解算法:简单操作次数: s=0 // 1 i=0; // 1 mark1:if(i>=n) goto mark2; // n+1 s+=b[i]; // n i++; // n goto mark1; // n mark2:return s; // 1 TC=f(n) =4n+4
例2: 矩阵相加 原算法: void Matrixadd(int a[MS][MS], intb [MS][MS], int c[MS][MS],int n) //MS为大于等于n的常量 { int i,j; for (i=0;i<n;i++) for (j=0;j<n;j++) c[i][j] =a[i][j]+b[i][j]; }
分解算法:简单操作次数: i=0; // 1 mark1:if(!(i<n)) goto mark4; // n+1 j=0; // n mark2:if(!(j<n)) goto mark3; // n(n+1) c[I][j] =a[I][j]+b[I][j]; // n﹡n j++; // n﹡n goto mark2; // n﹡n mark3: i++ // n goto mark1; // n mark4: ; TC=f(n) =4n²+ 5n + 2
◎实际上时间复杂度只需大致算出相应数量级(Order)就可以◎实际上时间复杂度只需大致算出相应数量级(Order)就可以 ◎例1算法的TC=f (n) =O (n),例2算法的TC=f (n)=O(n²) ◎本课程所见的TC还有O (1),O (n³),O (log n)等
4、空间复杂性(Space Complexity) ◎算法运行中占用空间包括算法本身占用,输入输出数据占用和运行中的临时占 ◎同一个问题,算法不同,运行中的临时空间不同,即空间复杂性不同 ◎SC只考虑在运行中为局部变量分配的存贮空间的大小,一般也以数量级表示
五、算法工具 1、 采用VC+ + 程序设计语言作为编程工具 2、 一般以类(包括模板类)方式描述 3、 关注的是实现函数,整个程序(头文件、 实现文件和主文件的组合)一般不给出 4、涉及C++ 语法问题,一般不多解释
第一单元导学 1、单元组成:第2章至第4章,共3章。 2、共性:相同的逻辑结构 --- 线性结构。数组是顺序存储的线性表,链表是链式存储的线性表,栈和队列是运算位置被限定的线性表。 3、教学要求:掌握顺序表的定义、特点和基本运算,数组的存储方式,单链表的定义和基本运算,栈和队列的特点、存储结构和基本运算。理解串的的定义和基本运算,循环链表和双向链表特点和基本运算,基于链式存储的多项式相加,优先队列的定义和基本运算。其余是了解的内容。 4、教学方法:每一章又是一个小单元,构成小单元循环式的教学方法。 5、自学要求:先初读第2章,思考对主要知识点的理解并在校园网“专业论坛”本课程平台提出疑难并参与讨论。