小王开始专业课的复习

  • 一、数据结构是什么
  • 二、数据结构中基本概念和术语
    • 2.1数据结构的概念
    • 2.2按照不同功能划分逻辑结构
    • 2.3存储结构中重点
    • 顺序存储举例
    • 链式存储举例
  • 三、抽象数据类型的表示与实现
    • 3.1数据类型
    • 3.2抽象数据类型 (ADTs: AbstractData Types)
    • 3.3算法分析(重点)
      • 1. 时间复杂度
      • 2. 空间复杂度

复习数据结构正式开始!

一、数据结构是什么

数据结构是介于数学、计算机软件与计算机硬件的一门核心课程。程序=算法+数据结构(N.沃斯提出)

二、数据结构中基本概念和术语

  1. 数据(data):—所有能输入到计算机中去的描述客观事物的符号
    —数值性数据
    —非数值性数据(多媒体信息处理,例如视频、图形等)
  2. 数据元素(data element):—数据的基本单位,也称结点(node)或记录(record)
  3. 数据项(data item):—有独立含义的数据最小单位,也称域(field)
  4. 数据对象**(Data Object):相同特性数据元素的集合,是数据的一个子集

2.1数据结构的概念

数据结构(Data Structure):是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是带“结构”的数据元素的集合,“结构”就是指数据元素之间存在的关系。

数据结构包括 2+1(两个层次和一个操作)
逻辑结构(唯一):数据元素间抽象化的相互关系,与数据的存储无关,独立于计算机,它是从具体问题抽象出来的数学模型。(如集合、线性、树形、图形)
存储结构(物理结构)(不唯一):数据元素及其关系在计算机存储器中的存储方式。(如顺序(关键词:连续)、链式(关键词:指针)、索引(关键词:逻辑指针清单)、散列/哈希(关键词:地址 ;一般来说效率最高))
操作(运算、行为):执行不同功能的算法

2.2按照不同功能划分逻辑结构

  1. 划分方法一
    线性结构----
    有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前趋和一个后
    继。
    例如:线性表、栈、队列、串
    非线性结构----
    一个结点可能有多个直接前趋和直接后继。
    例如:树、图
  2. 划分方法二
    集合——数据元素间除“同属于一个集合”外,无其它关系(换言之,数据与数据之间没有关系)
    线性结构—— 一个对一个,如线性表、栈、队列
    树形结构—— 一个对多个,如树
    图形结构—— 多个对多个,如图

2.3存储结构中重点

顺序存储举例

链式存储举例

欢迎关注:https://blog.csdn.net/hanhanwanghaha
这个可爱的宝藏女孩

三、抽象数据类型的表示与实现

3.1数据类型

定义:在一种程序设计语言中,变量所具有的数据种类

例如C 语言:
基本数据类型: char int float double void
构造数据类型:数组、结构体、共用体、文件
数据类型是一组性质相同的值的集合, 以及定义于这个集合上的一组运算的总称

3.2抽象数据类型 (ADTs: AbstractData Types)

(也称增广数据类型)

—更高层次的数据抽象
—由用户定义,用以表示应用问题的数据模型
—由基本的数据类型组成, 并包括一组相关的操作

常用格式

3.3算法分析(重点)

算法定义

一个有穷的指令集,这些指令为解决某一特定任务规定了一个运算序列
(注意:提到指令集、序列集、描述集都是算法的定义)

算法的特性
输入:有 0 个或多个输入(可以不输入,系统自动生成)
输出:有一个或多个输出(处理结果)
确定性:每步定义都是确切、无歧义的
有穷性:算法应在执行有穷步后结束
有效性(可执行性):每一条运算应足够基本

算法设计的评价及要求
正确性
可读性
健壮性(不能稍微碰下就不能运行了)
高效性(时间和空间)

算法的度量

1. 时间复杂度

一般情况下,算法中基本操作重复执行的时间是问题规模 n 的某个函数 f(n),算法
执行的时间的增长率和 f(n)的增长率相同,称渐近时间复杂度。
时间复杂度的表示方法有两种:
方法 1:大 O 法
T(n) = O(f(n))

它表示随问题规模 n 的增大,算法执行时间的增长率和 f(n)的增长率相同,称作算
法的渐进时间复杂度,简称时间复杂度。
方法 2:语句频度法
计算该语句重复执行的次数,又叫频度统计法。

n*n阶矩阵加法

for( i = 0; i < n; i++)for( j = 0; j < n; j++)c[i][j] = a[i][j] + b[i][j];
语句的频度(Frequency Count ): 重复执行的次数:n*n;T(n)= O(n^2)
即:矩阵加法的运算量和问题的规模 n 的平方是同一个量级

分析算法时间复杂度的基本方法
找出语句频度最大的那条语句作为基本语句
计算基本语句的频度得到问题规模 n 的某个函数 f(n)
取其数量级用符号“O”表示

for ( int i = 0; i < n; i++ )for ( int j = 0; j < n; j++ )y ++;
f(n)=n2T(n)= O(n2)

时间复杂度是由嵌套最深层语句的频度决定的

void exam ( float x[ ][ ],int m,int n){float sum [ ];for ( int i = 0; i < m; i++ ) {sum[i] = 0.0;for (int j = 0; j < n; j++) f(n)=m*nsum[i] += x[i][j];
}
for ( i = 0; i < m; i++ )cout << i << “ : ” <<sum [i] << endl;
}T(n) = O(m*n)

O(1)<O(logn)< O(n)< O(nlogn) <O(n^2) <O(n^3)< O(n^5)< O(2^n)< O(n!)
随着 n 值的增大,增长速度各不相同,n 足够大时,存在下列关系:
对数函数<幂函数<指数函数<阶乘

so 尽量少用指数阶的算法

关于时间复杂度的运用,记得我以前发过相关的文章:(用python写的)https://blog.csdn.net/hanhanwanghaha/article/details/107886355

2. 空间复杂度

三个组成部分:

  1. 存储算法本身所占用的空间
  2. 算法在运行过程中临时占用的辅助空间
  3. 算法的输入/输出数据占用的空间

原地工作:算法在执行过程中,辅助空间是不变的,叫原地工作。

数据结构已经走了第一步,明天再复习。干高数去!

https://blog.csdn.net/hanhanwanghaha宝藏女孩的成长日记 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请注明出处(如不注明,盗者必究)

学习《数据结构》要爬的第一步梯子相关推荐

  1. 学习和使用UE4的第一步——安装和介绍Epic Games客户端和虚幻引擎

    学习和使用UE4的第一步--安装和介绍Epic Games客户端和虚幻引擎 1 安装Epic Games客户端 2 打开Epic Games客户端 3 Epic Games客户端介绍 4 安装虚幻引擎 ...

  2. [2014年学习计划之RoR系列] 第一步 - 搭建开发环境

    千里之行始于足下.昨天下午开始我迈出了RoR学习的第一步 - 搭建Ruby on Rails环境. 我现在的主要开发环境是ASP.NET,所以想在Windows上搭建RoR的开发环境.在网上浏览一番, ...

  3. linux 0.11 内核学习 -- bootsect.s, 万里长征第一步

    呵呵,终于将linux 0.11 下面的boot文件夹下的三个文件读完,下面是相关注释,没有汇编基础的人也是可以读的.废话少说,下面就是linux的源码了. 参考资料 Linux内核完全注释.pdf ...

  4. 学习面向对象的Javascript的第一步就是要搞清楚两个东西:原型链和作用域链

    前言 JavaScript 不包含传统的类继承模型,而是使用 prototypal 原型模型. 虽然这经常被当作是 JavaScript 的缺点被提及,其实基于原型的继承模型比传统的类继承还要强大.实 ...

  5. 时间复杂度计算超全整理!!(数据结构和算法的第一步

    目录 1. 什么是数据结构? 1.1 数据结构和数据库的区别 1.1.1磁盘的特点: 2.什么是算法? 3.算法效率 3.1 如何衡量一个算法的好坏 4.时间复杂度 4.1 时间复杂度的概念 4.2 ...

  6. python画图模块_学习python画图模块plotnine:第一步安装

    官网链接 https://plotnine.readthedocs.io/en/stable/index.html 知乎介绍的文章 https://zhuanlan.zhihu.com/p/47814 ...

  7. 架构师的第一步:学习两种抽象视角(Abstraction View)

    [ IT史上最完整.最经典的软件框架开发技术宝典 (上百篇经典文章&eBooks) ] ee                                                   ...

  8. python安装包_迈出Python学习第一步:Python开发环境的下载与安装

    所谓"磨刀不误砍柴工"."工欲善其事,必先利其器",都在告诉我们一个道理:要做好一个事情,事先做好充分的准备工作是非常重要的.所以在我们正式学习用Python编 ...

  9. 程序员失业第一步?斯坦福研究员用AI从编译器反馈中学习改Bug

    来源:AI科技评论 本文约2700字,建议阅读10分钟 本文介绍了来自斯坦福大学的两位研究员研究了如何使用AI来自动修复程序,以期未来程序修复自动化可以大大提高编程和学习编程的效率. 众所周知,程序员 ...

最新文章

  1. redis源码分析--zslRandomLevel位运算解析
  2. 缓存伪静态html,伪静态缓存(整站静态化)
  3. “重金求来”Alibaba技术官并发编程笔记,附赠复习资料
  4. [改善Java代码]不要主动进行垃圾回收
  5. WinForm 程序的界面多语言切换
  6. 五万块钱买什么车好_10万预算买什么车好?看空间、动力和配置
  7. Spring MVC和Spring Boot的概念以及比较
  8. mes建设指南_给予和接受建设性批评的设计师指南
  9. excel高级筛选怎么用_excel中使用高级筛选7个示例、多个条件、复制到另一个工作表公式...
  10. 一位 90 后程序员的自述:如何从年薪 3W 到 30W
  11. Iframe和Frame中实现cookie跨域的方法(转载)
  12. 中国数字电视视频信号基本参数
  13. FastReport浏览器直接打印无须预览(2023终版)
  14. 三菱plc pwm指令_【三菱PLC指令教程】定时器指令应用之时序图编程法(一)
  15. 《python网络数据采集》读书笔记
  16. 爬虫基础回顾-requests
  17. malloc、calloc、realloc
  18. PrimeNG之FileUpload
  19. 怎样更换手机壁纸?2022更换手机壁纸软件大全
  20. linux 安装软件出现:“E:无法定位软件包”

热门文章

  1. 树叶贴画机器人_洪山广场举办“落叶节”,树叶树枝拼贴出冬日风景
  2. java spark wordcount_提交任务到spark(以wordcount为例)
  3. 自学java去哪找工作比较好_如何自学java?什么程度可以找工作?
  4. c语言中foreach的用法,详解JavaScript中的forEach()方法的使用
  5. osgi框架 android,基于OSGi的Android应用模块动态加载框架设计与实现
  6. jmeter修改redis_jmeter如何访问redis服务缓存
  7. mac地址转换_mac电脑格式转化工具
  8. 数据生态mysql_数据生态:MySQL复制技术与生产实践
  9. harmonyos公测招募,nova为主 HarmonyOS 2.0开发者Beta公测再招募
  10. python 子线程返回值_python-从线程返回值