根据MOOC上课程总结,文章目录为:

一、引论

  1. 数据结构的基本概念
  2. 数据的逻辑结构和存储结构
  3. 算法及其时间复杂度
  4. 时间复杂度及应用

二、线性表

  1. 线性表的概念及顺序存储
  2. 单链表的概念及其基本操作
  3. 建立单链表
  4. 循环链表
  5. 双向链表
  6. 一元多项式的表示和运算

三、栈和队列

  1. 栈的概念及其基本操作
  2. 栈的概念及其基本操作—双端栈
  3. 栈的应用—递归及汉诺塔问题
  4. 栈的应用—迷宫实验
  5. 队列的概念及基本操作
  6. 队列的概念及应用—链队列
  7. 表达式的求值问题
  8. 递归与分治算法

四、串

  1. 串的基本操作
  2. 串的简单模式匹配
  3. 串的KMP模式匹配算法
  4. 模式串的next值计算思
  5. 模式串的next值计算实现
  6. 模式串的nextval值

五、多维数组和广义表

  1. 数组的定义与顺序存储
  2. 矩阵的压缩存储
  3. 三元组矩阵的快速转置
  4. 广义表

六、树

  1. 二叉树的性质
  2. 二叉树的顺序存储
  3. 二叉树的遍历
  4. 统计叶子结点
  5. 计算二叉树的高度
  6. 二叉树的恢复建立
  7. 二叉树的非递归遍历
  8. 线索二叉树
  9. 线索二叉树的遍历
  10. 树和森林
  11. 树与森林的遍历
  12. 哈夫曼树
  13. 哈夫曼编译码
  14. 哈夫曼编码算法
  15. 解空间树及其相关算法

七、图

  1. 图的基本概念
  2. 图的存储
  3. 图的深度优先遍历
  4. 图的广度优先遍历
  5. 图的最小生成树-Prim算法思想
  6. 图的最小生成树-Prim算法实现
  7. 图的最小生成树-Kruskal算法
  8. 图的拓扑排序思想
  9. 图的拓扑排序实现
  10. 图的关键路径思想
  11. 图的关键路径实现
  12. 图的单源最短路径-Dijkstra思想
  13. 图的单源最短路径-Dijkstra实现
  14. 贪心算法

八、查找

  1. 顺序查找
  2. 折半查找
  3. 二叉排序树的基本概念与查找
  4. 二叉排序树的插入与生成
  5. 二叉排序树的删除
  6. 哈希表基本概念
  7. 哈希函数
  8. 哈希处理冲突

九、排序

  1. 排序基本概念
  2. 直接插入排序
  3. 希尔排序
  4. 冒泡排序
  5. 快速排序
  6. 选择排序
  7. 树形排序
  8. 堆排序
  9. 归并排序
  10. 基数排序

正文

一、引论

(一)数据结构的基本概念

niklaus wirth计算机科学家说过:

算法+数据结构=程序。

algorithm+data structures=programs

程序设计:为计算及处理问题编制的一组指令集和。

算法:处理问题的策略。

若有一个实际的问题需要用程序设计实现,那么第一步就要先做数据抽象,抽象出它的数学模型。然后对数据进行组织,如何组织、存储、计算就是数据结构要研究的范畴。

对于数值型数据如结构静力分析计算(线性代数方程组)、全球天气预报(环流模式方程/球面坐标)比较好处理,但是对于很多非数值型的计算,程序设计要解决两个关键问题:

①表示:对象及其关系在计算机中的表示。只有对象及其相互关系已存储在计算机中,才能被进一步处理。

②操作:对对象进行处理,访问。

A、数据结构的分类

1、线性结构

例子1:超市商品管理。对商品的各种信息如何加以组织和存储。

数据对象:商品。如W1是方便面,W2是洗发水,W3是鸡精。。。这是一个表结构。

关系:线性。W1后面是W2,W2后面是W3。。。

2、树型结构

例子2:计算机对弈。象棋 五子棋 三子棋等。

操作对象:格局(棋盘状态)

元素间的关系:树(有比赛规则决定)

树形结构

西北大学郝克刚博导编程的感悟:

3、图结构

例子3:元素间的关系为图。

将不能同时通行的节点连接在一起,形成以上的图
多岔路口的就变成了给图上色的问题。只要有边相连那么灯的颜色就要不同。

B、基本概念

数据data:描述客观事物的数值、字符以及能输入机器且能被处理的各种符号集合。包括整型、实型、布尔型、图像、字符、声音等一切可以输入到计算机中的符号集合。数据元素data element组成数据的基本单位,是数据集合的个体,在计算机中通常作为一个整体进行考虑和处理。一个数据元素可以由一个或多个数据项data item组成,数据项是有独立含义的最小单位。数据对象data object性质相同的数据元素的集合,是数据的一个子集。如整数集合:N={0,正负1,……},无限集。字符集合数据结构data structure:相互之间存在一种或多种特定关系的数据元素的集合,是带有结构关系的数据元素的集合,他指的是数据元素之间的相互关系,即数据的组织形式。如树结构、图结构。数据类型data type一组性质相同的值集合以及定义在这个值集合上的一组操作的总称。如在高级语言中,整型类型的取值范围为-32768到+32767,运算符集合为加减乘除取模。数据类型可以分为原子类型和结构类型。原子类型:其值不可分解。如C语言中的标准类型(整型、实型、字符型)。结构类型:其值是由若干成分按某种结构组成的,因此是可以分解的,并且它的成分可以是非结构的,也可以是结构的。
数据抽象与抽象数据类型。抽象数据类型abstract data type基于一类逻辑关系的数据类型以及定义在这个类型之上的一组操作。抽象数据类型确定了一个模型,但将模型的实现细节隐藏起来,它定义了一组运算,但将运算的实现过程隐藏起来。如整型就可以认为是一个抽象数据类型,取值范围,运算过程和细节我们都不用管。

如线性表的抽象数据类型的描述:

抽象数据类型实现的三种方法:①传统的面向过程的程序设计、②“包”、“模型”的设计方法如Ada语言;③面向对象的程序设计OOP。

ADT有两个重要特征:①数据抽象:用ADT描述程序处理的实体时,强调的是其本质的特征、其所能完成的功能以及他和外部用户的接口(即外部使用它的方法)。②数据封装:将实体的外部特性和其内部实现细节分离,并且对外部用户隐藏其内部实现细节。

(二)数据的逻辑结构和存储结构

1、逻辑结构

逻辑结构:数据元素之间的逻辑关系描述。形式化描述为:Data_Structure=(D,R)。其中D是数据元素的有限集,R是D上关系的有限集。逻辑结构有四类基本的结构:集合结构、线性结构、树型结构、图状结构。集合结构:结构中的数据元素之间除了同属于一个集合的关系外,无任何其他关系。线性结构:结构中的数据元素之间存在着一对一的线性关系。如一元表。树型结构:结构中的数据元素之间存在着一对多的层次。如文件夹存储、对弈、五子棋等。图状结构或网状结构:结构中的数据元素之间多对多的任意关系。如城市旅游、交通问题。

2、存储结构

存储结构:逻辑结构在计算机中的存储映像,是逻辑结构在计算机中的表现,包括数据元素的表示和关系的表示。

数据元素的表示:用若干个二进制“位串”表示。

数据元素之间关系的表示:有两种方法,顺序映像(顺序存储结构)和非顺序映像(非顺序存储结构)。

如线性表的顺序存储
链式存储结构示例

运算集合:在计算机中进行运算操作的集合。

线性表一般为增删改查。

最终我们就得出了数据结构的定义:

按某种逻辑关系组织起来的一批数据,按一定的映像方式把它存放在计算机存储中,并在这些数据上定义了一个运算的集合

逻辑结构+存储结构+运算集合→数据结构

(三)算法及其时间复杂度

算法Algorithm:是规则的有限集合,是为解决特定问题而规定的一系列操作。

1、算法的特性有5个:

  1. 有限性:有限步骤内正常结束,不能形成无穷循环。
  2. 确定性:算法中的每一个步骤必须有确定含义。
  3. 无二义性:算法中不能拥有二义性。
  4. 输入或输出:至少有一个或多个输入和输出。
  5. 可行性:原则上能精确进行,操作可通过已实现基本运算执行有限次而完成。

2、对算法的要求:

  • 正确性:
  • 可读性:一个程序的命名一般应按照它的含义,函数的整个结构都要非常的清晰。
  • 健壮性:抗病毒和抗干扰能力。
  • 高效率和低存储量的要求:一般我们需要一个程序的销量是比较高的,占用的存储空间是比较少的。

3、算法、语言、程序的关系:

算法:描述了数据对象的元素之间的关系(包括数据逻辑关系,存储关系描述)

描述算法的工具:算法可用自然语言、框图或高级程序设计语言(如C语言、Java、Python)进行描述。

程序是算法在计算机中的实现。

4、算法性能分析

评价算法的标准:评价一个算法的好坏就是看它的时间和空间,因为空间现在的内存都很大,考虑的比较少,我们主要考虑算法的时间复杂度怎样进行衡量。
性能性价:对问题规模N与该算法在运行时所占的空间S与所耗费的时间T给出一个数量关系的评价。
问题规模N——对不同的问题其含义不同,对矩阵是阶数;对多项式运算是多项式项数;对图是顶点个数;对集合运算是集合中元素个数。

衡量算法效率的方法一般有两种:

  • ①事后统计法,缺点必须执行程序,其他因素会掩盖算法本质。
  • ②事前估算法。

和算法执行时间相关的因素有:

  1. 算法选用的策略,如冒泡排序
  2. 问题的规模
  3. 编写程序的语言
  4. 编译程序产生的机器代码的质量
  5. 计算机执行指令的速度

算法执行时间:大致上等于其所有语句执行时间的总和,对于语句的执行时间是指该条语句的执行次数和执行一次所需时间的乘积。

一般针对算法中基本操作语句(源操作)的执行次数做出估计,从中得到算法执行时间的信息。

语句频度:该语句在一个算法中重复执行的次数。

算法的时间复杂度:即是算法的时间量度记做:T(n)=O(f(n))

如:

  • x=x+1;时间复杂度为0(1),称为常量阶;
  • for (i=1;i<=n;i++) x=x+1;时间复杂度为O(n),称为线性阶;
  • for(i=1;i<=n;i++)
  • for(j=1;j<=n;j++) x=x+1;时间复杂度为O(n的平方),称为平方阶

一般常用的时间复杂度频率计数有7个:

常用的时间复杂度频率表:

n为2的0到m次幂

算法的空间复杂度:作为算法所需存储空间的量度,记做:S(n)=O(f(n))。算法的存储量包括输入数据所占空间,程序本身所占空间,辅助变量所占空间。

问题:编写程序实现用亿元人民币换成一分、两分、五分的硬币共50枚。分析:假设一分、两分、五分的硬币各为x、y、在、枚。则有:x+y+z=50;x+2y+5z=100

那么编程方法1:三重循环

方法2:两重循环

方法3:改进的两重循环

方法4:单重循环

算法的设计是至关重要的。无论多么简单的编程,都要考虑优化,怎么简单。

算法逐步优化

二、线性表

(一)线性表的概念及顺序存储

线性表(linear list):由n(n>=0)个类型相同的数据元素组成的有限序列。数据元素之间是一对一的关系,即每个数据元素最多有一个直接前驱和一个直接后继。

特点:

  • 同一性:线性表由同类数据元素组成,每一个数据必须属于同一数据对象。
  • 有穷性:线性表由有限个数据元素组成,表长度就是表中数据元素的个数。
  • 有序性:线性表中相邻数据元素之间存在着序偶关系。

线性表的顺序存储:用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中。
采用顺序存储结构的线性表通常称为顺序表。假设线性表中每个元素占k个单元,第一个元素的地址为loc(a1),则第i个元素的地址为:loc(ai)=loc(a1)+(i-1)k

基本运算:查找、插入、删除操作

如c语言中查找操作,按序号查找getdata(L,i)即查找线性表L中第i个数据元素,其结果为L.elem[i]。按内容查找Locate(L,x),即查找线性表L中与给定值x相等的数据元素,其结果是,若在表L中找到与x相等的元素,则返回该元素在表中的序号,若找不到就返回一个空序号如-1。

顺序表插入、删除算法时间复杂度分析:

线性表的顺序存储

优点:①用数组存储数据元素,操作方法简单,容易实现。②无须为表示结点间的逻辑关系而增加额外的存储开销。③存储密度高。④顺序表可按元素位序随机存取结点。

缺点:①插入或删除运算不方便,除表尾的位置外,在表的其他位置上进行插入或删除操作都必须移动大量的结点,其效率较低。②由于顺序表要求占用连续的存储空间,存储分配只能预先进行静态分配。因此当表长变化较大时,难以确定合适的存储规模。

(二)单链表的概念及其基本操作

链表:采用链式存储结构的线性表。从实现角度来说,可分为静态链表和动态链表。从链接方式来说,可分为单链表、双向链表和循环链表。单链表:链表中的每个结点只有一个指针域。单链表包括两个域:数据域——用来存储结点的数据值;指针域——用来存储数据元素的直接后继的地址。

单链表的插入操作

单链表删除

先找到a(i-1),然后命名为pre,然后将其指向其后面的后面的指针,然后释放a(i)的空间。

(三)建立单链表

(四)循环链表

(五)双向链表

(六)一元多项式的表示和运算

三、栈和队列

(一)栈的概念及其基本操作

  1. 栈的概念及其基本操作—双端栈
  2. 栈的应用—递归及汉诺塔问题
  3. 栈的应用—迷宫实验
  4. 队列的概念及基本操作
  5. 队列的概念及应用—链队列
  6. 表达式的求值问题
  7. 递归与分治算法

四、串

  1. 串的基本操作
  2. 串的简单模式匹配
  3. 串的KMP模式匹配算法
  4. 模式串的next值计算思
  5. 模式串的next值计算实现
  6. 模式串的nextval值

五、多维数组和广义表

  1. 数组的定义与顺序存储
  2. 矩阵的压缩存储
  3. 三元组矩阵的快速转置
  4. 广义表

六、树

  1. 二叉树的性质
  2. 二叉树的顺序存储
  3. 二叉树的遍历
  4. 统计叶子结点
  5. 计算二叉树的高度
  6. 二叉树的恢复建立
  7. 二叉树的非递归遍历
  8. 线索二叉树
  9. 线索二叉树的遍历
  10. 树和森林
  11. 树与森林的遍历
  12. 哈夫曼树
  13. 哈夫曼编译码
  14. 哈夫曼编码算法
  15. 解空间树及其相关算法

七、图

  1. 图的基本概念
  2. 图的存储
  3. 图的深度优先遍历
  4. 图的广度优先遍历
  5. 图的最小生成树-Prim算法思想
  6. 图的最小生成树-Prim算法实现
  7. 图的最小生成树-Kruskal算法
  8. 图的拓扑排序思想
  9. 图的拓扑排序实现
  10. 图的关键路径思想
  11. 图的关键路径实现
  12. 图的单源最短路径-Dijkstra思想
  13. 图的单源最短路径-Dijkstra实现
  14. 贪心算法

八、查找

  1. 顺序查找
  2. 折半查找
  3. 二叉排序树的基本概念与查找
  4. 二叉排序树的插入与生成
  5. 二叉排序树的删除
  6. 哈希表基本概念
  7. 哈希函数
  8. 哈希处理冲突

九、排序

  1. 排序基本概念
  2. 直接插入排序
  3. 希尔排序
  4. 冒泡排序
  5. 快速排序
  6. 选择排序
  7. 树形排序
  8. 堆排序
  9. 归并排序
  10. 基数排序

prim算法_数据结构与算法相关推荐

  1. 循环首次适应算法_数据结构与算法之2——排序问题

    排序真的是数据结构与算法中的重中之重啊,无论是对编程能力的提升,以后工作后的应用,或者是应对面试的时候都是经常需要用到的.基本的几个经典排序一定要做到滚瓜烂熟,能够做到给你一个具体的排序算法题,一定能 ...

  2. 尚硅谷01 数据结构与算法_数据结构与算法介绍+稀疏数组

    数据结构与算法的关系 几个实际编程中遇到的问题 要想写出优秀的算法,首先应该能读懂别人写好的算法. 将生活中遇到的实际问题,使用程序来解决 线性结构和非线性结构 线性结构和非线性结构的关系: 数据结构 ...

  3. python数据结构算法_数据结构与算法(Python)

    数据结构与算法(Python) Why? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰 ...

  4. prim算法_数据结构与算法:图形结构

    ͼ 图形结构是一种比树形结构更复杂的非线性结构.在树形结构中,结点间具有分支层次关系,每一层上的结点只能和上一层中的至多一个结点相关,但可能和下一层的多个结点相关.而在图形结构中,任意两个结点之间都可 ...

  5. dijkstra 算法_数据结构与算法—单源最短路径dijkstra算法

    介绍 对于dijkstra算法,很多人可能感觉熟悉而又陌生,可能大部分人比较了解bfs和dfs,而对dijkstra和floyd算法可能知道大概是图论中的某个算法,但是可能不清楚其中的作用和原理,又或 ...

  6. mooc数据结构与算法python版期末测验_中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案...

    中国大学MOOC(慕课)_数据结构与算法Python版_测试题及答案 更多相关问题 采用fopen()函数打开文件,支持文件读取的参数有: [简答题]简单阐述高分子材料热-机械特征及成型加工的关系,并 ...

  7. 嵌入式团队培训_数据结构和算法概述

    嵌入式团队培训_数据结构与算法概述 要求:理解并记忆即可,会求解算法的时间复杂度 一:数据结构 1.逻辑结构: 2.物理结构 3.抽象数据类型 二:算法 1.算法的五个基本特征: 2.算法设计的要求 ...

  8. 获取用户列表为空_数据结构和算法(Golang实现)(15)常见数据结构-列表

    列表 一.列表 List 我们又经常听到 列表 List 数据结构,其实这只是更宏观的统称,表示存放数据的队列. 列表 List:存放数据,数据按顺序排列,可以依次入队和出队,有序号关系,可以取出某序 ...

  9. vrp 节约算法 c++_数据结构和算法(Golang实现)(8.1)基础知识-前言

    基础知识 学习数据结构和算法.我们要知道一些基础的知识. 一.什么是算法 算法(英文algorithm)这个词在中文里面博大精深,表示算账的方法,也可以表示运筹帷幄的计谋等.在计算机科技里,它表示什么 ...

最新文章

  1. 网站打开速度变慢可以从哪些方面进行分析呢?
  2. python方法查看_关于查看python的trace的方法
  3. 深入理解Java幂等性
  4. php网页轮播图,JavaScript_JavaScript实现图片轮播的方法,本文实例讲述了JavaScript实现图 - phpStudy...
  5. Bootstrap-CSS-代码
  6. keras笔记-模型保存以及tensorboard的使用
  7. dvm与art的区别_Android运行时– DVM与ART,AOT与JIT
  8. spring简易学习笔记三(AOP)
  9. 【物理应用】基于matlab车载自组织网络中路边性能及防碰撞算法研究【含Matlab源码 263期】
  10. 跨国企业在中国 | 葛兰素史克与阿里健康签署联合商业计划;上海迪士尼举办首届“国际美食趴”...
  11. 微信公众平台测试账号的获取及开发使用【微信开发学习】
  12. 软件工程师职业道德规范_看一下三个职业道德规范的最新更新
  13. FireMonkey 手机 APP 的手势
  14. GPU--图形处理器
  15. axios发送异步请求文件,并下载文件到本地
  16. mysql 日志表迁移通过存储过程从当前表迁移到历史表
  17. oracle的业务模块,Oracle 总帐模块会计师业务周期
  18. 亚马逊多名仓库员工抗议消毒不严,带头人称遭报复性解雇
  19. tgp英雄联盟无法连接服务器未响应,英雄联盟开局后未响应,lol为什么玩着就未响应了...
  20. 2018第九届环中国国际公路自行车赛落下帷幕

热门文章

  1. Linux系统编程——alarm函数
  2. php使用fpm fcgi模式,为所有PHP模式安装Ioncube Loader(CLI,CGI,FCGI和FPM)在Debian Wheezy...
  3. Android App开发入门 使用Android Studio 2.X开发环境 第2版pdf
  4. 生成Git ssh公钥和私钥(ppk)文件
  5. ros摄像头参数标定
  6. 关于opencv更改摄像头参数(帧率,分辨率,曝光度……)的几个问题
  7. python编程题搜题_2020年大学moocPython编程基础期末考试搜题公众号答案
  8. python开发工具PyCharm详细使用
  9. 视频教程-Excel高质量商务图表-Office/WPS
  10. 智慧职教云计算机文化基础,2020智慧职教云课堂计算机文化基础答案最新最全单元测试答案...