课程背景

数据结构与算法作为计算机专业的核心课程,是计算机专业人才培养的基石,从事计算机学科的信息处理、人工智能、数据库、操作系统、图形图像等方面的研究,都离不开数据结构和算法的应用。随着计算机处理的数据量越来越大,对处理数据的程序效率也提出了更高的需求,计算机专业人才应具有扎实的编码能力和算法知识,并通过程序实现能够让计算机高效、准确地执行人们的想法和构思,这是计算机专业培养的重要目标。

数据结构与算法作为一门实践性很强的专业技术基础课程,是培养学生计算思维、算法设计与实现能力的重要课程,包括 C 语言程序设计、数据结构、算法设计等。采用笔试的传统方式考核学生的知识掌握能力,考试能得高分的学生却不能编写一条简单的程序,这完全背离计算机专业对人才培养的目标,授课教师在理论与实践教学的探索中不断改革创新,培养学生理论素养与实践能力。

熟练掌握计算机的经典算法是学生今后从事各方面工作和研究的专业基础。IT 公司在招聘时,无不把考察学生的算法知识作为重点,尤其在人工智能和大数据的时代,算法在提高程序效率方面起着举足轻重的作用。计算机的经典算法体现着科学家的智慧和思维,通过对经典算法的学习可以培养学生的思维能力和解决问题的能力。更重要的是,对于算法的学习,不仅仅要理解算法的理论,更要能够将算法实现并应用于解决实际问题当中,这才算达到了熟练掌握算法的培养目标。

java数据结构和算法
java数据结构和算法

java数据结构和算法课程目录(参考)

前言
第一章 算法及其复杂度 1
1.1 计算机与算法
1.1.1 过指定垂足的直角边
1.1.2 三等分线段
1.1.3 排序
1.1.4 算法的定义
1.2 算法性能的分析与评价
1.2.1 三个层次
1.2.2 时间复杂度及其度量
1.2.3 空间复杂度
1.3 算法复杂度及其分析
1.3.1 O(1)⎯⎯取非极端元素
1.3.2 O(logn)⎯⎯进制转换
1.3.3 O(n)⎯⎯数组求和
1.3.4 O(n 2 )⎯⎯起泡排序
1.3.5 O(2 r )⎯⎯幂函数
1.4 计算模型
1.4.1 可解性
1.4.2 有效可解
1.4.3 下界
1.5 递归 1.5.1 线性递归
1.5.2 递归算法的复杂度分析
1.5.3 二分递归
1.5.4 多分支递归
第二章 栈与队列 27
2.1 栈
2.1.1 栈ADT

2.1.2 基于数组的简单实现

2.1.3 Java虚拟机中的栈

2.1.4 栈应用实例

2.2 队列

2.2.1 队列ADT

2.2.2 基于数组的实现

2.2.3 队列应用实例

2.3 链表

2.3.1 单链表

2.3.2 基于单链表实现栈

2.3.3 基于单链表实现队列

2.4 位置

2.4.1 位置ADT

2.4.2 位置ADT接口

2.5 双端队列

2.5.1 双端队列的ADT

2.5.2 双端队列的接口

2.5.3 双向链表

2.5.4 基于双向链表实现的双端队列

第三章 向量、列表与序列

3.1 向量与数组

3.1.1 向量ADT

3.1.2 基于数组的简单实现

3.1.3 基于可扩充数组的实现

3.1.4 java.util.ArrayList类和java.util.Vector类

3.2 列表

3.2.1 基于节点的操作

3.2.2 由秩到位置

3.2.3 列表ADT

3.2.4 基于双向链表实现的列表

3.3 序列

3.3.1 序列ADT

3.3.2 基于双向链表实现序列

3.3.3 基于数组实现序列

3.4 迭代器

3.4.1 简单迭代器的ADT

3.4.2 迭代器接口

3.4.3 迭代器的实现

3.4.4 Java中的列表及迭代器

第四章 树 101

4.1 术语及性质

4.1.1 节点的深度、树的深度与高度

4.1.2 度、内部节点与外部节点

4.1.3 路径

4.1.4 祖先、后代、子树和节点的高度

4.1.5 共同祖先及最低共同祖先

4.1.6 有序树、m叉树

4.1.7 二叉树

4.1.8 满二叉树与完全二叉树

4.2 树抽象数据类型及其实现

4.2.1 父亲-长子-弟弟”模型

4.2.2 树ADT

4.2.3 树的Java接口

4.2.4 基于链表实现树

4.3 树的基本算法

4.3.1 getSize()⎯⎯统计(子)树的规模

4.3.2 getHeight()⎯⎯计算节点的高度

4.3.3 getDepth()⎯⎯计算节点的深度

4.3.4 前序、后序遍历

4.3.5 层次遍历

4.3.6 树迭代器

4.4 二叉树抽象数据类型及其实现

4.4.1 二叉树ADT

4.4.2 二叉树类的Java接口

4.4.3 二叉树类的实现

4.5 二叉树的基本算法

4.5.1 getSize()、getHeight()和getDepth()

4.5.2 updateSize()

4.5.3 updateHeight()

4.5.4 updateDepth()

4.5.5 secede()

4.5.6 attachL()和attachR()

4.5.7 二叉树的遍历

4.5.8 直接前驱、直接后继的定位算法

4.6 完全二叉树的Java实现

4.6.1 完全二叉树类的Java接口

4.6.2 基于向量的实现

第五章 优先队列

5.1 优先级、关键码、全序关系与优先队列

5.2 条目与比较器

5.2.1 条目

5.2.2 比较器

5.2.3 Comparator接口及其实现

5.3 优先队列ADT及Java接口

5.3.1 ADT描述

5.3.2 Java接口

5.3.3 基于优先队列的排序器

5.4 用向量实现优先队列

5.5 用列表实现优先队列

5.5.1 基于无序列表的实现及分析

5.5.2 基于有序列表的实现及分析

5.6 选择排序与插入排序

5.6.1 选择排序

5.6.2 插入排序

5.6.3 效率比较

5.7 堆的定义及性质

5.7.1 堆结构

5.7.2 完全性

5.8 用堆实现优先队列

5.8.1 基于堆的优先队列及其实现

5.8.2 插入与上滤

5.8.3 删除与下滤

5.8.4 改变任意节点的关键码

5.8.5 建堆

5.9 堆排序

5.9.1 直接堆排序

5.9.2 就地堆排序

5.10 Huffman树

5.10.1 二叉编码树

5.10.2 最优编码树

5.10.3 Huffman编码与Huffman编码树

5.10.4 Huffman编码树的构造算法

5.10.5 基于优先队列的Huffman树构造算法

第六章 映射与词典

6.1 映射

6.1.1 映射的ADT描述

6.1.2 映射的Java接口

6.1.3 判等器

6.1.4 java.util包中的映射类

6.1.5 基于列表实现映射类

6.2 散列表

6.2.1 桶及桶数组

6.2.2 散列函数

6.2.3 散列码

6.2.4 压缩函数

6.2.5 冲突的普遍性⎯⎯生日悖论

6.2.6 解决冲突

6.2.7 基于散列表实现映射类

6.2.8 装填因子与重散列

6.3 无序词典

6.3.1 无序词典的ADT描述

6.3.2 无序词典的Java接口

6.3.3 列表式无序词典及其实现

6.3.4 散列表式无序词典及其实现

6.4 有序词典

6.4.1 全序关系与有序查找表

6.4.2 二分查找

6.4.3 有序词典的ADT描述

6.4.4 有序词典的Java接口

6.4.5 基于有序查找表实现有序词典

第七章 查找树

7.1 二分查找树

7.1.1 定义

7.1.2 查找算法

7.1.3 完全查找算法

7.1.4 插入算法

7.1.5 删除算法

7.1.6 二分查找树节点类的实现

7.1.7 二分查找树类的实现

7.1.8 二分查找树的平均性能

7.2 AVL树

7.2.1 平衡二分查找树

7.2.2 等价二分查找树

7.2.3 等价变换

7.2.4 AVL树

7.2.5 插入节点后的重平衡

7.2.6 节点删除后的重平衡

7.2.7 AVL树的Java实现

7.3 伸展树

7.3.1 数据局部性

7.3.2 逐层伸展

7.3.3 双层伸展

7.3.4 分摊复杂度

7.3.5 伸展树的Java实现

7.3.6 插入

7.3.7 删除

7.4 B-树

7.4.1 分级存储

7.4.2 B-树的定义

7.4.3 关键码的查找

7.4.4 性能分析

7.4.5 上溢节点的处理

7.4.6 关键码的插入

7.4.7 下溢节点的处理

7.4.8 关键码的删除

第八章 排序

8.1 归并排序

8.1.1 分治策略

8.1.2 时间复杂度

8.1.3 归并算法

8.1.4 Mergesort的Java实现

8.2 快速排序

8.2.1 分治策略

8.2.2 轴点

8.2.3 划分算法

8.2.4 Quicksort的Java实现

8.2.5 时间复杂度

8.3 复杂度下界

8.3.1 比较树与基于比较的算法

8.3.2 下界

第九章 串

9.1 串及其ADT

9.2 串模式匹配

9.2.1 概念与记号

9.2.2 问题

9.2.3 算法效率的测试与评价

9.3 蛮力算法

9.3.1 算法描述

9.3.2 算法实现

9.3.3 算法分析

9.4 Knuth-Morris-Pratt算法

9.4.1 蛮力算法的改进

9.4.2 next[]表的定义及含义

9.4.3 KMP算法描述

9.4.4 next[]表的特殊情况

9.4.5 next[]表的构造

9.4.6 next[]表的改进

9.4.7 KMP算法的Java实现

9.4.8 性能分析

9.5 BM算法

9.5.1 坏字符策略

9.5.2 好后缀策略

9.5.3 BM算法

9.5.4 BM算法的Java实现

9.5.5 性能

第十章 图 321

10.1 概述

10.1.1 无向图、混合图及有向图

10.1.2 度

10.1.3 简单图

10.1.4 图的复杂度

10.1.5 子图、生成子图与限制子图

10.1.6 通路、环路及可达分量

10.1.7 连通性、等价类与连通分量

10.1.8 森林、树以及无向图的生成树

10.1.9 有向图的生成树

10.1.10 带权网络

10.2 抽象数据类型

10.2.1 图

10.2.2 顶点

10.2.3 边

10.3 邻接矩阵

10.3.1 表示方法

10.3.2 时间性能

10.3.3 空间性能

10.4 邻接表

10.4.1 顶点表和边表

10.4.2 顶点与邻接边表

10.4.3 边

10.4.4 基于邻接表实现图结构

10.5 图遍历及其算法模板

10.6 深度优先遍历

10.6.1 深度优先遍历算法

10.6.2 边分类

10.6.3 可达分量与DFS树

10.6.4 深度优先遍历算法模板

10.6.5 可达分量算法

10.6.6 单强连通分量算法

10.6.7 强连通分量分解算法

10.6.8 浓缩图与弱连通性

10.7 广度优先遍历

10.7.1 广度优先遍历算法

10.7.2 边分类

10.7.3 可达分量与BFS树

10.7.4 广度优先遍历算法模板

10.7.5 最短距离算法

10.8 最佳优先遍历

10.8.1 最佳优先遍历算法

10.8.2 最佳优先遍历算法模板

10.8.3 最短路径

10.8.4 最短路径序列

10.8.5 Dijkstra算法

10.8.6 最小生成树

10.8.7 Prim-Jarnik算法

 

课程特点

该系列课程资源面向中等职业院校、高等职业教育院校、本科层次职业教育试点学校、应用型本科高校及国家开放大学教师和学生提供学习java数据结构和算法的教辅材料,助力教师更好地传递知识,学生快速地提升相应ICT技能,提升就业起点;推动校企合作,协助院校培养复合型技术技能人才。

“数据结构与算法”是一门重要的计算机类骨干基础课程。其主要目的是使学生较全面地理解数据结构的概念、掌握各种数据结构与算法的实现方式,比较不同数据结构和算法的特点。通过学习,使学生能够提高用计算机解决实际问题的能力。

本课程针对实验班的学生,将以问题求解为主线,从问题抽象、数据抽象和算法抽象的角度来组织数据结构与算法的设计,指导学生建立数学模型、使用不同的数据结构不同的算法分别去解决问题,最后去探讨各种数据结构和算法的优缺点,同时让学生学会怎么样根据实际问题来取舍数据结构和算法,并且在时间复杂度和空间复杂度之间进行平衡。

在讲授过程中,将调动学生的积极性,采取研究式的学习方法。有些较基础的内容采用学生综述、答辩、小测验的形式,培养学生的自学能力。引导学生跟踪数据结构与算法的前沿应用技术,引入研读论文并作报告的讨论班形式,培养学生的捕捉新理论、新技术的科研能力。

最后的合作大实习题由学生自己提出,并组织团队完成。由助教引导讨论,从需求分析、模块设计、编程实践、调试测试各个阶段进行引导,加强学生们综合应用数据结构和算法知识的能力。

系列课程教辅材料具有四大优势:

配套标准 适用性高 书籍的内容覆盖全面java数据结构和算法内容,具有高度适用性;

理实结合 案例丰富 案例基于真实工作场景编写,适配岗位需求,注重学生动手能力和实际问题解决能力的培养;

产教融合 优势互补 教材采用“1+1+1”编写模式,产、教、社三方联合,优势互补,保障了书籍的高质量;

资源丰富 适合教学 教材配套PPT课件、课程大纲,视频资源及案例化实验手册,适合教师教学及学生学习使用。

平台介绍

在线评测系统的课程实验平台建设的必要性

建设在线评测系统实验平台对提升程序设计类课程的实验效果是非常有效的。在没有在线评测系统之前,对数据结构与算法实验课程中学生实验结果的可行性考核是不强的,编译系统对程序的考察只是编译结果是否正确,对于算法的时间复杂度和空间复杂度的考核没有一个严格的标准,教师对班级每位学生程序的验证所耗费的时间是不可估量的。

唯众云课堂

唯众云课堂
唯众云课堂

算法是程序的灵魂,架构是灵魂的躯体。在目前大数据和人工智能的环境下,没有算法的程序已不能满足实际应用的需求了,学生的编程能力和算法实现能力,无时无刻不在科研和研发中发挥着重要的作用。因此,具有编程能力强、算法基础扎实的计算机专业学生成为名校和名企的抢手人才。武汉唯众智创科技有限公司立足计算机专业技术发展趋势和新时代对计算机专业技术人才需求,开发的唯众云课堂理实一体化全流程教学平台,是基于开放的、可信、可靠的华为公有云,涵盖 “备课、授课、学习、实训、考试、评测” 完整教学流程, 构建支持多种教学模式的云端一体化教学管理服务体系。同时具有促进主动式、协作式、研究型、自主型行动导向型学习,形成便捷、开放、高效、灵活的新型教学形式的重要途径,是示范性院校展示和推广本校教学改革成果的重要平台。平台以资源共建共享为目的,以专业名师创建及从业者自主创建资源结合的形式,以创建精品资源和进行网络教学实训资源为核心,以社会企业实际生产需要为导向,以让职业教学受训者高效就业为驱动,搭建面向海量教学、实训资源处理,集资源分布式存储、资源管理、资源评价、知识管理、学习成果评估为一体,全流程管理的教学实训平台。

Java数据结构和算法教学实训平台

Java数据结构和算法教学实训平台包含课程教学所需的课件、教材、实验文档及在线评测系统。鉴于数据结构与算法是与实践紧密结合的课程,配合理论教学,将加强上机实习的训练,通过合理、有效地设计上机题目,改进作业评核方式,调动学生的积极性,启发引导学生掌握基础理论并能创新应用,增强学生综合运用有关知识的能力。

Java数据结构和算法实验目录模块
Java数据结构和算法实验目录模块
Java数据结构和算法实验题目模块
Java数据结构和算法实验题目模块

 

Java数据结构和算法在线测评模块
Java数据结构和算法在线测评模块
Java数据结构和算法在线实训模块
Java数据结构和算法在线实训模块

Java数据结构和算法实验案例

实验一:使用Java位运算符比较三个整数并排序

实验题目 使用Java位运算符比较三个整数并排序

任务要求

试写一算法,自大到小排序读入的三个整数n1,n2,n3的值,需通过Java的位运算符来实现。整数n1,n2,n3的大小范围: -2147483648<= n1,n2,n3 <=2147483647。

l  示例1:

输入: 99 -14 400

输出:400 99 -14

l  示例2:

输入:5 5 10

输出:10 5 5

任务分析

题目要求通过Java 运算符来完成排序,那么在排序中即不能通过中间变量交换来进行排序。而根据运算符的知识,异或 ^ 操作即能满足要求。

任务知识

计算机的异或运算符^。

前置代码

java数据结构和算法课程资源

默认代码

java数据结构和算法课程资源

参考答案

java数据结构和算法课程资源

测试用例

java数据结构和算法课程资源

评测设置

java数据结构和算法课程资源

题目解析

题目要求需要运用java位运算符来实现。其中位操作包含: &与 |或 ^异或 以及 ~取反操作。而在比较大小后需要交换两个整数的值。对应的位操作中^异或操作便能实现。

如下:

int a = 10; int b = 5;  a = a^b;

若此时a^b再次异或时,异或的结果便是10即原来a的值 b = 10;此时a^b再次异或时,异或的结果便是5,即原来b的值。

 

相关新闻

联系我们

027-87870986

在线咨询:点击这里给我发消息

邮件:931234110@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信