第一篇:数据结构与算法课程教学大纲
教学大纲
数据结构与算法(Data Structures)
计算机技术已成为现代化发展的重要支柱和标志,并逐步渗透到人类生活的各个领域。随着计算机硬件的发展,对计算机软件的发展也提出了越来越高的要求。由于软件的核心是算法,而算法实际上是对加工数据过程的描述,所以研究数据结构对提高编程能力和设计高性能的算法是至关重要的。
非数值计算问题的数学模型不再是传统的数学方程问题,而是诸如表、树、图之类的数据结构。因此,简单地说,数据结构是一门研究非数值计算的程序设计问题的学科,主要研究数据的逻辑结构、存储结构和算法。
一、教学目的与要求---了解数据的逻辑结构和物理结构;
教学要求在每章教学内容给出,大体上为三个层次:了解、掌握和熟练掌握。他们的含义大致为:了解是正确理解概念,掌握是学会所学知识,熟练掌握就是运用所学知识解决实际问题。
教学目的为:了解算法对于程序设计的重要性 ; 学习掌握基本数据结构的描述与实现方法,熟练掌握典型数据结构及其应用算法的设计。了解算法分析方法。
二、教学重点与难点--数据结构中基本概念和术语,算法描述和分析方法。
1、链表插入、删除运算的算法。算法时间复杂度
2、后缀表达式的算法,数制的换算
利用本章的基本知识设计相关的应用问题
3、循环队列的特点及判断溢出的条件
利用队列的特点设计相关的应用问题
4、串的模式匹配运算算法
5、二叉树遍历算法的设计
利用二叉树遍历算法,解决简单应用问题 哈夫曼树的算法
6、图的遍历
最小生成树
最短路径
7、二叉排序树查找
平衡树二叉树
8、堆排序
快速排序 归并排序
三、教学方法与手段-充分利用多媒体教学工具,配合黑板上的教学内容较难部分的算法实现过程演义
四、教学内容、目标与学时分配
教学内容 教学目标 课时分配
1、绪论
数据结构的内容
逻辑结构与存储结构
算法和算法分析
2、线性表
线性表的定义与运算
线性表的顺序存储
线性表的链式存储
3、栈
栈的定义与运算
栈存储和实现
栈的应用举例
4、队列
队列的定义与基本运算
队列的存储与实现
队列的应用举例
5、串
串的定义与基本运算
串的表示与实现
串的基本运算
6、树和二叉树
树的定义和术语
二叉树树的基本概念和术语 遍历二叉数和线索二叉树
二叉树的转换
二叉树的应用
哈夫曼树及其应用
7、图
图的定义和术语
图的存储结构
图的遍历算法
图的连通性
8、查找
查找的基本概念与静态查找 动态查找
哈希表
了解
了解
掌握
熟练掌握顺序表存储地址的计算
掌握单链表的结构特点和基本运算
掌握双链表的结构特点和基本运算
掌握栈的定义与运算
掌握栈的存储与实现
熟练掌握栈的各种实际应用
掌握队列的定义与基本运算
熟练掌握队列的存储与实现
掌握循环队列的特征和基本运算
了解串的逻辑结构
掌握串的存储结构
熟练掌握串的基本运算
了解
了解二叉树
熟练掌握二叉树定义和存储结构
了解二叉树的遍历算法
掌握
掌握哈夫曼的建立及编码
了解
了解
熟练掌握
熟练掌握
了解
熟练掌握
了解哈希表与哈希方法
4学时
1学时
1学时
2学时
8学时
2学时
2学时
4学时
8学时
2学时
2学时
4学时
6学时
2学时
2学时
2学时
6学时
2学时
2学时
2学时
12学时
2学时
2学时
2学时
2学时
2学时
2学时
8学时
2学时
2学时
2学时
2学时
8学时
4学时
2学时
2学时
9、排序
12学时 插入排序
熟练掌握基本思想
3学时 快速排序
了解各种内部排序方法和特点
3学时 选择排序
掌握
2学时 各种排序方法比较
掌握
2学时
实验内容 实验目标 课时分配 算法编程实验:
1、用指针方式编写程序 复习C(C++)语言指针、结构体等的用法
2、对单链表进行遍历
链表的描述与操作实现
3、栈及其操作
描述方法及操作
4、编写串子系统1 串的特点及顺序定长存储、操作、查找
5、编写串子系统 2 串的特点及顺序定长存储、操作、查找
6、编写树子系统1 二叉树的特点及存储方式、创建、显示、遍历等
7、编写树子系统2 二叉树的特点及存储方式、创建、显示、遍历等
8、图子系统
图的邻接矩阵的存储、遍历、广度/深度优先搜索
9、查找子系统
理解查找基本算法、平均查找长度、静态、动态查找等
五、考试范围与题型
1、考试范围与分数比例
1)绪论
12% 2)线性表
17% 3)栈
7% 4)队列
6% 5)串
4% 6)树和二叉树
14% 7)图
15% 8)查找
4% 9)排序
21%
2、考试题型与分数比例
1)名词解释
18% 2)判断对错
16% 3)填空
16% 4)单项选择
18% 5)应用
32%
六、教材与参考资料
1、教材: 实用数据结构基础(谭浩强)中国铁道出版社
2、参考资料: 数据结构(严蔚敏)清华大学出版社
数据结构实用教程(徐孝凯)清华大学出版社
(撰写人:
,审核人: 2学时 2学时 2学时 2学时 2学时 2学时 2学时 2学时 2学时)
第二篇:数据结构与算法教学大纲
《数据结构》教学大纲
一、课程基本信息
课程名称:数据结构
总学时:64(理论课内学时48,上机课内学时16)课程设计:24 课程类型:必修课
考试形式:半开卷考试 讲课对象:计算机本科
建议教材:《数据结构》(C语言版)陈明 编著 清华大学出版社
课程简介:数据结构课程介绍如何组织各种数据在计算机中的存储、传递和转换。内容包括:数组、链接表、栈和队列、串、树与森林、图、排序、查找、索引与散列结构等。课程以结构化程序设计语言C语言作为算法的描述工具,强化数据结构基本知识和结构化程序设计基本能力的双基训练。为后续计算机专业课程的学习打下坚实的基础。
二、课程的教学目标
“数据结构”是计算机相关专业的一门重要专业基础课,是计算机学科的公认主干课。课程内容由数据结构和算法分析初步两部分组成。
数据结构是针对处理大量非数值性程序问题而形成的一门学科,内涵丰富、应用范围广。它既有完整的学科体系和学科深度,又有较强的实践性。通过课程的学习,应使学生理解和掌握各种数据结构(物理结构和逻辑结构)的概念及其有关的算法;熟悉并了解目前常用数据结构在计算机诸多领域中的基本应用。
算法分析强调最基本的算法设计技术和分析方法。要求学生从算法和数据结构的相互依存关系中把握应用算法设计的艺术和技能。
经过上机实习和课程设计的训练,使学生能够编制、调试具有一定难度的中型程序;以培养良好的软件工程习惯和面向对象的软件思维方法。
“数据结构”的前序课是《离散数学》、《C语言程序设计与算法初步》。
三、理论教学内容的基本要求及学时分配
1、序论(2学时)学习目标:熟悉各类文件的特点,构造方法以及如何实现检索,插入和删除等操作。
重点与难点:本章无。
知识点:数据、数据元素、数据结构、数据类型、抽象数据类型、算法及其设计原则、时间复杂度、空间复杂度。
2、线性表(4学时)
学习目标:
(1)了解线性表的逻辑结构特性是数据元素之间存在着线性关系,在计算机中表示这种关系的两类不同的存储结构是顺序存储结构和链式存储结构。用前者表示的线性表简称为顺序表,用后者表示的线性表简称为链表;
(2)熟练掌握这两类存储结构的描述方法以及线性表的基本操作在这两种存储结构上的实现;
(3)能够从时间和空间复杂度的角度综合比较线性表两种存储结构的不同特点及其适用场合;
(4)结合线性表类型的定义增强对抽象数据类型的理解。
重点与难点:链表是本章的重点和难点。扎实的指针操作和内存动态分配的编程技术是学好本章的基本要求,分清链表中指针 p 和结点 *p 之间的对应关系,区分链表中的头结点、头指针和首元结点的不同所指以及循环链表、双向链表的特点等。
知识点:线性表、顺序表、链表、有序表。
3、栈和队列(4学时)
学习目标:
(1)掌握栈和队列这两种抽象数据类型的特点,并能在相应的应用问题中正确选用它们;
(2)熟练掌握栈类型的两种实现方法;
(3)熟练掌握循环队列和链队列的基本操作实现算法;(4)理解递归算法执行过程中栈的状态变化过程。
重点与难点:栈和队列是在程序设计中被广泛使用的两种线性数据结构,因此本章的学习重点在于掌握这两种结构的特点,以便能在应用问题中正确使用。
知识点:顺序栈、链栈、循环队列、链队列。
4、串(2学时)
学习目标:(1)理解串类型定义中各基本操作的特点,并能正确利用它们进行串的其它操作;
(2)理解串类型的各种存储表示方法;(3)理解串匹配的各种算法。
重点和难点:相对于其它各个知识点而言,本章非整个课程的重点,鉴于串已是多数高级语言中已经实现的数据类型,因此本章重点仅在于了解串类型定义中各基本操作的定义以及串的实现方法,并学会利用这些基本操作来实现串的其它操作。本章的难点是理解实现串匹配的KMP算法的思想。
知识点:串的类型定义、串的存储表示、串匹配、KMP算法。
5、数组和广义表(4学时)
学习目标:
(1)理解数组类型的特点及其在高级编程语言中的存储表示和实现方法,并掌握数组在“以行为主”的存储表示中的地址计算方法;
(2)掌握特殊矩阵的存储压缩表示方法;
(3)理解稀疏矩阵的两类存储压缩方法的特点及其适用范围,领会以三元组表示稀疏矩阵时进行矩阵运算所采用的处理方法。
重点和难点:本章重点是学习数组类型的定义及其存储表示。
知识点:数组的类型定义、数组的存储表示、特殊矩阵的压缩存储表示方法、随机稀疏矩阵的压缩存储表示方法。
6、树和二叉树(8学时)
学习目标:
(1)领会树和二叉树的类型定义,理解树和二叉树的结构差别;(2)熟记二叉树的主要特性,并掌握它们的证明方法;
(3)熟练掌握二叉树的各种遍历算法,并能灵活运用遍历算法实现二叉树的其它操作;
(4)理解二叉树的线索化过程以及在中序线索化树上找给定结点的前驱和后继的方法;
(5)熟练掌握二叉树和树的各种存储结构及其建立的算法;(6)学会编写实现树的各种操作的算法;
(7)了解最优树的特性,掌握建立最优树和赫夫曼编码的方法。
重点和难点:二叉树和树的遍历及其应用是本章的学习重点,而编写实现二叉树和树的各种操作的递归算法也恰是本章的难点所在。
知识点:树的类型定义、二叉树的类型定义、二叉树的存储表示、二叉树的遍历以及其它操作的实现、线索二叉树、树和森林的存储表示、树和森林的遍历以及其它操作的实现、最优树和赫夫曼编码。
7、图(8学时)
学习目标:
(1)领会图的类型定义;
(2)熟悉图的各种存储结构及其构造算法,了解各种存储结构的特点及其选用原则;
(3)熟练掌握图的两种遍历算法;(4)理解各种图的应用问题的算法。
重点和难点:图的应用极为广泛,而且图的各种应用问题的算法都比较经典,因此本章重点在于理解各种图的算法及其应用场合。
知识点:图的类型定义、图的存储表示、图的深度优先搜索遍历和图的广度优先搜索遍历、无向网的最小生成树、最短路径、拓扑排序、关键路径。
8、查找(6学时)
学习目标:
(1)理解“查找表”的结构特点以及各种表示方法的适用性;(2)熟练掌握以顺序表或有序表表示静态查找表时的查找方法;
(3)熟悉静态查找树的构造方法和查找算法,理解静态查找树和折半查找的关系;
(4)熟练掌握二叉查找树的构造和查找方法;(5)理解二叉平衡树的构造过程;
(6)熟练掌握哈希表的构造方法,深刻理解哈希表与其它结构的表的实质性的差别;
(7)掌握描述查找过程的判定树的构造方法,以及按定义计算各种查找方法在等概率情况下查找成功时的平均查找长度。
重点和难点:本章重点在于理解查找表的结构特点及其各种表示方法的特点和适用场合。
知识点:顺序表、有序表、索引顺序表、静态查找树、二叉查找树、二叉平衡树、哈希表。
9、内部排序(6学时)
学习目标:
(1)理解排序的定义和各种排序方法的特点,并能加以灵活应用。排序方法有不同的分类方法,基于“关键字间的比较”进行排序的方法可以按排序过程所依据的不同原则分为插入排序、交换排序、选择排序、归并排序和计数排序等五类;
(2)掌握各种排序方法的时间复杂度的分析方法。能从“关键字间的比较次数”分析排序算法的平均情况和最坏情况的时间性能。按平均时间复杂度划分,内部排序可分为三类:O(n2)的简单排序方法,O(n*logn)的高效排序方法和O(d*n)的基数排序方法;
(3)理解排序方法“稳定”或“不稳定”的含义,弄清楚在什么情况下要求应用的排序方法必须是稳定的。
重点和难点:希尔排序、快速排序、堆排序和归并排序等高效方法是本章的学习重点和难点。
知识点:排序、直接插入排序、折半插入排序、表插入排序、希尔排序、起泡排序、快速排序、简单选择排序、堆排序、2-路归并排序、基数排序、排序方法的综合比较。
10、文件(4学时)
学习目标:熟悉各类文件的特点,构造方法以及如何实现检索,插入和删除等操作。
重点和难点:本章重点在于了解各种文件的结构特点及其适用场合。知识点:顺序文件、索引文件、B-树、B+树、索引顺序文件、VSAM文件、散列文件、多关键字文件。
四、实验教学内容的基本要求及学时分配
1、线性表(1学时)实验一 顺序表的应用 实验二 链表的应用
要求:理解线性表的定义及其运算;理解顺序表和链表的定义,组织形式,结构特征和类型说明;掌握在这两种表上实现的插入,删除和按值查找的算法;了解循环链表,双(循环)链表的结构特点和在其上施加的插入,删除等操作。
2、栈(0.5学时)实验三 栈的应用
要求:理解栈的定义,特征及在其上所定义的基本运算;掌握在两种存储结构上对栈所施加的基本运算的实现。
3、队列(0.5学时)实验四 队列的应用
要求:理解队列的定义,特征及在其上所定义的基本运算;掌握在两种存储结构上对队列所施加的基本运算的实现。
4、串(0.5学时)实验五 串的应用
要求:了解串的定义;理解和领会串的存储方式;掌握常用的串运算。
5、数组和广义表(0.5学时)实验六 稀疏矩阵的应用
要求:理解多维数组的结构特点和在内存中的两种顺序存储方式;理解并掌握矩阵和特殊矩阵元素在存储区中地址的计算;领会稀疏矩阵的压缩方式和简单运算;了解广义表的定义和基本运算。
6、树与二叉树(4学时)实验七 树与二叉树的应用
要求:理解树的定义,术语;领会并掌握树的各种存储结构;熟练掌握森林与二叉树间的相互转换;领会树和森林的遍历;了解树的简单应用。深刻理解二叉树的定义,性质及其存储方法;熟练掌握二叉树的二叉链表存储方式,结点结构和类型定义;理解并掌握二叉树的三种遍历算法;掌握二叉树的线索化方法;灵活运用二叉树的遍历方法解决相关的应用问题。
7、图(3学时)实验八 图的应用
要求:理解图的基本概念及术语;掌握图的两种存储结构(邻接矩阵和邻接表)的表示方法;熟练掌握图的两种遍历(深度优先搜索遍历和广度优先搜索遍历)的算法思想,步骤,并能列出在两种存储结构上按上述两种遍历算法得到的序列;理解最小生成树的概念,能按Prim算法构造最小生成树;领会并掌握拓扑排序,关键路径,最短路径的算法思想。
8、查找(3学时)实验九 顺序查找 实验十 折半查找 实验十一 哈希表的应用 实验十二 二叉排序树的综合练习要求:了解查找的基本思想及查找成功和不成功的概念;掌握在顺序表,有序表,索引表,散列表等上的查找方法和算法,并能求出相应的平均查找长度;理解并掌握二叉排序树,平衡二叉树B-树的各种算法。
9、排序(3学时)实验十三 插入排序 实验十四 选择排序 实验十五 排序综合练习
要求:领会排序的基本思想和基本概念;理解并掌握插入排序,冒泡排序,快速排序,直接选择排序,堆排序,归并排序和基数排序的基本思想,步骤,算法及时空效率分析;了解外排序的定义和基本方法。
五、大纲说明
1、课堂讲述的论题只是核心或有特色的知识内容,还有相当数量的篇章内容留给学生自学,所确定的自学部分内容亦属考查范围。
2、“数据结构”课注重上机训练,所有作业都必须配有规范的文档。上机训练由平时的上机训练和小学期的实训课程设计两部分组成。
3、课内学时安排说明:前8周每周4学时全为理论课,从第9周开始理论和上机为1:1,也即2学时理论,2学时上机训练。
4、本课强调能力的培养,期末采用半开卷考试(允许同学携带一页A4纸的总结资料)。本课成绩由平时作业、上机成绩(30%)和期末考试(70%)合成得到,有独到见解的作业予以适当加分。
5、主要参考书:
[1]《数据结构与算法教程》邹永林 周蓓 唐晓阳 杨剑勇 编著 机械工业出版社
[2]《数据结构(C语言版)》(含CD)严蔚敏 吴为民 编著 清华大学出版社
[3]《数据结构习题集(C语言版)》严蔚敏 编著 清华大学出版社
[4]《数据结构习题解析与实训》张世和 编著 清华大学出版社
第三篇:《数据结构与算法》课程设计教学大纲
《数据结构与算法》课程设计教学大纲(Data Structures & Algorithms)
一、基本信息
课程编号:E1132107 课程类别:学科基础课必修课 适用层次:本科
适用专业:计算机科学与技术、网络工程、软件工程等 开课学期:3 学 分:2学分 学 时:2周 考核方式:考查
二、教学目的
数据结构与算法课程设计不仅是数据结构与算法课程的实践教学环节,而且是一门综合性实验项目。通过这个实验,培养学生综合运用数据结构基本知识和程序设计基本知识,解决实际问题,提高程序设计的能力和团队协作精神。
本课程设计的目的就是要达到理论与实际应用相结合,使同学们能够根据数据对象的特性,学会数据组织的方法,能把现实世界中的实际问题在计算机内部表示出来,并培养基本的、良好的程序设计技能。
1.学生通过实践掌握线性表、树、图等数据结构的存储结构及算法实现; 2.培养学生利用数据结构知识解决实际问题的能力;3.使学生初步具备查阅资料、分析设计、上机实现和书写科技 报告的能力。
三、基本要求
1.指导教师要在选题、设计、上机实现等诸环节上投入精力,加强指导、讨论和答疑的力度。尤其在选题上,要充分考虑学生目前所具有的知识水平、掌握的开发工具、以及综合设计能力的现状,使题目取材合理、大小适中、难易适度,使学生在完成设计工作后,能有所收获。2.参加课程设计的学生要珍惜机会、勤奋工作、勇于创新、勇于探索、勇于实践,虚心向指导教师请教,向同学学习,独立完成设计任务。
3.学生需保质、保量、保时间进度地提交规范的课程设计报告,审查由指导教师负责。
四、教学内容
1.主要内容:应用所掌握的线性表、树、图等数据结构知识解决实际问题。2.软件开发工具:C/C++、JAVA。
3.课程设计题目:指导教师拟定(参考题目见附录1)
4.具体步骤:指导教师拟定设计题目,学生研究具体问题、进行需求分析、选择合适的数据结构、设计算法、编写并调试代码、书写文档材料、提交设计报告,最后,由指导教师验收并评定成绩。
5.设计内容及时间安排:第1-3天,选定题目,明确题目要求、确定数据结构、设计算法,并分析算法复杂度;第4-8天,编写程序、调试程序、测试程序;第9-10天,撰写设计报告,准备答辩(上机演示,回答教师提问)。6.设计报告书写要求:按照软件开发规范的要求书写设计报告(参见附录三报告书写格式);要求报告层次结构清晰、图表完整、语言通顺、字迹工整。7.验收要求:1)运行所设计的程序;2)回答有关问题;3)提交课程设计报告(打印或手写在实习报告册上);4)提交软盘(源程序)。(鼓励学生创新。对内容有创新者,成绩评定将适当提高)。
五、考核方法
学习成绩的评定方式:考查。
课程设计成绩评定 =平时出勤(20%)+设计报告(40%)+答辩(40%)通过设计答辩方式,并结合学生的动手能力,独立分析解决问题的能力和创新精神,总结报告和答辩水平以及学习态度综合考评。成绩分为优、良、中、及格和不及格五等。
六、教材与参考资料 1.建议教材:
[1] 数据结构(C++)版,王红梅、胡明、王涛编著,清华大学出版社,2005.7 [2] 自编教材
2.建议参考书目:
[1] 许卓群,杨冬青,唐世渭,张铭.数据结构与算法.高等教育出版社,2004.7 [2] 严蔚敏, 陈文博.数据结构及应用算法教程.清华大学出版社, 2001.2 [3] 朱晋蜀.数据结构(第一版).成都: 电子科技大学出版社, 2000.1 [4] Clifford A.Shaffer著.张铭,刘晓丹译.数据结构与算法分析.电子工业出版社,1998.8 [5] 殷人昆等.数据结构(用面向对象方法与C++描述).清华大学出版社,1999.7 [6] Ford W., Topp W.DATA STRUCTURES with C++.清华大学出版社(影印版),1997.3
附录一
参考题目(可分若干组,每个学生选择其中一个题目)
1.商厦家电库存管理 2.排序算法的时间比较
3.使用哈希表技术判断两个源程序的相似性 4.以队列实现的仿真技术预测理发馆的经营状况 5.某公园导游图
6.用树型结构的搜索算法模拟因特网域名的查询 7.管道铺设施工的最佳方案选择 8.表达式分析与求值程序 9.安排教学计划
10.设计Huffman 编码器与解码器 11.在国际象棋盘上马遍历问题 12.八皇后问题 13.民航售票系统 14.模拟旅馆管理系统中的床位分配和加收 15.银行业务活动的模拟
16.文字统计系统—文字研究助手 17.修道士野人问题 18.考试问题
19.计算机辅助考核系统 20.学籍管理系统
注:学生可以自选题目或选择指导老师拟定的题目。
附录二
开发步骤
1.分析题目的要求、目的; 2.选择适当的数据结构;
3.抽象数据类型的设计; 4.抽象数据类型的实现; 5.编写代码、上机调试; 6.总结验收、评价。
附录三 报告书写格式
1.问题描述
题目内容、基本要求 2.需求分析
软件的基本功能、输入/输出形式、测试数据要求 3.概要设计
所需的ADT及作用、主程序流程及模块调用关系 4.详细设计
实现概要设计的数据类型、每个操作的伪码算法、主程序和其它模块的伪码算法、函数调用关系图 5.编码与调试分析
编码与调试过程中遇到的问题及解决的办法,还存在哪些没有解决的问题? 6.使用说明
简要说明程序运行操作步骤 7.测试结果
8.课程设计心得体会
第四篇:数据结构与算法课程论文
数据结构与算法课程小论文
10计本一班 王晓龙 1004011026 一. 内容概要:
如何合理地组织数据、高效地处理数据是扩大计算机领域、提高软件效率的关键。在软件开发过程中要求“高效地”组织数据和设计“好的”算法,并使算法用程序来实现,通过调试而成为软件,必须具备数据结构领域和算法设计领域的专门知识。
本课程主要学习在软件开发中涉及到的各种常用数据结构及其常用的算法,在此基础上,学习如何利用数据结构和算法解决一些基本的应用问题。通过数据结构的逻辑结构、存储结构、基本算法和相关应用问题来介绍其基本知识和应用知识。
二. 关键字:
数据结构:数据的逻辑结构、数据的存储结构、基本算法;算法分析
三. 课程主要内容和基本原理:
A.数据结构:
数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
在许多类型的程序的设计中,数据结构的选择是一个基本的设计考虑因素。许多大型系统的构造经验表明,系统实现的困难程度和系统构造的质量都严重的依赖于是否选择了最优的数据结构。许多时候,确定了数据结构后,算法就容易得到了。有些时候事情也会反过来,我们根据特定算法来选择数据结构与之适应。不论哪种情况,选择合适的数据结构都是非常重要的。
(1).分类:
数据元素相互之间的关系称为结构。有四类基本结构:集合、线性结构、树形结构、图状结构(网状结构)。树形结构和图形结构全称为非线性结构。集合结构中的数据元素除了同属于一种类型外,别无其它关系。线性结构中元素之间存在一对一关系,树形结构中元素之间存在一对多关系,图形结构中元素之间存在多对多关系。在图形结构中每个结点的前驱结点数和后续结点数可以任意多个。
数据结构在计算机中的表示(映像)称为数据的物理(存储)结构。它包括数据元素的表示和关系的表示。数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。顺序存储方法:它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现,由此得到的存储表示称为顺序存储结构。顺序存储结构是一种最基本的存储表示方法,通常借助于程序设计语言中的数组来实现。链接存储方法:它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。由此得到的存储表示称为链式存储结构,链式存储结构通常借助于程序设计语言中的指针类型来实现。索引存储方法:除建立存储结点信息外,还建立附加的索引表来标识结点的地址。散列存储方法:就是根据结点的关键字直接计算出该结点的存储地址。
数据结构中,逻辑上(逻辑结构:数据元素之间的逻辑关系)可以把数据结构分成线性结构和非线性结构。线性结构的顺序存储结构是一种随机存取的存储结构,线性表的链式存储结构是一种顺序存取的存储结构。线性表若采用链式存储表示时所有结点之间的存储单元地址可连续可不连续。逻辑结构与数据元素本身的形式、内容、相对位置、所含结点个数都无关。(2).四类基本结构:
⑴集合结构。该结构的数据元素间的关系是“属于同一个集合”。⑵线性结构。该结构的数据元素之间存在着一对一的关系。⑶树型结构。该结构的数据元素之间存在着一对多的关系。
⑷图形结构。该结构的数据元素之间存在着多对多的关系,也称网状结构。从上面所介绍的数据结构的概念中可以知道,一个数据结构有两个要素。一个是数据元素的集合,另一个是关系的集合。在形式上,数据结构通常可以采用一个二元组来表示。
(3).常用的数据结构:
a.数组: 在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。b.栈:
是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。c.队列:
一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。d.链表:
是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。e.树:
是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足以下条件:
(1)有且仅有一个结点 k0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。(2)除K0外,k中的每个结点,对于关系N来说有且仅有一个前驱。
(3)K中各结点,对关系N来说可以有m个后继(m>=0)。f.图:
图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。g.堆: 在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。h.散列表:
若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。B.算法分析:
算法分析是对一个算法需要多少计算时间和存储空间作定量的分析。算法是解题的步骤,可以把算法定义成解一确定类问题的任意一种特殊的方法。在计算机科学中,算法要用计算机算法语言描述,算法代表用计算机解一类问题的精确、有效的方法。算法+数据结构=程序,求解一个给定的可计算或可解的问题,不同的人可以编写出不同的程序,来解决同一个问题,这里存在两个问题:一是与计算方法密切相关的算法问题;二是程序设计的技术问题。算法和程序之间存在密切的关系。分析算法可以预测这一算法适合在什么样的环境中有效地运行,对解决同一问题的不同算法的有效性作出比较。
四.心得体会:
在做完这次课程论文后,让我再次加深了对数据结构与算法的理解,对数据结构的构建也有更深层次的体会。算法的每一次改进和提高,都凝聚着人类的智慧和辛勤劳动,每一次创新都给人类带来了巨大的进步。数据结构与先进的算法能够合理地组织数据、高效地处理数据,扩大计算机的应用领域,提高软件的效率。这充分体现了其重要意义。
五. 参考文献:
数据结构与算法王昆仑,李红
第五篇:《算法与数据结构》教学大纲
《算法与数据结构》教学大纲
一、使用说明
(一)课程性质
《数据结构》是一门专业基础课,在计算机软件的各个领域中均会使用到数据结构的有关知识。本课程的先修课程为C程序设计或C++程序设计。
(二)教学目的
学会从问题入手,分析研究计算机加工的数据结构的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作算法,并初步掌握时间和空间分析技术。另一方面,本课程的学习过程也是进行复杂程序设计的训练过程,要求学生会书写符合软件工程规范的文件,编写的程序代码应结构清晰、正确易读,能上机调试并排除错误。
(三)教学时数
课堂讲授每周4学时,18周,共72学时。
(四)教学方法
本课程将采用课堂讲授及课堂讨论相结合的交互式教学法,同时辅以必要的上机操作实践。
(五)面向专业
计算机科学与技术专业。
二、教学内容
第一章 绪论
(一)教学目的要求
介绍数据结构的一些基本概念,算法的时间复杂度和空间复杂度的分析方法,抽象数据类型的定义和使用以及算法的描述方法。掌握数据结构的一些基本概念,掌握算法的时间复杂度和空间复杂度的分析方法,了解抽象数据类型的定义和使用,了解算法的描述方法。
(二)教学内容
主要内容:数据结构的一些基本概念:数据、数据元素、数据逻辑结构、数据存储结构、数据类型、算法等。抽象数据类型。算法时间复杂度和空间复杂度的分析。
教学重点:有关数据结构的各个名词和术语的含义,以及语句频度和时间复杂度、空间复杂度的估算。
教学难点:算法时间复杂度和空间复杂度的分析。
第一节
一、非数值计算
二、数据结构课程内容的历史演变
三、数据结构研究范围
第二节
一、数据
二、数据结构
三、数据类型
四、抽象数据类型
五、多型数据类型
第三节
一、固有数据类型
抽象数据类型的表示与实现
基本概念和术语 什么是数据结构
二、数据抽象
三、抽象数据类型的描述语言
第四节
一、算法
二、算法设计的要求
三、算法效率的度量
四、算法的存储空间需求
(三)教学方法与形式
课堂讲授、多媒体课件。
(四)教学时数
4学时。
第二章 线性表
(一)教学目的与要求
介绍线性表的基本概念和类型定义,对顺序表和单链表的常用操作方法及其程序实现,循环链表和双向链表的定义和它的插入、删除等操作方法。掌握线性表的基本概念和类型定义;熟练掌握对顺序表和单链表的常用操作方法及其程序实现;掌握循环链表和双向链表的定义和它的插入、删除等操作方法。
(二)教学内容
主要内容:线性表的基本概念和类型定义,线性表的顺序存储结构,线性表的链接存储结构:(1)单链表的查找、插入和删除;(2)循环链表;(3)双向链表。
教学重点:在顺序表和链表上各种基本算法的实现及相关的时间性能分析。
教学难点:用所学的基本知识设计有效算法解决与线性表相关的应用问题。链表要分清链表中指针p和结点*p之间的对应关系,区分链表中的头结点、头指针以及循环链表、双向链表的特点等。
第一节
一、线性表的定义
二、线性表的基本操作
第二节
一、顺序表
二、顺序表上基本运算的实现
三、顺序表应用举例
第三节
一、线性链表
二、循环链表
三、双向链表
四、静态链表
第四节 一、一元多项式的数学表示 二、一元多项式的计算机表示
三、抽象数据类型:一元多项式的定义
四、抽象数据类型:一元多项式的存储结构
五、抽象数据类型:一元多项式的基本操作算法实现
(三)教学方法与形式
一元多项式的表示及相加 线性表的链式存储表示和实现 线性表的顺序存储表示和实现
线性表的类型定义 算法和算法分析 课堂讲授、多媒体课件。
(四)教学时数
8学时。
第三章 栈和队列
(一)教学目的与要求
介绍栈和队列的定义,顺序和链接存储的栈和队列的各种运算的方法及其程序实现。掌握栈和队列的定义,熟练掌握顺序和链接存储的栈和队列的各种运算的方法及其程序实现。
(二)教学内容
主要内容:栈的类型定义,栈的顺序存储和链接存储的表示,在栈的顺序存储和链接存储上进行各种栈操作的算法,栈的应用举例,队列的类型定义,队列的顺序存储(循环队)和链接存储表示及各种操作的实现算法。
教学重点:栈和队列在两种存储结构上实现的基本运算。教学难点:递归的实现、循环队列中对边界条件的处理。
第一节
一、抽象数据类型栈的定义
二、栈的表示和实现
第二节
一、数制转换
二、括号匹配的检验
三、表达式求值
第三节
一、函数调用与栈
二、递归调用栈的变化
第四节
一、抽象数据类型队列的定义
二、链队列--队列的链式表示和实现
三、循环队列--队列的顺序表示和实现
第五节
一、优先级队列的概念
二、优先级队列的存储表示和实现
(三)教学方法与形式
课堂讲授、多媒体课件。
(四)教学时数
4学时。
第四章 串
(一)教学目的与要求
介绍串的基本概念和操作,串的存储结构以及基本操作的算法实现。掌握串的基本概念和操作,掌握串的存储结构以及基本操作的算法实现。
(二)教学内容
主要内容:串的类型定义,串的表示和实现,正文模式匹配,正文编辑——串操作应用举例串的类型定义。
教学重点:串类型定义中各基本操作的定义以及串的实现方法。教学难点:利用串的基本操作来实现串的其它操作。
优先级队列 队列 栈与递归的实现 栈的应用举例
栈
第一节
一、串的定义
二、串的基本操作
第二节
一、定长顺序存储表示
二、堆分配存储表示
三、串的块链存储表示
四、字符串操作的实现
第三节
二、模式匹配的一种改进算法
(三)教学方法与形式
课堂讲授、多媒体课件。
(四)教学时数
4学时。
串的类型定义
串的表示和实现
字符串的模式匹配
一、求子串位置的定位函数Index(S,T,pos)
第五章 数组和广义表
(一)教学目的
介绍数组的基本概念和基本操作的算法实现;稀疏矩阵的定义和各种存储结构,稀疏矩阵的转置和相加的方法并了解其算法;广义表的定义、存储结构和求广义表的长度及深度的算法,建立广义表和输出广义表的方法并了解其算法。掌握数组的基本概念和基本操作的算法实现;掌握稀疏矩阵的定义和各种存储结构,掌握稀疏矩阵的转置和相加的方法并了解其算法;掌握广义表的定义、存储结构和求广义表的长度及深度的算法,掌握建立广义表和输出广义表的方法并了解其算法。
(二)教学内容
主要内容:稀疏矩阵的定义、存储和运算,广义表的定义、存储和运算串的类型定义。教学重点:特殊矩阵的压缩存储,以及稀疏矩阵的三元组顺序表示。教学难点:特殊矩阵的压缩存储,以及稀疏矩阵的三元组顺序表示。
第一节 第二节
一、数组的存储方式
二、数组元素存储位置的计算
三、基本操作的实现
第三节
一、特殊矩阵
二、稀疏矩阵
第四节
一、广义表的基本概念
二、广义表的三个重要结论
第五节
一、头尾链表存储表示
二、扩展线性链表存储表示
第六节
广义表的递归算法 广义表的存储表示 广义表的定义 矩阵的压缩存储 数组类型 数组的顺序表示和实现
一、求广义表的深度
二、复制广义表
三、建立广义表的存储结构
(三)教学方法与形式
课堂讲授、多媒体课件。
(四)教学时数
6学时。
第六章 树和二叉树
(一)教学目的与要求
介绍树的定义、性质、存储结构及遍历算法,握二叉树的各种遍历方法及其实现,二叉树的其他操作方法及实现,树、森林和二叉树的转换方法,哈夫曼树的定义和构造哈夫曼树的方法,哈夫曼树编码的方法。掌握树的定义、性质、存储结构及遍历算法,熟练掌握二叉树的各种遍历方法及其实现,掌握二叉树的其他操作方法及实现,掌握树、森林和二叉树的转换方法,掌握哈夫曼树的定义和构造哈夫曼树的方法,了解哈夫曼树编码的方法。
(二)教学内容
主要内容:树的定义、性质和表示方法,二叉树的定义、性质和存储结构,二叉树的各种遍历方法及实现,建立二叉树、输出二叉树、求二叉树深度等的操作方法及实现,树的存储结构,进行先根遍历、后根遍历和按层遍历的方法及实现,进行树与二叉树的转换方法,哈夫曼树的定义、构造哈夫曼树的方法及哈夫曼编码的方法。
教学重点:二叉树和树的遍历及其应用。
教学难点:实现二叉树和树的各种操作的递归算法。
第一节
一、树的定义
二、森林的定义
三、树的抽象数据类型定义
第二节 一、二叉树的定义 二、二叉树的性质 三、二叉树的存储结构
第三节
一、遍历二叉树
二、线索二叉树
第四节
一、树的存储结构
二、森林与二叉树的转换
三、树和森林的遍历
第五节
一、最优二叉树(赫夫曼树)
二、赫夫曼编码
(三)教学方法与形式
课堂讲授、多媒体课件。
(四)教学时数
10学时。
最优树和赫夫曼编码
树和森林
遍历二叉树和线索二叉树
二叉树
树的定义和基本术语
第七章 图
(一)教学目的与要求
介绍图的定义和术语;图的存储结构及深度和广度优先搜索方法及其实现;图的生成树的概念,求图的最小生成树的普里姆算法和克鲁斯卡尔算法并了解其实现算法;拓扑排序的方法并了解其实现算法;计算关键路径的方法及其实现算法。掌握图的定义和术语;熟练掌握图的存储结构及深度和广度优先搜索方法及其实现;掌握图的生成树的概念,掌握求图的最小生成树的普里姆算法和克鲁斯卡尔算法并了解其实现算法;掌握拓扑排序的方法并了解其实现算法;了解计算关键路径的方法并了解其实现算法。
(二)教学内容
主要内容:图的定义和术语,图的邻接矩阵、邻接表和边集数组表示,图的深度和广度优先搜索遍历,图的生成树和最小生成树,拓扑排序。
教学重点:图在邻接矩阵与邻接表上实现的遍历算法(DFS和BFS)。教学难点:基于遍历算法的应用。
第一节
一、图的定义
二、无向图
三、有向图
四、连通图
五、生成树
第二节
一、数组表示法
二、邻接表 三、十字链表
四、邻接多重表
第三节
一、深度优先搜索
二、广度优先搜索
三、连通分量
第四节
一、Kruskal算法
二、Prim算法
第五节
一、拓扑排序
二、关键路径
第六节
一、从某个源点到其余各项点的最短路径
二、每一对顶点之间的最短路径
(三)教学方法与形式
课堂讲授、多媒体课件。
(四)教学时数
12学时。
最短路径 有向无环图及其应用
最小生成树 图的遍历 图的存储表示 图的定义和术语
第八章 查找表
(一)教学目的与要求
介绍顺序表查找和有序表查找的方法及实现;二叉排序树和平衡二叉树的定义、对二叉排序树和平衡二叉树进行插入、删除和查找的方法和实现。哈希表的定义,构造哈希函数的多种方法,以及处理冲突的方法;B树的定义,查找、插入和删除元素的方法。熟练掌握顺序表查找和有序表查找的方法及实现;掌握二叉排序树和平衡二叉树的定义、熟练掌握对二叉排序树和平衡二叉树进行插入、删除和查找的方法和实现。掌握哈希表的定义,构造哈希函数的多种方法,以及处理冲突的方法;了解B树的定义,查找、插入和删除元素的方法。
(二)教学内容
主要内容:顺序查找和二分查找,索引查找和分块查找,散列查找,动态查找树表。教学重点:顺序查找、二分查找、二叉排序树上查找以及散列表上查找的基本思想和算法实现。
教学难点:二叉排序树的删除算法。
第一节
一、顺序表的查找
二、有序表的查找
三、静态树表的查找
四、索引顺序表的查找
第二节 一、二叉排序树
二、平衡二叉树
三、动态的m路搜索树
四、B树和B+树基本概念
第三节
一、什么是哈希表
二、哈希函数的构造方法
三、处理冲突的方法
四、哈希表的查找及其分析
(三)教学方法与形式
课堂讲授、多媒体课件。
(四)教学时数
10学时。
第九章 内部排序
(一)教学目的与要求
介绍插入排序、交换排序、选择排序、快速排序、归并排序、基数排序的方法及其实现,快速排序、堆排序、二路归并排序的方法及其实现,各种排序方法的稳定性、时间复杂度和空间复杂度。掌握插入排序、交换排序、选择排序、快速排序、归并排序、基数排序的方法及其实现,熟练掌握快速排序、堆排序、二路归并排序的方法及其实现,掌握各种排序方法的稳定性、时间复杂度和空间复杂度。
(二)教学内容
主要内容:排序的概念,直接插入排序,冒泡排序和快排序,直接选择排序和堆排序,归并排序。
哈希表 动态查找表 静态查找表 教学重点:插入排序(直接插入、折半插入)、交换排序(冒泡、快速排序)、选择排序(直接选择、堆)、2-路归并排序。
教学难点:快速排序partition算法的应用和堆的调整。
第一节
一、稳定的排序方法
二、内部/外部排序
三、内部排序种类
四、排序中的基本操作
五、排序数据的存储方式
第二节
一、直接插入排序
二、其他插入排序
三、希尔排序
第三节
一、起泡排序算法
二、快速排序算法
第四节
一、简单选择排序
二、树形选择排序
三、堆排序
第五节 第六节
一、多关键字的排序
二、链式基数排序
第七节
(三)教学方法与形式
课堂讲授、多媒体课件。
(四)教学时数
10学时。
第十章 文件
(一)教学目的与要求
介绍文件和记录的基本概念以及基本操作。掌握文件和记录的基本概念以及基本操作。
(二)教学内容
主要内容:基本概念,顺序文件,索引文件,索引顺序文件,散列文件,多关键码文件。教学重点:各种文件的结构特点及其适用场合。教学难点:各种文件的结构特点及其适用场合。
第一节
一、文件及其类别
二、记录的逻辑结构和物理结构
三、文件的操作
四、文件的物理结构
第二节
一、顺序文件的定义
顺序文件 基本概念
各种排序方法的综合比较
归并排序法 基数排序 选择排序法 交换排序法 插入排序 排序的定义和方法
二、顺序文件的优缺点
第三节
一、索引文件的定义
二、索引文件的特点
第四节
一、ISAM文件
二、VSAM文件
第五节
一、散列文件的定义
二、散列文件的特点
第六节
一、多重表文件
二、倒排文件
(三)教学方法与形式
课堂讲授、多媒体课件。
(四)教学时数
4学时。
三、考核方式
本课程的考核采用闭卷考试的方式,课程的总评成绩由平时成绩、实验成绩和期末考试成绩三部分组成,其中平时成绩占总评成绩的10%,实验成绩占总评成绩的30%,期末考试成绩占总评成绩的60%。
四、教材选用
1、殷人昆,陶永雷,谢若阳等:《数据结构(用面向对象方法与C++语言描述)》,清华大学出版社,2007.6年第二版。
2、严蔚敏,吴伟民:《数据结构(C语言版)》 及《数据结构题集(C语言版)》,清华大学出版社,2003年第一版。
多关键码文件 散列文件 ISAM文件和VSAM文件
索引文件