数据结构与算法笔记(王卓网课+教材+大话数据结构)
##最新整理!!!
顺序存储结构的线性表P10-P21

顺序线性表的代码实现
链式线性表笔记
串笔记

绪论、算法(P1-P9)1.4数据起源结构

数据结构是一门研究非数值计算之间的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科


学习进程:

1.4.1基本概念和术语

数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号合集。而这些符号必须包括两个前提:
(1) 可以输入到计算机中
(2) 能被计算机程序处理
像声音,图像,视频等是可以通过编码的手段变成字符数据来处理

1.4.2 数据元素

数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。Eg:在人类中,数据元素就是人!
数据项:一个数据项可以有若干个数据项组成。 Eg:人的眼、耳、鼻
注:数据项是数据不可分割的最小单位。
真正让讨论问题时,数据元素才是数据结构中间里数据模型的着眼点。

1.4.4数据对象

数据对象:是性质相同的数据元素的几何,是数据的子集。
1.4.5数据结构
数据结构:相互之间存在一种或多种特定关系的数据元素的集合。
研究数局结构的意义:为编写出一个“好”程序,必须分析待处理对象的特性及各处理对选哪个之间存在的关系。

1.5逻辑结构与物理结构

1.5.1逻辑结构

逻辑结构:指数据对象中数据元素之间的相互关系。

  1. 集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。
  2. 线性结构:线性结构中的数据之间是一对一的关系。
  3. 树形结构:一对多的层次关系
  4. 图形结构:多对多的关系
    在用示意图表示数据的逻辑结构时,要注意两点
  5. 将每一个数据元素看做一个结点,用圆圈表示
  6. 元素指甲的逻辑关系用节点之间的连线表示,如果这个关系是有方向的。那么用有箭头的连线表示

1.5.2物理结构

定义:指数据的逻辑结构在计算机中的存储形式
数据元素的存储结构形式:顺序存储、链式存储

  1. 顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
    2. 链式存储结构:当整个结构时刻处于变化中,顺序存储是不科学的。

则引出链式存储结构是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的也可以是不连续的。

注:
1.存储器主要是针对内存而言,像硬盘,软盘等外部存储器的数据结构组织通常用文件结构来描述。
2.如何存储数据元素之间的逻辑关系,是实现物理结构的重难点。

1.6抽象数据类型

1.6.1数据类型

:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称
在c语言中数据类型分为两类:

  • 原子类型:是不可以再分解的基本类型,包括整形、实型、字符型

  • 结构类型:由若干个类型组合而成,是可以再分解的。

Eg:整形数组由若干个整形组成

数据类型的作用:

  • 1.约束变量或常量的取值范围

  • 2.约束变量或常量的操作

1.6.2抽象数据类型(ADT)

:是指一个数学模型及定义在该模型上的一组操作

  • 1.从问题中抽象出数据模型(逻辑结构)
  • 2.定义在数据模型上的一组抽象运算
  • 3.不考虑计算机内的存储结构与运算的具体实现算法

定义抽象数据类型格式

ADT  抽象数据名{数据对象<数据对象的定义>数据关系<数据关系的定义>基本操作<基本操作的定义>
}ADT  抽象数据名
基本操作定义格式:基本操作名(参数表)初始条件(初始条件描述)操作结果(操作结构描述)

体现了程序设计中间问题分解、抽象和信息隐藏的特性。

##第二章 算法
第二章 算法

2.4算法定义

算法是解决待定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

简而言之:算法就是解决问题的方法和步骤

算法与程序

算法是解决问题的一个方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法。
程序使用某种程序设计语言对算法的具体实现

  •  程序 = 数据结构 + 算法
  •  数据结构通过算法实现操作
  •  算法根据数据结构设计程序

2.5算法特性

算法具有五个基本特性:输入、输出、有穷性、确定性、可行性

2.5.1输入输出

 一个算法有0个输入或多个输入
 算法至少有一个或多个输出

2.5.2有穷性

 指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间完成

2.5.3确定性

 算法的每一步骤都具有确定的含义,不会出现二义性

2.5.4可行性

     算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成

2.6算法设计的要求

2.6.1正确性

算法至少应该具有输入输出和加工处理无歧义性、能正确反映问题的需求,能够得到问题的正确答案。
算法的正确通常在用法上有很大的差别,大体为以下四个层次
  •  有没有语法错误
  •  对于合法的输入数据能够产生满足要求的输出结果
  •  对于非法的输入数据能够得出满足规格说明的结果
  •  对于精心选择的,甚至刁难的测试数据都有满足要求的输出结果

通常第三层意义上的作为衡量一个算法是否合格的标准

2.6.2可读性

算法设计的另一目的为了便于阅读、理解和交流

2.6.3健壮性

当输入数据不合法时。算法也能做出相关处理,而不是产生异常或莫名其妙的结果

算法分析

一个好的算法首先具备正确性,然后是健壮性可读性,在几个方面都满足的情况下主要考虑算法的效率,算法的效率主要通过以下两个方面来考虑:

  •  时间效率:算法所消耗的时间
  •  空间效率:算法执行过程中所耗费的存储空间
  •  时间效率和空间效率有时是冲突的

算法时间效率的度量

  **两种度量方法:**
  • 事后统计 将算法实现测算其时间和空间的开销。
    缺点:编写程序实现算法将花费较多的时间和精力;所得实验结果依赖于计算机的软硬件等环境因素,掩盖算法本身的优劣。

  • 事前分析
    对算法所消耗资源的一种估算方法。 ![每条语句执行一次所需的时间。一般是随机器而异的,取决于机器的指令性能,速度以及代码质量是由机器本身软硬件环境决定的。与算法无关。可以假设执行每条语句所需的时间均为单位时间。则算法的运算时间就为频度之和。

Eg:
循环条件语句比内部多判断一次才能退出循环

T(n) = 2n3+3n2+2n+1

为了便于比较不同算法的时间效率我们仅比较它们的数量级。

Eg: T(n) = 10n2 t(n) = 5n3

时间复杂度: 若有某个辅使得当n趋近于无穷极限值为不等于零的常数则称f(n)是T(n)的同数量级函数。记作T(n) = O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

算法时间复杂度的定义:

常见的分析算法时

分析算法时间复杂度的基本方法:

  •  找出语句频度最大的那条语句作为基本语句。
  •  计算基本语句的频度,得到问题规模n的某个函数。F(n)
  •  取其数量及用符号“O”表

最坏情况与平均情况:

引言:有的情况下,算法中基本操作重复执行的次数还随问题的输入数据集不同而不同

  •  最坏情况运行时间是一种保证,在应用中,这是一种最重要的需求,通常除非特别指定我们提到的运行时间,都是最坏情况的运行时间。

  •  平均运行时间是所有情况中最有意义的,因为它是期望的运行时间。很难通过分析得到,一般都是通过运行一定数量的实验数据后转出来。

  •  一般在没有特殊说明的情况下,都是指最坏时间复杂度

    对于复杂的算法,可以将它分成几个容易估算的部分,然后利用大O加法法则和乘法法则的计算算法的时间复杂度。

空间复杂度:

    算法所需存储空间的度量。记作:S(n) = O(f(n))

算法要占据的的空间:

  •  算法本身要占据的空间输入输出,指令,常数,变量等
  •  算法要使用的辅助空间。

对于辅助空间的理解:

后续会更新使用c语言和java版本的线性表代码实现。。。。。。。关注不迷路!

数据结构与算法笔记(王卓网课+教材+大话数据结构)相关推荐

  1. 数据结构与算法笔记(青岛大学王卓老师视频)

    写在前面的话: 因为在学习数据结构之前,学习过一年的算法,所以有一些基础,一些我觉得 没必要的代码或知识就没写上,记得多是一些知识点,写的可能对于别人来说 很难接受,望谅解.我学习算法是在Acwing ...

  2. 明翰数据结构与算法笔记V0.8(持续更新)

    文章目录 前言 数据结构 `线性表` `数组` `链表` `栈与队列` [串/字符串] 树 并查集 `二叉树` [二叉排序树/二叉搜索树] `红黑树` 红黑树操作 霍夫曼树 `堆` [大/小]根堆 可 ...

  3. 数据结构和算法 | 第一部分第二课:小鸭子们去旅行

    作者 谢恩铭,公众号「程序员联盟」. 转载请注明出处. 原文:https://www.jianshu.com/p/31d14bd080d4 内容简介 引出算法复杂度的故事 两种算法 两种算法的对比 第 ...

  4. 数据结构和算法 | 第一部分第一课:什么是数据结构和算法

    作者 谢恩铭,公众号「程序员联盟」. 转载请注明出处. 原文:https://www.jianshu.com/p/b2f23799a5bb 内容简介 前言 什么是算法 算法无处不在 计算机的" ...

  5. 数据结构与算法笔记 - 绪论

    数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...

  6. 数据结构与算法笔记(十六)—— 二叉搜索树

    一.二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: 若左子树不为空,则左子树上所有节点的 ...

  7. 数据结构与算法笔记(十五)—— 散列(哈希表)

    一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...

  8. JS数据结构与算法 笔记

    JS数据结构与算法笔记 前言:不定时更新说明 1. 栈(Stack) 1.1 基于数组实现栈 1.2 基于对象实现栈 1.3 基于链表实现栈 1.4 栈的简单应用 1.4.1 字符串中的括号匹配问题 ...

  9. 数据结构与算法基础-王卓

    文章预览: 数据结构与算法基础-王卓 第一章绪论 **1.1.1基本概念和术语** 数据 数据元素 数据项 数据对象 1.1.2基本概念和术语 1.数据结构解释 2.数据结构包括三方面内容 3.数据结 ...

最新文章

  1. 复习计算机网络基础 day8--传输层
  2. 【SSH之旅】一步学习的步Struts1相框(三):分析控制Struts1示例
  3. 数据库课程设计结论_结论
  4. wordpress后台外观没有菜单和小工具的解决方法
  5. 配置 SQL Server 2005 以允许远程连接(服务器端)
  6. tween.js 中文使用指南
  7. 将netcat-openbsd替换成为netcat-traditional
  8. 无机金属专业里有计算机课吗,无机非金属材料工程专业课程有不少
  9. Java并发编程实战-学习总结-第一篇(概括)
  10. 易飞ERP PLM集成 解决方案
  11. jira是干什么_JIRA是什么? | 学步园
  12. 服务器的所有网站共用443,多个ssl证书共用443端口apache
  13. VirtualBox:在linux宿主机和windows虚机间设置共享目录
  14. K-Means聚类算法原理及实现
  15. 甲醇合成技术的研究进展
  16. 日志分析之识别真假蜘蛛与处理办法
  17. 神经网络从产生到现在的发展历史--科普
  18. 夜神模拟器和安卓连接
  19. gromcas 分析NAMD轨迹文件dcd
  20. opencv——图片找不同

热门文章

  1. Spring Boot内嵌tomcat关于getServletContext().getRealPath获取得到临时路径的问题
  2. 访问学者申请信标准模版
  3. 一个 SAP 成都研究院开发工程师的2021年度总结:既没有厚积,也未能薄发
  4. 【IP地址冲突原因及其解决办法】
  5. easyExcel导出excel时指定列样式
  6. 19-20-1计算机网络quiz7
  7. 磁盘出现“位置不可用无法访问函数不正确”的解决方法
  8. 获取android手机语言和国家对应简码
  9. 2022北京最新水利水电安全员考试试题题库及答案
  10. NLP-筛选简历模型