当前位置:文档之家› 《数据结构》课程教学设计

《数据结构》课程教学设计

《数据结构》课程教学设计
《数据结构》课程教学设计

《数据结构》课程教学设计

一、课程内容体系

1. 基本描述

课程中文名称:数据结构

课程英文译名:Data Structures

总学时:授课 40 学时+实验 20 学时

授课对象:计算机专业、自动化专业、信息专业、通讯专业、数学专业

课程要求:必修课

课程分类:专业(技术)基础

开课时间:第4学期

先修课:工科数学分析、高级语言程序设计或C++程序设计、集合与图论2. 教学定位

《数据结构》是计算机科学与技术各专业及其相关的一门专业基础课;是计算机科学与技术专业课程体系中的核心课程之一;是设计和实现编译程序、操作系统、数据库系统和其它系统软件、应用软件的重要基础。其后续课程有操作系统、编译原理、数据库系统概论、算法分析、图像处理等。在整个计算机知识体系中,数据结构具有不可替代的作用。瑞士著名的计算机科学家沃思教授曾提出:算法+数据结构=程序。算法:是对数据运算的描述;数据结构:是指数据的逻辑结构和存储结构。程序设计的实质是对实际问题选择一种好的数据结构,加之设计一个好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构。由此可见数据结构在解决计算机问题中的重要地位。

学习本课程旨在使学生较全面地掌握各种常用的数据结构,为学习后续软件课程提供必要的基础,掌握和不断提高运用数据结构解决实际问题的能力。通过本门课程的学习,使学生透彻地理解各种数据结构对象的特点,学会各种数据结构的组织方法和实现方法,并进一步培养良好的程序设计编程能力。同时,学习《数据结构》的过程也是复杂程序设计的训练过程,要求学生编

写的程序结构清楚、正确易读,符合软件过程的规范,从而培养学生的数据抽象能力。因此,要想有效地进行数据组织和程序开发,就必须掌握数据结构的知识。

课程的内容重点立足于基础知识和基础理论的掌握、应用能力的培养以及实践能力的提高。该课程通过一些最常用的数据结构的介绍,阐明了数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种典型应用说明它们在进行各种运算时的动态性质及实际的执行算法。具体来说,就是从数据结构的逻辑结构、存储结构和数据的操作三个方面使学生较好的掌握线性表、树、二叉树、图和文件等常用的数据结构的基本概念及构建方法。并掌握在各种常用数据结构上实现的查找和排序算法。同时对算法的时间和空间复杂性有一定的分析能力。在课程学习结束后要求学生针对简单的应用问题,能够选择合适的数据结构设计并编写出有效的算法程序。

本课程是实践性很强的一门课程,不但要求学生要深刻理会相应的基本理论、基本原理等知识,还要求学生亲自动手设计、上机实现各种算法,以达到使学生理论与实践相结合,综合应用各知识点的目的,巩固、加深所学的理论,并培养学生的科学研究能力和创新精神,并为后继课程的学习奠定坚实的基础。

3. 知识点与学时分配

第一章绪论(1学时)

数据结构的基本概念和术语;数据结构在软件系统中的作用;课程的研究和学习内容等;算法及其特征;算法性能度量指标;算法时间和空间复杂性及其分析方法。

第二章线性表(4学时)

线性表的逻辑结构、各种存储结构、基本操作(算法)的实现及性能分析、不同存储结构的比较、线性表的应用等。

第三章栈与队列(4学时)

栈和队列的逻辑结构定义及在两种存储结构上如何实现栈和队列的基本操作。栈和队列的本质区别,并且能在相应的应用问题中正确选用它们。栈和队列的应用。

第四章串(2学时)

串的逻辑结构、存储结构及其上的基本操作,由于C语言及其它高级语言均已具备了较强的串处理功能,故重点讲述在实际中广泛使用的串的模式匹配算法。

第五章多维数组和广义表(2学时)

多维数组的逻辑结构特征及其存储方式,特殊矩阵和稀疏短阵的压缩存储方法及广义表的概念和性质。

第六章树(8学时)

二叉树的定义、性质、存储结构、遍历、线索化;树的定义、存储结构、遍历;树和森林与二叉树的转换;树(森林)与二叉树的应用(哈夫曼树及其应用、集合表示与等价分类、表达式求值)

习题课(1学时)

线性结构和树的习题

第七章图及其相关算法(8学时)

无向和有向图的基本概念、两种常用的存储结构、两种遍历算法以及图的应用算法(最小生成树算法、求关节点和双连通分量算法、强连通性判定和求双连通分量的算法、拓扑分类算法、关键路径算法、最短路径算法等)。

第八章查找(4学时)

在线性表、树结构和散列表上进行查找的基本思想和方法、查找算法的实现以及各种查找方法的时间性能(平均查找长度)分析;基于关键字的查找与基于关键字散列地址的查找的本质区别。

第九章内部排序(4学时)

内部排序方法的基本思想、排序过程、算法实现、时间和空间性能的分析以及各种排序方法的比较和选择。

习题课(2学时)

总结与习题

二、教材选择

本课程选用严蔚敏、吴伟民编写的《数据结构》(清华出版社、C语言版)。

该教材是国内的经典教材,一方面反映领域基础性、普遍性的知识,保持内容体系的完整,另一方面又紧跟科技发展,内容丰富,体系结构严谨,概念清晰,易学易懂,符合学生的认识规律,与该教材配套的习题集和上级指导一起形成了完整的体系。该教材曾获“第二届普通高等学校优秀教材全国特等奖”和“1996年度国家科学技术进步奖三等奖”的基础上再版的,该教材目前的发行量已超过100万册。本教材具有以下特点:涵盖教学大纲内容,兼顾知识的广度和深度,适用面广;引入抽象数据类型的基本概念,有助于培养学生的数据抽象和算法设计能力;以C伪码语言描述存储结构和算法,有助于提高学生的程序设计能力;对算法进行详尽的定性或定量的时间分析,有助于奠定学生的算法分析基础;提供了全书120余个算法C语言源码、80余个算法执行过程的动态演示,有助于学生对数据结构和算法的分析和理解。

本课程的参考书选用郭福顺、廖明宏等编著的《数据结构与算法基础》、唐策善等编著的《数据结构—用C语言描述》,高等教育出版社出版和《数据结构》影印原版书籍。其中郭福顺、廖明宏等编著的《数据结构与算法基础》于2000年改造完成为21世纪高等教育规划教材《数据结构与算法基础》,由单纯的注重数据结构转变为数据结构与算法并重,保持了教材的先进性。本教材力求突出以下特点:简洁——避开了高深的理论,简明扼要地介绍学生最需要的基础知识和技术;通俗——通过通俗易懂的语言讲授计算机专业技术知识;先进——在内容上吸收新技术、新动向,保持一定的前沿性。实用——本套书能既适合于教,更适合于学,对高等学校计算机专业的教学具有较强的适用性。

三、课堂讲授

1、教学要求、重点、难点和教学内容

以线性表、树、二叉树、图等常用的数据结构的逻辑结构、存储结构和数据的操作以及各种常用数据结构上实现的查找和排序算法为主要内容,培养和训练对算法的复杂性的分析能力以及选择合适的数据结构对实际的应用问题进行有效算法的设计能力。

第一章绪论

教学要求:

本章目的是介绍线性表的逻辑结构和各种存储表示方法,以及定义在逻辑结构上的各种基本操作及其在存储结构上如何实现这些基本操作。要求在熟悉这些内容的基础上,能够针对具体应用问题的要求和性质,选择合适的存储结构设计出相应的有效算法,解决与线性表相关的实际问题。本章重点是:数据结构的逻辑结构、存储结构以及基本操作的概念及相互关系,抽象数据类型(ATD)的概念和实现方法,算法时间复杂性和空间复杂性分析。本章难点是: 抽象数据类型(ATD)的概念和实现方法,算法时间复杂性和空间复杂性分析。

教学内容:

1. 数据结构的基本概念和术语。

(1) 数据、数据元素、数据项、数据结构等基本概念。

(2) 数据结构的逻辑结构、存储结构及数据操作的含义及其相互关系。

(3) 数据结构的两大类逻辑结构和四种常用的存储表示方法。

2. 抽象数据类型。

(1) 抽象数据类型的表示。

(2) 抽象数据类型的实现。

3. 算法的描述和分析

(1) 算法、算法的时间复杂度和空间复杂度、最坏的和平均的时间复杂度等概念。

(2) 算法的时间复杂度不仅仅依赖于问题的规模,也取决于输入实例的初始状态。

(3) 算法描述和算法分析的方法,对于一般算法能分析其时间复杂度。

第二章线性表

教学要求:

本章目的是介绍线性表的逻辑结构和各种存储表示方法,以及定义在逻辑结构上的各种基本操作及其在存储结构上如何实现这些基本操作。要求在熟悉这些内容的基础上,能够针对具体应用问题的要求和性质,选择合适的存储结构设计出相应的有效算法,解决与线性表相关的实际问题。本章重点是:

线性表ADT顺序存储实现中的创建、查找、插入和删除等基本操作及相关算法;ADT链式存储实现中单链表的创建、查找、插入和删除等基本操作及相关算法;双向链表的插入和删除等基本操作及相关算法;循环链表的特点及创建、查找、插入和删除等基本操作及相关算法。本章难点是: 线性表ATD 的设计和实现,线性表ADT链式存储实现,包括双向链表、循环链表的基本操作和有关算法。

教学内容:

1. 线性表的逻辑结构

(1) 线性表的逻辑结构特征。

(2) 线性表上定义的基本操作,并能利用基本操作构造出较复杂的操作。

2. 线性表的顺序存储结构

(1) 顺序表的含义及特点,即顺序表如何反映线性表中元素之间的逻辑关系。

(2) 顺序表上的插入、删除操作及其平均时间性能分析。

(3) 利用顺序表设计算法解决简单的应用问题。

3. 线性表的链式存储结构

(1) 链表如何表示线性表中元素之间的逻辑关系。

(2) 链表中头指针和头结点的使用。

(3) 单链表、双链表、循环链表链接方式上的区别。

(4) 单链表上实现的建表、查找、插入和删除等基本算法,并分析其时间复杂度。

(5) 单循环链表以及单循环链表上的算法与单链表上相应算法的异同点。

(6) 双链表的定义及其相关的算法。

(7) 利用链表设计算法解决简单的应用问题。

4. 顺序表和链表的比较

(1) 顺序表和链表的主要优缺点。

(2) 针对线性表上所需要执行的主要操作,知道选择顺序表还是链表作为其存储结构才能取得较优的时空性能。

第三章栈和队列

教学要求:

本章目的是介绍栈和队列的逻辑结构定义及在两种存储结构上如何实现栈和队列的基本操作。要求在掌握栈和队列的特点的基础上,提高利用栈和队列解决实际问题的应用水平。本章重点是:栈、队列的定义、特点、性质和应用;ADT栈、ADT队列的设计和实现以及基本操作及相关算法。本章难点是:循环队列中对边界条件的处理;分析栈和队列在表达式求值、括号匹配、数制转换、迷宫求解中的应用实例,提高利用栈和队列解决实际问题的应用水平。

教学内容:

1. 栈的逻辑结构、存储结构及其相关算法

(1) 栈的逻辑结构特点,栈与线性表的异同。

(2) 顺序栈和链栈上实现的进栈、退栈等基本算法。

(3) 利用栈设计算法解决简单的应用问题。

2. 队列的逻辑结构、存储结构及其相关算法

(1) 队列的逻辑结构特点,队列与线性表的异同。

(2) 顺序队列(主要是循环队列)和链队列上实现的人队、出队等基本算法。

(3) 队列“假溢出”的概念及其判别条件。

(4) 循环队列空和满的判断方法。

(5) 利用队列设计算法解决简单的应用问题。

3. 栈和队列的应用

(1) 栈和队列的特点,什么样的情况下能够使用栈或队列。

第四章串

教学要求:

本章目的是介绍串的逻辑结构、存储结构及其中上的基本操作,本章重点是: ADT串的设计、实现方法和基本操作;串的朴素模式匹配算法,KMP算法。本章难点是: 串的模式匹配算法中的KMP算法。

教学内容:

1. 串及其操作

(1) 串的有关概念及基本操作。

(2) 串与线性表的关系。

2. 串的存储结构

(1) 串的两种存储表示。

(2) 串上实现的模式匹配算法及其时间性能分析。

(3) 使用C语言提供的串操作函数构造与串相关的算法解决简单的应用问题。

第五章多维数组和广义表

教学要求:

本章目的是介绍多维数组的逻辑结构特征及其存储方式,特殊矩阵和稀疏矩阵的压缩存储方法及广义表的概念和性质,本章重点是:数组的存储表示方法;数组在存储结构中的地址计算方法;特殊矩阵压缩存储时的下标变换公式;稀疏矩阵的两种压缩存储方法;三元组表示稀疏矩阵时进行矩阵运算采用的算法。广义表的定义和性质。本章难点是:稀疏矩阵的压缩存储表示和实现算法。

教学内容:

1. 多维数组

(1) 多维数组的逻辑结构特征。

(2) 多维数组的顺序存储结构及地址计算方式。

(3) 数组是一种随机存取结构的原因。

2. 短阵的压缩存储

(1) 特殊矩阵和稀疏矩阵的概念。

(2) 特殊矩阵和压缩存储时的下标变换方法。

(3) 稀疏矩阵的三元组表表示方法及有关算法。

3. 广义表的概念

(1) 广义表的有关概念及其与线性表的关系。

(2) 广义表的性质。

第六章树

教学要求:

本章目的是二叉树的定义、性质、存储结构、遍历、线索化,树的定义、存储结构、遍历、树和森林与二叉树的转换,哈夫曼树及其应用(优化判定过程和哈夫曼编码)等内容。本章重点是:二叉树的定义、结构特点和性质;ADT二叉树的设计和实现,二叉树存储结构的特点,三种遍历方式的递归和非递归算法。二叉树的线索化过程和算法;最优二叉树的特性及建立最优二叉树和哈夫曼编码的方法。本章难点是: 二叉树的线索化算法;设计解决与树或二叉树相关的应用问题的有效算法。

教学内容:

1. 树的概念

(1) 树的逻辑结构特征。

(2) 树的不同表示方法。

(3) 树的常用术语及含义。

2. 二叉树

(1) 二叉树的递归定义及树与二叉树的差别。

(2) 二叉树的性质,了解相应的证明方法。

(3) 二叉树的存储方法、特点及适用范围。

3. 二叉树的遍历

(1) 二叉树的三种遍历算法,理解其执行过程。

(2) 确定三种遍历所得到的相应的结点访问序列。

(3) 以遍历算法为基础,设计有关算法解决简单的应用问题。

4. 线索二叉树

(1) 二叉树线索化的目的及实质。

(2) 在中序线索树中查找给定结点的中序前趋和中序后继的方法。

(3) 查找给定结点的前序前趋和后序后继并非有效的原因。

5. 树和森林

(1) 树和森林与二叉树之间的转换方法。

(2) 树的各种存储结构及其特点。

(3) 树的遍历方法。

6. 哈夫曼树及其应用

(1) 最优二叉树和最优前缀码的概念及特点。

(2) 哈夫曼算法的思想。

(3) 根据给定的叶结点及其权值构造出相应的最优二叉树。

(4) 利用哈夫曼树优化判定过程。

(5) 根据最优二叉树构造对应的哈夫曼编码。

7. 表达式的树结构表示与求值

(1) 表达式的树结构表示与求值。

(2) 表达式的求值。

8. 集合的树结构表示

(1) 集合的树结构表示法。

(2) 集合的操作算法的实现即改进。

(3) 集合等价分类算法及其实现。

第七章图及其相关算法

教学要求:

本章目的是掌握图论的基本术语、图的表示方法和遍历算法、以及有关图论的算法。本章重点是:图的定义、术语和性质;ADT图的设计和实现;图的邻接矩阵、邻接表的存储结构及其构造方法;图的两种遍历方法:深度优先遍历和广度优先遍历;最小生成树的算法、拓扑排序的算法;理解关键路径的算法,构造最短路径的Dijkstra算法和Floyed算法。本章难点是:有向无环图的关键路径算法,求最短路径的Dijkstra算法和Floyed算法。

教学内容:

1. 图的概念

(1) 图的逻辑结构特征。

(2) 图的常用术语及含义。

2. 图的存储结构

(1) 邻接矩阵和邻接表这两种存储结构的特点及适用范围。

(2) 图的存储结构的建立。

(3) 根据应用问题的特点和要求选择合适的存储结构。

3. 图的遍历

(1) 连通图及非连通图的深度优先搜索和广度优先搜索两种遍历算法,其执行过程以及时间复杂性分析。

(2) 确定两种遍历所得到的顶点访问序列。

(3) 图的两种遍历与树的遍历之间的关系。

(4) 两种遍历所使用的辅助数据结构(栈或队列)在遍历过程中所起的作用。

(5) 利用图的两种遍历设计算法解决简单的应用问题。

4. 生成树和最小生成树

(1) 生成树和最小生成树的概念。

(2) 对遍历给定的图,画出深度优先和广度优先生成树或生成森林。

(3) Prim和Kruskal算法的基本思想、时间性能及这两种算法各自的特点。

(4) 要求对给定的连通图,根据Prim和Kruskal算法构造出最小生成树。

5. 无向图的双连通性

(1) 无向图的关节点和双连通图。

(2) 双连通图及其性质。

(3) 求关节点的算法。

(4) 求双连通分量的算法。

6. 有向图的强连通性

(1) 有向图的分支横边和归约图。

(2) 强连通分量算法的基本思想。

(3) 强连通分量算法。

7. 拓扑排序

(1) 拓扑排序的基本思想和步骤。

(2) 拓扑排序不成功的原因。

(3) 对给定的有向图,若拓扑序列存在,则要求写出一个或多个拓扑序列。

8. 关键路径

(1) AOE网的源点、汇点、关键路径和关键活动。

(2) 关键路径和关键活动分析。

(3) 利用先广拓扑分类求关键路径和关键活动的算法。

9. 最短路径

(1) 最短路径的含义。

(2) 求单源最短路径的Dijkstra算法的基本思想和时间性能。

(3) 对于给定的有向图,根据Dijkstra算法画出求单源最短路径的过程示意图。

(4) 求任意两点间最短路经的Floyd算法的基本思想和时间性能。

(5) 对于给定的有向图,根据Floyd算法画出求任意两点间最短路径的过程示意图。

第八章查找

教学要求:

本章目的是介绍线性表、树和散列表的查找方法、算法实现以及各种查找方法的时间性能(平均查找长度)分析。在熟悉这些内容的基础上,重点掌握:顺序表和有序表的查找方法;二叉排序树的构造方法和查找方法;哈希表的构造方法;各种查找算法的前提要求、优缺点和时间复杂性比较分析。本章难点是:二叉排序树结点的删除算法;二叉平衡树的构造方法。

教学内容:

1. 基本概念

(1) 查找在数据处理中的重要性。

(2) 查找算法效率的评判标准。

2. 线性表的查找

(1) 顺序查找、二分查找、分块查找的基本思想、算法实现和查找效率分

析。

(2) 顺序查找中哨兵的作用。

(3) 二分查找对存储结构及关键字的要求。

(4) 通过比较线性表上三种查找方法的优缺点,能根据实际问题的要求和特点,选择出合适的查找方法。

3. 树的查找

(1) 二叉排序树定义和特点以及用途。

(2) 二叉排序树的插人、删除、建树和查找算法及时间性能。

(3) 建立一棵二叉排序树的过程实质上是对输入实例的排序过程,输入实例对所建立的二叉排序树形态的影响。

4. 散列技术

(1) 散列表、散列函数、散列地址和装填因子等有关概念。

(2) 散列函数的选取原则及产生冲突的原因。

(3) 几种常用的散列函数构造方法。

(4) 两类解决冲突的方法及其优缺点。

(5) 产生“堆积”现象的原因。

(6) 采用线性探测法和拉链法解决冲突时,散列表的建表方法、查找过程以及算法实现和时间分析。

(7) 散列表和其它表的本质区别。

第九章排序

教学要求:

本章目的是介绍五类内部排序方法的基本思想、排序过程、算法实现、时间和空间性能的分析以及各种排序方法的比较和选择。要求在熟悉这些内容的基础上,重点掌握:顺序表和有序表的查找方法;二叉排序树的构造方法和查找方法;哈希表的构造方法;各种查找算法的前提要求、优缺点和时间复杂性比较分析。本章难点是:二叉排序树结点的删除算法;二叉平衡树的构造方法。

教学内容:

1. 内部排序及其基本概念

(1) 排序在数据处理中的重要性。

(2) 排序方法的“稳定”性含义。

(3) 排序方法的分类及算法好坏的评判标准。

2. 插人排序

(1) 直接插入排序的基本思想和算法实现,以及在最好、最坏和平均情况下的时间性能分析。

(2) 直接插入排序中哨兵的作用。

(3) 针对给定的输入实例,要能写出直接插入排序的排序过程。

3. 交换排序

(1) 冒泡排序的基本思想。

(2) 快速排序的基本思想和算法实现,以及在最坏和平均情况下的、时间性能分析,了解算法的稳定性。

(3) 基准元素(划分元)对划分是否平衡的影响。

(4) 针对给定的输入实例,能写出快速排序的排序过程。

4. 选择排序

(1) 堆、小根堆、大根堆等有关概念和定义。

(2) 堆性质及堆与完全二叉树的关系。

(3) 直接选择排序和堆排序的基本思想和算法实现,以及时间性能分析

(4) 针对给定的输入实例,写出堆排序的排序过程。

5. 归并排序

(1) 归并排序的基本思想和算法实现,以及时间性能分析。

(2) 针对给定的输入实例,能写出归并排序的排序过程。

6. 基数排序

(1) 基数排序的基本思想和算法实现,以及时间性能分析。

(2) 针对给定的输入实例,能写出基数排序的排序过程。

(3) 基数排序与其它几类排序的区别。

7. 各种排序方法的比较和选择

(1) 通过对被排序的记录数目、记录信息量的大小、关键字的结构及初始状态、稳定性要求、辅助空间的大小、各种时间性能等方面的比较掌握各种排序的优缺点。

(2) 根据实际问题的特点和要求选择合适的排序方法。

四、作业安排

1、指导思想

作业和思考题是督促和检查学生掌握课堂知识和方法(包括思维方法)的有效手段。教师要布置适量典型的作业和思考题,给学生一个机会去独立综合应用课堂知识和方法亲自去想求解问题的方法,去亲身体验和验证课堂所

学的知识和方法。教师要在恰当的时候选择问题,讲典型的思路和方法。

2、作业安排

虽然《数据结构》课程以基本理论和基本训练为主,但是作为综合运用《数据结构》理论和方法的小型课程设计、大作业、以及创新研究是很有必要的。其目的是进一步开发同学独立分析、独立思考、独立完成和解决工程实践中的数据结构和算法的问题,综合运用所学的理论知识,做到融会贯通,加深同学对数据结构基本理论的认识和理解。

●合理布置课程设计与大作业提高动手能力,加强理论联系实际的能力。

这些小型课程设计或大作业,如:小型图书馆系统的设计和实现、简单数据库系统、小型城市最短交通路线、B+树设计和实现、基于平衡二叉排序树的动态表的构建、模式匹配和快速文本搜索等。允许同学结合现实问题自选题目,在教师指导下进行。同学们普遍反映收获很大,一开始根本不知道《数据结构》能解决什么问题,怎样做是好的,怎样做是不好的。通过实践,加深了对数据结构基本理论的认识和理解,强化了分析问题和解决问题的能力。对于将理论和实际如何结合,如何将现有的所学的知识运用、推广和提高是大有帮助的。

●鼓励学生融入创新性研究,进一步提高分析问题、解决问题的能力。

鼓励学生主动研究工程实践中提出的《数据结构》问题,鼓励学生参加PRP(Participation in Research Program)自选课题研究。如:有的学生的PRP 项目为城市的红绿灯设置系统,交通的最佳路线的设计等,这些课题中都含有相当多的数据结构基础理论问题。通过这些问题的解决,极大地锻炼了同学解决实际问题的能力。另外,积极鼓励同学参加如:国际ACM国际程序设计大赛之类的国内外相关的比赛,这对于培养学生的创新意识、拓宽学生的思路是大有好处的。

五、实验

1、目的和要求

通过课程实验加深对课程内容的理解,增加感性认识,掌握利用计算机解决问题的基本方法、步骤和技术,提高问题分析、软件设计、程序编写、程序调试的能力和利用所学知识解决实际问题的能力。要求所编的程序能正确运行,并提交课程实验报告。在实验报告中应该体现从问题入手,对问题进行分析、对软件的设计、程序编码和调试、软件的测试等环节。

2、实验报告的格式

每次实验结束后,均应上交实验报告。实验报告应包括如下内容:

(1) 需求分析

陈述程序设计的任务,强调程序要做什么,明确规定:输入的形式和输入值的范围;输出的形式;程序所能达到的功能;测试数据:包括正确的输入输出结果和错误的输入及其输出结果。

(2) 概要设计

说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。

(3) 详细设计

提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。

(4) 调试分析

调试过程中所遇到的问题及解决方法;算法的时空分析;对设计和编码的讨论和分析。

(5) 用户使用说明

说明如何使用你的程序,详细列出每一步操作步骤。

(6) 测试结果

列出对于给定的输入所产生的输出结果。若可能,测试随输入规模的增长所用算法的实际运行时间的变化。

(7) 经验和体会

(8) 附源程序清单和运行结果。

源程序要加注释。如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含有其它测试数据和运行输出(有时需要多组数据)。

六、考试与成绩记载

1、成绩评定

数据结构是一门理论与实践结合非常紧密的学科,针对这一特点,同时兼顾学生平时的表现,我们采取以下考核办法。

数据结构总成绩=平时成绩+实验成绩+期末闭卷考试成绩。

(1) 平时成绩

平时成绩占总成绩的10%,采用百分制共10分,评分标准采用以下方式:每缺勤一次扣3分,满三次扣10分,满四次取消考试资格。

(2) 实验成绩

实验成绩占总成绩的20%,采用百分制共20分,评分标准采用以下方式:在数据结构实验教学中共有6次实验,内容涵盖线性表、栈和队列、树、图、查找和排序,相应安排6个实验题目,根据学生撰写的实验报告和程序代码实现情况,对每个学生完成的每个题目评出百分制成绩,然后求出6次的平均成绩,再乘以20%即为实验成绩。

(3) 期末闭卷考试

期末闭卷考试成绩占总成绩70%

期末闭卷考试考核学生对这本课的综合理解情况,采用选择、填空、综合等多种考核方式,内容涵盖算法时间复杂性、空间复杂性分析、线性表、栈和队列、串、数组和广义表、树、图、查找和排序等内容,以树和图为重点,采用百分制,试卷成绩乘以70%即为期末闭卷考试成绩。

另外,对参加第二课堂学习的学生可以考虑适当加分,以便鼓励学生将学习的知识运用到实际中。

2、考题设计

重点考察学生对数据结构与算法的基本知识、基本方法、基本技术的掌握和综合应用。考试题大体分为三种类型

(1) 基本知识和方法题

重点考察学生对各种基本数据结构的理解。包括逻辑结构及其特点和性质;同一逻辑结构的不同存储结构及其特点、同一逻辑结构的不同存储结构

之间的比较;数据结构上各种操作(算法)在不同存储结构下的实现、操作算法的性能分析方法等。

这个类型的考题基本形式可以是:填空题、选择题、判断题等。

(2) 简单应用题

重点考察学生运用数据结构和算法的基本知识、基本方法、基本技术和技巧的应用能力,包括对经典数据结构和算法的理解和综合应用能力。

(3) 算法设计题

重点考察学生综合应用数据结构的知识进行算法设计的能。包括对问题进行分析,抽取问题的逻辑结构,找出解决问题的算法,设计相应的存储结构,并在此基础上实现解决问题的算法。

七、教学手段

由于数据结构内容较多,在传统教学方式和有限学时限制下很难将所有内容都介绍给学生或者不能够更详细地介绍。这样就影响了学生上课时接收的信息量或信息质量。为此,在教学手段上以多媒体技术和网络技术为依托,采用现代教学方法和实现手段,制作高质量的多媒体课件、算法动态演示系统和教学网站。这种手段交互性强,表现形式丰富,突出教学内容的重点,对难理解的算法采用图形设计和动态演示的方式形象地表示出来,会使抽象的知识具体化,有利于学生对抽象问题的理解。课件中不仅要包含主要的教学内容,还应提供一些特殊例题的算法演示,用以扩大学生的编程思维能力,形象的图形界面为学生搭起通向掌握抽象思维方法的桥梁。同时,在多媒体教学的基础上,开通网上教学。将教学内容进行重新组织,放到网上实现网上教学。同时可以增加网上答疑、网上作业、网上实验等功能。

总之利用多媒体与网络教学可以使学生在有限时间内接收更多的信息,并使传统教学中不容易讲解的内容(实际应用)变得容易讲解且更形象更容易接受。

八、教学方法

1.教学策略

教学是学生为主体,教师为主导的过程。学生在课堂上接受知识只是一味被动的话,教学效果甚微。因此,在教学过程中,自然地调动学生参与的积极性,开阔学生的思维,使得学生在课堂上真正地成为“主体”是合理安排教学策略的出发点,数据结构主要采用以下教学策略:

●采用课题式教学策略。

在讲授了相应数据的逻辑结构、物理结构和基本算法描述之后,提出相应的实际问题,将数据结构的教学内容由抽象描述落实到具体应用上来。例如:用循环单链表解决约瑟夫问题;用栈解决迷宫间题;用哈夫曼树求解哈夫曼编码;用图模拟城市或全国交通网咨询;用查找知识完成电话号码的查询程序等。这种教学方法能使抽象的知识具体化,使学生对数据的组织规范化和程序设计规范化,同时还能增强学生解决实际问题的能力。采用这种教学方法时应注意,选择的课题应该由易到难,具有一定的梯度,才能有效激发学生的学习积极性和主动性。

●组织学生进行讨论。

在用计算机解决实际问题时,同一问题可以采用不同的数据组织形式和不同的算法描述,哪种组织形式和算法描述更优化,需要从数据结构的多个角度进行分析。通过讨论,可以得到这一答案,同时能将学生的被动学习转化为主动学习,会收到良好的效果。讨论的形式可以在教室、机房或通过BBS 等方式进行。

●推广“启发式”教学,实现教与学的互动,激发学生的创造性。

通过设计高质量的、创新的启发式教学内容的设计,诱导学生深入理解数据结构和算法,理解算法改进的过程,启发学生在了解原算法的不足之处后,设计改进算法,实现从旧算法到相关的新算法的跳跃。在启发教学的基础上配有习题库、试题库、实训题库,并提供答案。学生可在网上下载,或在线测试,有利于学生的自主学习。

●开辟第二课堂教学,加强理论与实践的联系。

在开始上课时,向学生公布几个专题,让学生自由选择参加其中一个或多个专题。每个专题作为一个课外小组,选出组长与委员,由老师指导完成相

关专题,对完成较好的同学可以考虑在成绩考核时适当加分。通过这种形式,使学生将课堂学习的基本知识与实践有机结合,以便加深对课程内容的理解与掌握,达到提高授课质量的目的。同时,可以充分调动学生的学习兴趣,并可以解决课堂教学受课时限制的矛盾。

2、本课程的讲授课程原则

该课程的特点是既需要良好的思维能力,又要求有较强的实践能力。既要注意培养和训练学生的软件开发的基本技术和方法,同时更不能忽视软件开发过程的系统思想和观点。因此讲授课程应努力坚持和贯彻以下几个原则:

(1) 贯彻以系统的观点考虑软件开发,在整个课程执行过程中,培养学生并使学生能够自觉地按照计算机求解问题的一般过程来思考问题和软件开发工作。计算机解决实际问题的一般过程是“三个世界之间的映射”。

(2) 由现实世界到概念世界的映射是一个逻辑思维过程,就是从实际问题出发通过抽象得到对实际问题的正确认识,形成实际问题的概念模型。其目标是用抽象数据型来表示客观问题,因此抽象数据型是研究数据结构的有用工具,每个基本数据结构都可以视为抽象数据型。它们是:线性表、栈、队列、串、数组、广义表、树、二叉树、有向图、无向图、查找表、分类表和文件等。这样就可以从抽象数据型的角度来认识不同数据结构的逻辑结构之间的彼此差异。

(3) 由概念世界到机器世界的映射过程实际上是把组成客观世界的各种概念模型即抽象数据型中的数学模型(数据的逻辑结构)表示为计算机中的数据的存储结构,把抽象数据型中的基本操作实现(表示)为过程或函数,并用这些存储结构和基本操作实现(表示)为对客观问题求解的算法的过程。同一逻辑结构可以用不同的存储结构,不同的存储结构对同一问题求解的效率可能是不同的。因此,在授课过程中,一定要不断地比较同一逻辑结构在时间和空间两方面的性能差异。从而使学生能够有意识地在解决实际问题时选择不同的存储结构。

(4) 在算法设计方面,包含着许多算法设计技术和策略。要在授课过程中有意识地总结不同的算法设计策略的一般过程和基本步骤。要从其基本思想

《数据结构》教学设计方案

《数据结构》教学设计方案 1 课程的一般信息 1.1 教学对象 计算机科学与技术专业2012级本科学生 1.2 课程名称 《数据结构》 1.3 课程教材及分析 1.3.1 中文教材及分析 数据结构(C语言版),严蔚敏,北京:清华大学出版社(国家精品课程配套教材),2011.11。 该教材为国内关于数据结构最知名的教材之一,受到国内计算机教育界广泛的认可。 1.3.2 教材选取的背景 选取本教材的原因主要是受到本人对于该课程的教学改革驱动,在该课程教学中强调实践性,注重理论联系实际。 1.4 课程类型 专业必修课(开设时间为计算机科学学院各专业本科生二年级第一学期) 1.5 教师的基本信息 肖冰,1981年生,博士,讲师,计算机科学学院。主要研究方向为模式识别、机器学习、智能信息处理等。博士毕业后从事一线教学和科研工作,主讲了《计算机基础》、《ACCESS 数据库应用技术》,《数据结构》、《数据库原理与设计》及相关课程设计等课程。在Pattern Recognition(SCI二区)、Neurocomputing(SCI三区)、Signal Processing(SCI三区)、电子学报(中、英文版)等国际、国内权威期刊和会议上发表论文15篇,其中SCI检索6篇,EI检索9篇,在重要期刊上发表教学论文一篇。主持国家博士后科学基金、陕西省博士后科学基金、陕西师范大学中央高校基本科研业务费、西安电子科技大学优秀博士学位论文资助基金、陕西师范大学青年基金各一项,以第三完成人参与国家自然科学基金、博士点基金等多项科研项目。授权专利三项,获得陕西省科学技术奖一等奖(第三完成人)一项,陕西省自然科学优秀学术论文二等奖(第一完成人)一项。 2 该单元的教学目标 2.1 单元内容概要 第9章查找 第3节哈希表

数据结构课程设计

1.一元稀疏多项式计算器 [问题描述] 设计一个一元稀疏多项式简单计算器。 [基本要求] 输入并建立多项式; 输出多项式,输出形式为整数序列:n, c1, e1, c2, e2,……, cn, en ,其中n是多项式的项数,ci, ei分别是第i项的系数和指数,序列按指数降序排序; 多项式a和b相加,建立多项式a+b; 多项式a和b相减,建立多项式a-b; [测试数据] (2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9-x+12x-3) (1+x+x2+x3+x4+x5)+(-x3-x4)=(x5+x2+x+1) (x+x3)+(-x-x3)=0 (x+x2+x3)+0=(x3+x2+x) [实现提示] 用带头结点的单链表存储多项式,多项式的项数存放在头结点中。 2.背包问题的求解 [问题描述] 假设有一个能装入总体积为T的背包和n件体积分别为w1, w2, …,wn的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+…+wn=T,要求找出所有满足上述条件的解。例如:当T=10,各件物品的体积为{1,8,4,3,5,2}时,可找到下列4组解:(1,4,3,2)、(1,4,5)、(8,2)、(3,5,2) [实现提示] 可利用回溯法的设计思想来解决背包问题。首先,将物品排成一列,然后顺序选取物品转入背包,假设已选取了前i件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品“太大”不能装入,则弃之而继续选取下一件,直至背包装满为止。但如果在剩余的物品中找不到合适的物品以填满背包,则说明“刚刚”装入背包的那件物品“不合适”,应将它取出“弃之一边”,继续再从“它之后”的物品中选取,如此重复,直至求得满足条件的解,或者无解。 由于回溯求解的规则是“后进先出”因此自然要用到栈。 3.完全二叉树判断 用一个二叉链表存储的二叉树,判断其是否是完全二叉树。 4.最小生成树求解(1人) 任意创建一个图,利用克鲁斯卡尔算法,求出该图的最小生成树。 5.最小生成树求解(1人) 任意创建一个图,利用普里姆算法,求出该图的最小生成树。 6.树状显示二叉树 编写函数displaytree(二叉树的根指针,数据值宽度,屏幕的宽度)输出树的直观示意图。输出的二叉树是垂直打印的,同层的节点在同一行上。 [问题描述] 假设数据宽度datawidth=2,而屏幕宽度screenwidth为64=26,假设节点的输出位置用 (层号,须打印的空格数)来界定。 第0层:根在(0,32)处输出;

《数据结构》教学纲要(doc 9页)

《数据结构》教学纲要(doc 9页)

《数据结构》教学大纲 2001年9月 一、开课系(部):经济信息管理系 二、教学对象:信息管理与信息系统专业本科 三、教学目的: 数据结构是高等教育计算机信息管理专业中的一门专业基础课,在计算机软件的各个领域中均会使用到数据结构的有关知识。本课程的目的和任务是使学生较全面地掌握各种常用的数据结构,为学习后续软件课程提供必要的基础,提高运用数据结构解决实际问题的能力。 四、教学要求: 1. 从数据结构的逻辑结构、存储结构和数据的运算三个方面去掌握线性表、栈、队列、串、数组、广义表、树、图和文件等常用的数据结构。 2. 掌握在各种常用的数据结构上实现的排序和查找运算。 3. 对算法的时间和空间复杂性有一定的分析能力。 4. 针对简单的应用问题.应能选择合适的数据结构及设计有效的算法解决之。 五、教学课时: 教学内容课内学时 第1章绪论 2 第2章线性表 4 第3章栈和队列 6 第4章串 4 笫5章数组和广义表 4 第6章树和二叉树 6 第7、8章略 第9章查找 4 第10章内部排序 4 课程总复习 2 六、考核形式: 期末考试与平时讨论相结合(80%和20%)。 期末试卷结构: 单项选择填空简答应用算法设计 20 15分20分15分30分

态。 3.3 算法描述和算法分析的方法,对于一般算法能分析出时间复杂度。 第2章线性表 (一)课程内容 2.1 线性表的逻辑结构 2.2 线性表的顺序存储结构 2.3 线性表的链式存储结构 2.4 顺序表和链表的比较 (二)学习目的与要求 本章目的是介绍线性表的逻辑结构和各种存储表示方法,以及定义在逻辑结构上的各种基本运算及其在存储结构上如何实现这些基本运算。要求在熟悉这些内容的基础上,能够针对具体应用问题的要求和性质,选择合适的存储结构设计出相应的有效算法,解决与线性表相关的实际问题。本章重点是熟练掌握顺序表和单链表上实现的各种基本算法及相关的时间性能分析,难点是能够使用本章所学到的基本知识设计有效算法解决与线性表相关的应用问题。 (三)考核知识点与考核要求 1. 线性表的逻辑结构,要求达到“识记”层次。 1.1 线性表的逻辑结构特征。 1.2 线性表上定义的基本运算,并能利用基本运算构造出较复杂的运算。 2. 线性表的顺序存储结构.要求达到“综合应用”层次。 2.1 顺序表的含义及特点,即顺序表如何反映线性表中元素之间的逻辑关系。 2.2 顺序表上的插入、删除操作及其平均时间性能分析。 2.3 利用顺序表设计算法解决筒单的应用问题。 3. 线性表的链式存储结构,要求达到“综合应用”层次。 3.1 链表如何表示线性表中元素之间的逻辑关系。 3.2 链表中头指针和头结点的使用。 3.3 单链表、双链表、循环链表链接方式上的区别。 3.4 单链表上实现的建表、查找、插入和删除等基本算法,并分析其时间复杂度。 3.5 循环链表上尾指针取代头指针的作用,以及单循环链表上的算法与单链表上相应算法的异同点。 3.6 双链表的定义及其相关的算法。 3.7 利用链表设计算法解决简单的应用问题。 4.顺序表和链表的比较.要求达到“领会”层次。

数据结构课程设计报告

山东建筑大学 课程设计成果报告 题目: 1.数组实现两个矩阵的相乘运算 2.成绩分析问题 课程:数据结构A课程设计 院(部):管理工程学院 专业:信息管理与信息系统 班级:信管*** 学生姓名:*** 学号:******** 指导教师:******* 完成日期:2016年12月29日

目录 目录 (2) 一、课程设计概述 (3) 二、课程设计题目一 (3) 用数组实现两个矩阵的相乘运算 (3) 2.1[问题描述] (3) 2.2[要求及提示]: (3) 2.3[详细设计] (4) 2.4[调试分析] (5) 2.5[运行结果及分析] (5) 三、课程设计题目二 (6) 成绩分析问题 (6) 3.1[问题描述] (6) 3.2[概要设计] (6) 3.3[存储结构] (7) 3.4[流程图] (7) 3.5[详细设计] (8) 3.6[调试分析] (8) 3.7[运行结果及分析] (22) 四、参考文献: (25)

一、课程设计概述 本次数据结构课程设计共完成两个题:用数组实现两个矩阵相乘运算、成绩分析问题。使用语言:C 编译环境:vc6.0 二、课程设计题目一 用数组实现两个矩阵的相乘运算 2.1[问题描述] #include “stdio.h” int r[6][6]; void mult(int a[6][6] , int b[6][6]){ } main(){ int i,j; int num1[6][6],num2[6][6]; printf(“请输入第一个矩阵的值:”,); for(i=1;i<=6;i++) for(j=1;j<=6;j++) scanf(“%d”,&num1[i][j]); printf(“请输入第二个矩阵的值:”,); for(i=1;i<=6;i++) for(j=1;j<=6;j++) scanf(“%d”,&num2[i][j]); mult(num1,num2); printf(“\n两个矩阵相乘后的结果为:”); for(i=1;i<=6;i++) {for(j=1;j<=6;j++) printf(“%4d”,r[i][j]); printf(“\n”); } } 2.2[要求及提示]: 1、要求完善函数mult( ),

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

数据结构课程设计报告模板

校园导游系统设计 一、设计要求 1.问题描述 设计一个校园导游程序,为来访的客人提供信息查询服务。 2.需求分析 (1)设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图(无向网),以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。 (2)存放景点代号、名称、简介等信息供用户查询。 (3)为来访客人提供图中任意景点相关信息的查询。 (4)为来访客人提供图中任意景点之间的问路查询。 (5)可以为校园平面图增加或删除景点或边,修改边上的权值等。 二、概要设计 为了实现以上功能,可以从3个方面着手设计。 1.主界面设计 为了实现校园导游系统各功能的管理,首先设计一个含有多个菜单项的主控菜单子程序以链接系统的各项子功能,方便用户使用本系统。本系统主控菜单运行界面如图7-10所示。 2.存储结构设计 本系统采用图结构类型(mgraph)存储抽象校园图的信息。其中:各景点间的邻接关系用图的邻接矩阵类型(adjmatrix)存储;景点(顶点)信息用结构数组(vexs)存储,其中每个数组元素是一个结构变量,包含景点编号、景点名称及景点介绍三个分量;图的顶点个数及边的个数由分量vexnum、arcnum表示,它们是整型数据。 此外,本系统还设置了三个全局变量:visited[ ] 数组用于存储顶点是否被访问标志;d[ ]数组用于存放边上的权值或存储查找路径顶点的编号;campus是一个图结构的全局变量。 3.系统功能设计 本系统除了要完成图的初始化功能外还设置了8个子功能菜单。图的初始化由函数initgraph( )实现。依据读入的图的顶点个数和边的个数,分别初始化图结构中图的顶点向量数组和图的邻接矩阵。8个子功能的设计描述如下。 (1)学校景点介绍 学校景点介绍由函数browsecompus( )实现。当用户选择该功能,系统即能输出学校全部景点的信息:包括景点编号、景点名称及景点简介。 (2)查看浏览路线 查看浏览路线由函数shortestpath_dij( )实现。该功能采用迪杰斯特拉(Dijkstra)算法实现。当用户选择该功能,系统能根据用户输入的起始景点编号,求出从该景点到其它景点的最短路径线路及距离。 (3)查看两景点间最短路径

数据结构专升本模拟题及参考答案讲课教案

作业题(一) 一、单项选择题 1. 从逻辑上可以把数据结构分为()两大类。 A.动态结构、静态结构 B.顺序结构、链式结构 C.线性结构、非线性结构 D.初等结构、构造型结构 2. 链表不具有的特点是() A.插入、删除不需要移动元素 B.可随机访问任一元素 C.不必事先估计存储空间 D.所需空间与线性长度成正比 3.下面程序段的时间复杂度的量级为()。 For(i=1;i<=n;i++) For(j=1;j<=I;j++) For(k=1;k<=j;k++) X=x+1; A.O(1) B.O(n) C.O(n2) D.O(n3) 4.在一个带头结点的双向循环链表中,若要在p所指向的结点之前插入一个新结点,则需要相继修改()个指针域的值。 A.2 B.3 C.4 D.6 5、一个顺序存储线性表的第一个元素的存储地址是90,每个元素的长度是2,则第6个元素的存储地址是()。 A.98 B.100 C.102 D.106 6、判定一个栈s(最多元素为m0)为空的条件是()。 A.s-〉top! =0 B.s-〉top= =0 C.s-〉top! =m0 D.s-〉top= =m0 7、循环队列用数组A[m](下标从0到m-1)存放其元素值,已知其头尾指针分别是front和rear,则当前队列中的元素个数是()。 A.(rear-front+m)%m B.rear-front+1 C.rear-front-1 D. rear-front 8、设有两个串S1与S2,求串S2在S1中首次出现位置的运算称作()。 A.连接 B.求子串 C.模式匹配 D.判子串 9、设串S1='ABCDEFG',S2='PQRST',函数con(x,y)返回x和y串的连接串,subs(s,i,j)返回串S的的从序号i的字符开始的j个字符组成的子串,len(s)返回串S的长度,则con(subs(S1,2,len(S2)),subs(S1,len(S2),2))的结果是()。

数据结构课程设计报告范例

Guangxi University of Science and Technology 课程设计报告 课程名称:算法与编程综合实习 课题名称: 姓名: 学号: 院系:计算机学院 专业班级:通信121 指导教师: 完成日期:2012年12月15日

目录 第1部分课程设计报告 (3) 第1章课程设计目的 (3) 第2章课程设计内容和要求 (4) 2.1 问题描述 (4) 2.2 设计要求 (4) 第3章课程设计总体方案及分析 (4) 3.1 问题分析 (4) 3.2 概要设计 (7) 3.3 详细设计 (7) 3.4 调试分析 (10) 3.5 测试结果 (10) 3.6 参考文献 (12) 第2部分课程设计总结 (13) 附录(源代码) (14)

第1部分课程设计报告 第1章课程设计目的 仅仅认识到队列是一种特殊的线性表是远远不够的,本次实习的目的在于使学生深入了解队列的特征,以便在实际问题背景下灵活运用它,同时还将巩固这种数据结构的构造方………………………………………………………………………………………………………………………………………………………………………………………..(省略)

第2章课程设计内容和要求 2.1问题描述: 迷宫问题是取自心理学的一个古典实验。在该实验中,把一只老鼠从一个无顶大盒子的门放入,在盒子中设置了许多墙,对行进方向形成了多处阻挡。盒子仅有一个出口,在出口处放置一块奶酪,吸引老鼠在迷宫中寻找道路以到达出口。对同一只老鼠重复进行上述实验,一直到老鼠从入口走到出口,而不走错一步。老鼠经过多次试验最终学会走通迷宫的路线。设计一个计算机程序对任意设定的矩形迷宫如下图A所示,求出一条从入口到出口的通路,或得出没有通路的结论。 图A 2.2设计要求: 要求设计程序输出如下: (1) 建立一个大小为m×n的任意迷宫(迷宫数据可由用户输入或由程序自动生成),并在屏 幕上显示出来; (2)找出一条通路的二元组(i,j)数据序列,(i,j)表示通路上某一点的坐标。 (3)用一种标志(如数字8)在迷宫中标出该条通路; (4)在屏幕上输出迷宫和通路; (5)上述功能可用菜单选择。

(完整版)数据结构详细教案——图

数据结构教案第七章图

第7章图 【学习目标】 1.领会图的类型定义。 2.熟悉图的各种存储结构及其构造算法,了解各种存储结构的特点及其选用原则。 3.熟练掌握图的两种遍历算法。 4.理解各种图的应用问题的算法。 【重点和难点】 图的应用极为广泛,而且图的各种应用问题的算法都比较经典,因此本章重点在于理解各种图的算法及其应用场合。 【知识点】 图的类型定义、图的存储表示、图的深度优先搜索遍历和图的广度优先搜索遍历、无向网的最小生成树、最短路径、拓扑排序、关键路径 【学习指南】 离散数学中的图论是专门研究图性质的一个数学分支,但图论注重研究图的纯数学性质,而数据结构中对图的讨论则侧重于在计算机中如何表示图以及如何实现图的操作和应用等。图是较线性表和树更为复杂的数据结构,因此和线性表、树不同,虽然在遍历图的同时可以对顶点或弧进行各种操作,但更多图的应用问题如求最小生成树和最短路径等在图论的研究中都早已有了特定算法,在本章中主要是介绍它们在计算机中的具体实现。这些算法乍一看都比较难,应多对照具体图例的存储结构进行学习。而图遍历的两种搜索路径和树遍历的两种搜索路径极为相似,应将两者的算法对照学习以便提高学习的效益。 【课前思考】 1. 你有没有发现现在的十字路口的交通灯已从过去的一对改为三对,即每个方向的直行、左拐和右拐能否通行都有相应的交通灯指明。你能否对某个丁字路口的6条通路画出和第一章绪论中介绍的"五叉路口交通管理示意图"相类似的图? 2. 如果每次让三条路同时通行,那么从图看出哪些路可以同时通行? 同时可通行的路为:(AB,BC,CA),(AB,BC,BA),(AB,AC,CA),(CB,CA,BC)

数据结构课程设计报告

《数据结构课程设计》报告 题目:课程设计题目2教学计划编制 班级:700 学号:09070026 姓名:尹煜 完成日期:2011年11月7日

一.需求分析 本课设的任务是根据课程之间的先后的顺序,利用拓扑排序算法,设计出教学计划,在七个学期中合理安排所需修的所有课程。 (一)输入形式:文件 文件中存储课程信息,包括课程名称、课程属性、课程学分以及课程之间先修关系。 格式:第一行给出课程数量。大于等于0的整形,无上限。 之后每行按如下格式“高等数学公共基础必修6.0”将每门课程的具体信息存入文件。 课程基本信息存储完毕后,接着给出各门课程之间的关系,把每门课程看成顶点,则关系即为边。 先给出边的数量。大于等于0的整形。 默认课程编号从0开始依次增加。之后每行按如下格式“1 3”存储。此例即为编号为1的课程与编号为3的课程之间有一条边,而1为3的前驱,即修完1课程才能修3课程。 例: (二)输出形式:1.以图形方式显示有向无环图

2.以文本文件形式存储课程安排 (三)课设的功能 1.根据文本文件中存储的课程信息(课程名称、课程属性、课程学分、课程之间关系) 以图形方式输出课程的有向无环图。 拓展:其显示的有向无环图可进行拖拽、拉伸、修改课程名称等操作。 2.对课程进行拓扑排序。 3.根据拓扑排序结果以及课程的学分安排七个学期的课程。 4.安排好的教学计划可以按图形方式显示也可存储在文本文件里供用户查看。 5.点击信息菜单项可显示本人的学好及姓名“09070026 尹煜” (四)测试数据(见六测设结果)

二.概要设计 数据类型的定义: 1.Class Graph即图类采用邻接矩阵的存储结构。类中定义两个二维数组int[][] matrix 和Object[][] adjMat。第一个用来标记两个顶点之间是否有边,为画图服务。第二个 是为了实现核心算法拓扑排序。 2.ArrayList list用来存储课程信息。DrawInfo类是一个辅助画图的类,其中 包括成员变量num、name、shuxing、xuefen分别代表课程的编号、名称、属性、 学分。ArrayList是一个DrawInfo类型的数组,主要用来在ReadFile、DrawG、DrawC、SaveFile、Window这些类之间辅助参数传递,传递课程信息。 3.Class DrawInfo, 包括int num;String name;String shuxing;float xuefen;四个成员变量。 4.Class Edge包括int from;int to;double weight;三个成员变量。 5.Class Vertex包括int value一个成员变量。 主要程序的流程图: //ReadFile.java

《数据结构》课程教学设计

《数据结构》课程教学设计 一、课程内容体系 1. 基本描述 课程中文名称:数据结构 课程英文译名:Data Structures 总学时:授课 40 学时+实验 20 学时 授课对象:计算机专业、自动化专业、信息专业、通讯专业、数学专业 课程要求:必修课 课程分类:专业(技术)基础 开课时间:第4学期 先修课:工科数学分析、高级语言程序设计或C++程序设计、集合与图论2. 教学定位 《数据结构》是计算机科学与技术各专业及其相关的一门专业基础课;是计算机科学与技术专业课程体系中的核心课程之一;是设计和实现编译程序、操作系统、数据库系统和其它系统软件、应用软件的重要基础。其后续课程有操作系统、编译原理、数据库系统概论、算法分析、图像处理等。在整个计算机知识体系中,数据结构具有不可替代的作用。瑞士著名的计算机科学家沃思教授曾提出:算法+数据结构=程序。算法:是对数据运算的描述;数据结构:是指数据的逻辑结构和存储结构。程序设计的实质是对实际问题选择一种好的数据结构,加之设计一个好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构。由此可见数据结构在解决计算机问题中的重要地位。 学习本课程旨在使学生较全面地掌握各种常用的数据结构,为学习后续软件课程提供必要的基础,掌握和不断提高运用数据结构解决实际问题的能力。通过本门课程的学习,使学生透彻地理解各种数据结构对象的特点,学会各种数据结构的组织方法和实现方法,并进一步培养良好的程序设计编程能力。同时,学习《数据结构》的过程也是复杂程序设计的训练过程,要求学生编

写的程序结构清楚、正确易读,符合软件过程的规范,从而培养学生的数据抽象能力。因此,要想有效地进行数据组织和程序开发,就必须掌握数据结构的知识。 课程的内容重点立足于基础知识和基础理论的掌握、应用能力的培养以及实践能力的提高。该课程通过一些最常用的数据结构的介绍,阐明了数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种典型应用说明它们在进行各种运算时的动态性质及实际的执行算法。具体来说,就是从数据结构的逻辑结构、存储结构和数据的操作三个方面使学生较好的掌握线性表、树、二叉树、图和文件等常用的数据结构的基本概念及构建方法。并掌握在各种常用数据结构上实现的查找和排序算法。同时对算法的时间和空间复杂性有一定的分析能力。在课程学习结束后要求学生针对简单的应用问题,能够选择合适的数据结构设计并编写出有效的算法程序。 本课程是实践性很强的一门课程,不但要求学生要深刻理会相应的基本理论、基本原理等知识,还要求学生亲自动手设计、上机实现各种算法,以达到使学生理论与实践相结合,综合应用各知识点的目的,巩固、加深所学的理论,并培养学生的科学研究能力和创新精神,并为后继课程的学习奠定坚实的基础。 3. 知识点与学时分配 第一章绪论(1学时) 数据结构的基本概念和术语;数据结构在软件系统中的作用;课程的研究和学习内容等;算法及其特征;算法性能度量指标;算法时间和空间复杂性及其分析方法。 第二章线性表(4学时) 线性表的逻辑结构、各种存储结构、基本操作(算法)的实现及性能分析、不同存储结构的比较、线性表的应用等。 第三章栈与队列(4学时) 栈和队列的逻辑结构定义及在两种存储结构上如何实现栈和队列的基本操作。栈和队列的本质区别,并且能在相应的应用问题中正确选用它们。栈和队列的应用。

最新数据结构课程设计题目

数据结构课程设计 一、考核方法和内容 根据课程设计过程中学生的学生态度、题目完成情况、课程设计报告书的质量和回答问题的情况等按照10%、40%、30%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。评分标准: 优秀:答辩所有问题都能答出+报告良好 或报告良好+实现“提高部分”的功能; 良好:答辩所有问题都能答出+报告一般; 或报告一般+实现“提高部分”的功能; 中等:答辩大部分问题能答出+报告良好; 及格:答辩大部分问题能答出+报告一般; 以下四种,都不及格: 1)答辩几乎答不出问题; 2)报告几乎都是代码; 3)雷同部分达到60%; 4)课设报告与数据结构和c/c++关联不大。 课设报告的装订顺序如下: 任务书(签名,把题目要求贴在相应位置,注意下划线)-----目录(注意目录的格式,页码)-----1、设计任务(题目要求)-----2、需求分析(准备选用什么数据逻辑结构?数据元素包含哪些属性?需要哪些函数?为什么要这样设计?最后列出抽象数据类型定义)-----3、系统设计(设计实现抽象数据类型,包含选择什么物理存储方式?数据元素的结构体或类定义,以及各函数的设计思路,算法,程序流程图等)----4、编码实现(重要函数的实现代码)-----5、调试分析(选择多组测试数据、运行截图、结果分析)-----6、课设总结(心得体会)-----7、谢辞-----8、参考文献; 课设报告打印要求: B5纸张打印,报告总页数控制在10—15页内,报告中不能全是代码,报告中代码总量控制在3页内。版式:无页眉,有页码,页码居中 字号:小四,单倍行距 字体:宋体+Times new Romar 截图:截图要配图的编号和图的题目,如:“图1 Insert函数流程图” 二、课程设计的题目 1.长整数的加法运算 2.通讯录管理系统的设计与实现——顺序表 3.广义表的应用 4.学生成绩管理系统的设计与实现 5.家谱管理系统的设计与实现 6.集合的并、交和差运算的程序 7.运动会分数统计 8.一元多项式计算器 9.文章编辑 10.哈夫曼树及其编码 11.校园导游咨询 12.通讯录管理系统的设计与实现——单链表 13.地图着色问题 14.内部排序算法比较 15.火车售票系统 16.图书管理系统 17.客户消费积分管理系统 18.产品进销存管理系统

数据结构课程设计

《数据结构》 课程设计报告 学号 姓名 班级 指导教师 安徽工业大学计算机学院 2010年6月

建立二叉树和线索二叉树 1.问题描述: 分别用以下方法建立二叉树并用图形显示出来: 1)用先序遍历的输入序列 2)用层次遍历的输入序列 3)用先序和中序遍历的结果 2.设计思路: 分三个方式去实现这个程序的功能,第一个实现先序遍历的输入数列建立二叉树;第二个是用层次遍历的方法输入序列;第三个是用先序和后序遍历的结果来建立二叉树;三种方法建立二叉树后都进行输出。关键是将这三个实现功能的函数写出来就行了;最后对所建立的二叉树进行中序线索化,并对此线索树进行中序遍历(不使用栈)。 3.数据结构设计: 该程序的主要目的就是建立二叉树和线索二叉树,所以采用树的存储方式更能完成这个程序; 结点的结构如下: typedef struct bnode { DataType data; int ltag,rtag; struct bnode *lchild, *rchild; } Bnode, *BTree; 4.功能函数设计: BTree CreateBinTree() 用先序遍历的方法讲二叉树建立; BTree CREATREE() 用队列实现层次二叉树的创建; void CreatBT(); 用先序和中序遍历的结果建立二叉树; void InThread(BTree t,BTree pre) 中序线索化; 5.编码实现: #include #include #define max 100 typedef struct bnode { char data; int ltag,rtag; struct bnode *lchild,*rchild; }Bnode,*BTree; BTree Q[max]; BTree CREATREE() { char ch; int front=1,rear=0;

数据结构课程设计教学任务书

《数据结构》课程设计教学任务书 计算机2007-1 课程设计周数:第20周指导老师:刘文娟 一、课程设计的目的 数据结构课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。 学习数据结构是为了将实际问题中所涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的: ?了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; ?初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; ?提高综合运用所学的理论知识和方法独立分析和解决问题的能力; ?训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科 学的工作方法和作风。 二、课程设计的基本要求 1、独立思考,独立完成:课程设计中各任务的设计和调试要求独立完成,遇到问题可以讨论,但不可以拷贝。 2、做好上机准备:每次上机前,要事先编制好准备调试的程序,认真想好调试步骤和有关环境的设置方法,准备好有关的文件。 3、按照课程设计的具体要求建立的功能模块,每个模块要求按照如下几个内容认真完成; 其中包括: a)需求分析: 在该部分中叙述,每个模块的功能要求 b)概要设计 在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义)。 c)详细设计 各个算法实现的源程序,对每个题目要有相应的源程序(可以是一组源程序,每个功能模块采用不同的函数实现) 源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 d)调试分析 测试数据,测试输出的结果,时间复杂度分析,和每个模块设计和调试时存在问题的思考(问题是哪些?问题如何解决?),算法的改进设想。 e)课程设计总结:(保存在word文档中)总结可以包括:课程设计过程的收获、遇到

数据结构课程设计

一、高校社团管理 在高校中,为了丰富学生的业余生活,在学校的帮助下,会成立许多社团,少则几个,多则几十个。为了有效管理这些社团,要求编写程序实现以下功能:1.社团招收新成员; 2.修改社团相应信息 3.老成员离开社团 4.查询社团情况; 5.统计社团成员数; 二、简单文本编辑器 设计一个文本编辑器,允许将文件读到内存中,也就是存储在一个缓冲区中。这个缓冲区将作为一个类的内嵌对象实现。缓冲区中的每行文本是一个字符串,将每行存储在一个双向链表的结点中,要求设计在缓冲区中的行上执行操作和在单个行中的字符上执行字符串操作的编辑命令。 基本要求: 包含如下命令列。可用大写或小写字母输入。 R:读取文本文件到缓冲区中,缓冲区中以前的任何内容将丢失,当前行是文件的第一行; W:将缓冲区的内容写入文本文件,当前行或缓冲区均不改变。 I:插入单个新行,用户必须在恰当的提示符的响应中键入新行并提供其行号。 D:删除当前行并移到下一行; F:可以从第1行开始或从当前行开始,查找包含有用户请求的目标串的第一行; C:将用户请求的字符串修改成用户请求的替换文本,可选择是仅在当前行中有效的还是对全文有效的。 Q:退出编辑器,立即结束; H:显示解释所有命令的帮助消息,程序也接受?作为H的替代者。 N:当前行移到下一行,也就是移到缓冲区的下一行; P:当前行移到上一行,也就是移到缓冲区的上一行;

B:当前行移到开始处,也就是移到缓冲区的第一行; E:当前行移到结束处,也就是移到缓冲区的最后一行; G:当前行移到缓冲区中用户指定的行; V:查看缓冲区的全部内容,打印到终端上。 三、电话客户服务模拟 一个模拟时钟提供接听电话服务的时间(以分钟计),然后这个时钟将循环的 自增1(分钟)直到达到指定时间为止。在时钟的每个"时刻",就会执行一次检查来看看对当前电话服务是否已经完成了,如果是,这个电话从电话队列中删除,模 拟服务将从队列中取出下一个电话(如果有的话)继续开始。同时还需要执行一个检查来判断是否有一个新的电话到达。如果是,其到达时间被记录下来,并为其产生一个随机服务时间,这个服务时间也被记录下来,然后这个电话被放入电话队列中,当客户人员空闲时,按照先来先服务的方式处理这个队列。当时钟到达指定时间时,不会再接听新电话,但是服务将继续,直到队列中所偶电话都得到处理为止。 基本要求: (1)程序需要的初始数据包括:客户服务人员的人数,时间限制,电话的到达速率,平均服务时间 (2)程序产生的结果包括:处理的电话数,每个电话的平均等待时间 四、停车场管理 设停车场是一个可停放n辆车的狭长通道,且只有一个大门可供汽车进出。在停车场内,汽车按到达的先后次序,由北向南依次排列(假设大门在最南端)。若停车场内已停满n辆车,则后来的汽车需在门外的便道上等候,当有车开走时,便道上的第一辆车即可开入。当停车场内某辆车要离开时,在它之后进入的车辆必须先退出停车场为它让路,待该辆车开出大门后,其他车辆再按原次序返回车场。每辆车离开停车场时,应按其停留时间的交费(从进入便道开始计时)。在这里假设汽车从便道上开走时不收取任何费用 基本要求: (1)汽车的输入信息格式为(到达/离去的标识,汽车牌照号码,到达/离去的时间)

数据结构课程设计全集

数据结构实践教程

前言 数据结构是计算机专业的必修。主干课程之一,它旨在使读者学会分析研究数据对象的特性,学会数据的组织方法, 以便选择合适的数据逻辑结构和存储结构, 以及相应的运算(操作),把现实世界中的问题转化为计算机内部的表示和处理,这是一个良好的程序设计技能训练的过程. 在整个教学或学习过程中,解题能力和技巧的训练是一个重要的环节。为了帮助教师讲授“数据结构",满足指导和评价“课程设计”的需要, 为了帮助和指导读者更好地学习数据结构这门课程,我们特编写了这本《数据结构实践教程》辅助教材,旨在弥补课堂教学和实验中的不足,帮助学生充分理解和巩固所学的基本概念、原理和方法,达到融会贯通、举一反三的目的。 实践证明,理解课程内容与较好地解决实际问题之间存在着明显差距,而算法设计完成的质量与基本的程序设计素质的培养是密切相关的。要想理解和巩固所学的基本概念。原理和方法, 牢固地掌握所学的基本知识。基本技能, 达到融会贯通。举一反三的目的, 就必须多做。多练。多见(见多识广)。正是为了达到上述目的,书中用一些实际的应用,对一些重要的数据结构和算法进行解读。经过循序渐进地训练, 就可以使读者掌握更多的程序设计技巧和方法,提高分析。解决问题的能力。 本书根据学生的基础知识和兴趣爱好将内容分为基础篇和提高篇两个部分。第一部分基础篇精选出适当的、与实际生活结合密切的课程设计实例加以分析实现。第二部分提高篇旨在使读者通过运用数据结构知识及复杂算法去解决现实世界中的一些实际问题。 本书依据数据结构课程教学大纲要求,同时又独立于具体的教科书,既重视实践应用,又重视理论分析,本书的主要特点有: ●本书精选出来的实例项目经典、实用、具有一定的趣味性,其内容丰富、涉及面广、难易适当,能给读者以启发,达到让读者掌握相关知识和开阔视野的目的 ●为了提高学生分析问题、解决问题的能力,本书对实例项目进行分析,其设计思路清晰流畅,值得参考. ●本书不仅仅是对照数据结构课程教学大纲举些例子说明数据结构能解决什么问题,而是通过分析具体的实例项目,得到对数据组织关系的需求,从而选择某个数据结构适应一些特定的问题和算法,并说明使用这种数据结构的优缺点. ●所有实例项目都给出了参考算法和源程序代码并在Turbo C和VisualC++6.0环境下运行通过。 由于作者水平有限、时间仓促,本书难免存在一些缺点和错误,恳请广大读者及同行们批评指正。

《数据结构(C语言版)》教案

《数据结构(C语言版)》教案 《数据结构(C语言版)》教案 2020 至2020 学年第一学期教案课程名称数据结构使用教材《数据结构(C语言版)》教学时数56课程性质必修任课班级(人数)信管(53人)信息系(部)信管教研室任课教师山东科技大学泰山科技学院课时授课计划2020-2020学年第二学期 第1周授课日期2月20 日星期1 月日星期月日星期月日星期月日星期班级信管10-1 基本课题第1章绪论 1.1-1.2 教学目的与要求: 1. 了解数据结构的基本概念 2. 理解常用术语教学重点: 数据结构的基本概念和术语教学难点: 数据元素之间的四种结构关系作业及参考书: 1、什么是数据结构?《数据结构算法实现及解析》/高一凡编著教具: 多媒体板书课堂类型: 讲授教学过程:自我介绍——开课——引入——展开——举例——小结——作业一、自我介绍和课程介绍约8min 课时:64 二、引入约2min 由问题的提出引入三、讲课进程设计1.1 什么是数据结构 1.1.1、数据结构与其它的关系约15min 数据结构+算法=程序程序设计: 为计算机处理问题编制一组指令集算法: 处理问题的策略数据结构: 问题的数学模型 1.1.2、当今计算机应用的特点: 约25min l) 所处理的数据量大且具有一定的关系; 2) 对其操作不再是单纯的数值计算,而更多地是需要对其进行组织、管理和检索。 举例说明: 1) 学生成绩表2)井安棋对弈3)交通管理结论计算机的操作对象的关系更加复杂,操作形式不再是单纯的数值计算,而更多地是对这些具有一定关系的数据进行组织管理; 我们将此称为非数值性处理。要使计算机能够更有效地进行这些非数值性处理,就必须弄清楚这些操作对象的特点,在计算机中的表示方式以及各个操作的具体实现手段。 1.2 基本概念和术语1.1.1、数据与数据结构约20min 数据:是对客观事物的符号表

数据结构课程设计报告

数据结构课程设计报告 题目:5 班级:计算机1102 学号:4111110030 姓名:陈越 指导老师:王新胜

一:需求分析 1.运行环境 TC 2.程序所需实现的功能 几种排序算法的演示,要求给出从初始开始时的每一趟的变化情况,并对各种排序算法性能作分析和比较: (1)直接插入排序; (2)折半插入排序; (3)冒泡排序; (4)简单选择排序; (5)快速排序; (6)堆排序; (7)归并排序. 二:设计说明 1.算法设计的思想 1)、直接插入排序 排序过程:整个排序过程为n-1趟插入,即先将序列中第1个记录看成是一个有序子序列,然后从第2个记录开始,逐个进行插入,直至整个序列有序。 2)、折半插入排序 排序过程:用折半查找方法确定插入位置的排序叫折半插入排序。 3)、冒泡排序

排序过程:将第一个记录的关键字与第二个记录的关键字进行比较,若为逆序r[1].key>r[2].key,则交换;然后比较第二个记录与第三个记录;依次类推,直至第n-1个记录和第n个记录比较为止——第一趟冒泡排序,结果关键字最大的记录被安置在最后一个记录上。对前n-1个记录进行第二趟冒泡排序,结果使关键字次大的记录被安置在第n-1个记录位置。重复上述过程,直到“在一趟排序过程中没有进行过交换记录的操作”为止 4)、简单选择排序 排序过程:首先通过n-1次关键字比较,从n个记录中找出关键字最小的记录,将它与第一个记录交换。再通过n-2次比较,从剩余的n-1个记录中找出关键字次小的记录,将它与第二个记录交换。重复上述操作,共进行n-1趟排序后,排序结束。 5)、快速排序 基本思想:通过一趟排序,将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录进行排序,以达到整个序列有序。 排序过程:对r[s……t]中记录进行一趟快速排序,附设两个指针i和j,设枢轴记录rp=r[s],x=rp.key。初始时令i=s,j=t。首先从j所指位置向前搜索第一个关键字小于x的记录,并和rp交换。再从i所指位置起向后搜索,找到第一个关键字大于x的记录,和rp交换。重复上述两步,直至i==j为止。再分别对两个子序列进行快速排序,直到每个子序列只含有一个记录为止。 6)、堆排序 排序过程:将无序序列建成一个堆,得到关键字最小(或最大)的记录;输

数据结构课程设计报告(完结)

《数据结构》课程设计手册 一、 栈的使用 (一)需求分析 本程序通过java 语言完成栈的构造,对堆栈的数据进行基本的存储操作。具体包括,数据的入栈、出栈、读取等。 入栈操作:要求用户从键盘出入要进栈的数值或字符,对栈满的情况作出提示。 出栈操作:删除栈顶元素,并将删除的数据或字符在运行结果中显示。对栈空的情况作出提示。 读取操作:在插入和删除的任意阶段都可讲栈中的元素读取出来,能够实现对栈中的数据元素个数进行统计。 (二)概要设计 1.为了实现上述程序功能,需要定义栈的数据类型有: static int MAX=5; static String[] item =new String[MAX]; static int top; 2.本程序包含4个函数 Push() 初始条件:栈未满 操作结果:往栈中插入数据; Pop() 初始条件:存在非空栈 操作结果:将栈中的数据删除; Get() 初始条件:存在非空栈 操作结果:显示非空栈中的所有元素; Main() 操作结果:调用以上函数。 程序流程图: Main() Pop() Push() Get()

(三)详细设计 具体代码见Stack.java 基本操作: Stack()构造一个空的栈,初始状态top的指针为-1; 入栈方法public static void push()。该方法中,首先判断是否栈满(top>=MAX-1),如果栈满,则输出提示语“栈满 ,栈中最多能容纳5个元素”,否则从键盘输入数据,并且top指针加1。 出栈方法public static void pop()。首先判断是否栈空(top<0),如果栈空,则输出提示信息“栈空 ,没有可操作的元素”,否则删除栈顶元素。Top指针减1。

相关主题
文本预览
相关文档 最新文档