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

小王开始专业课的复习

    • 一、数据结构是什么
    • 二、数据结构中基本概念和术语
      • 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”表示

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

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

void exam ( float x[ ][ ]int m,int n){float sum [ ];forint i = 0; i < m; i++{sum[i] = 0.0;forint 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宝藏女孩的成长日记 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记 让这个可爱的宝藏女孩在努力的道路上与你一起同行! 如有转载,请注明出处(如不注明,盗者必究)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python gRPC测试helloworld

一、测试helloworld 1、在https://github.com/grpc/grpc 下载example 2、用cmd打开命令行&#xff0c;cd到helloworld的根目录 cd E:\pythoncode\gRPC\grpc-master\grpc-master\examples\python\helloworld 然后运行 python greeter_server.py 3、再用cmd打开另一个命令行…

k52zip shell band 流氓软件总是显示~

小王的烦恼问题Garbage解决办法解决一解决二解决三总结问题 &#xff08;我都不知道这流氓软件哪里来的&#xff0c;平时也就下点学习资料啥的&#xff09; 一打开电脑学习给我整蒙了下方工具栏左右两边平白无故整两条杠出来 电脑下方工具栏处右击——》点击工具栏——》取消勾…

Microsoft Visual Studio 无法启动程序“路径啪啦啪啦“. 系统找不到指定的文件。

遇到这个低级错误 点击出现 解决办法 我看了好久&#xff0c;心态都崩了&#xff0c;结果是我两个cpp文件都有main函数&#xff0c;注释掉一个main函数就行了。这种错误可不要再犯了&#xff0c;搞心态。

【Python】Windows下Python3虚拟环境搭建

我们知道python中&#xff0c;有些第三方库的包会有依赖关系&#xff0c;比如某天你想搭建django环境&#xff0c;它可能依赖某个package 2.0&#xff0c;然后过几天你又想要搭建其他环境&#xff0c;这时候可能它也需要同样的包&#xff0c;但是这个包的版本可能不需要那么高&…

pycharm+pyqt5配置

1、打开cmd输入pip3 install PyQt5 2、输入pip3 install PyQt5-tools -i https://pypi.doubanio.com/simple 3、打开pycharm。新建项目点击Setting--》Tools--> (1)添加Qtdesigner &#xff08;2&#xff09;添加PyUIC 4、点击 5、打开Qtdesigner。新建一个ui文件。保存在…

立志10天学会C++基础应用—day01

文章目录前言第一天感觉很实用的快捷键一、常识A01打印cHelloWorld.cppA02变量.cppA03常量.cppA04标识符命名规则.cppA05整型.cppA06sizeof的用法.cppA07实型.cppA08字符型.cppA09转义字符.cppA10字符串类型.cppA11布尔类型.cppA12数据的输入.cpp二、算术运算符A13算术运算符.c…

【Python】IDE环境Pycharm运行虚拟环境Django

上一篇文章我们通过举例介绍了如何安装RobotFramework虚拟环境&#xff0c;其实Django环境也可以通过相同办法安装 f: cd F:\python_env python -m venv Django_env F:\python_env\Django_env\Scripts activate pip install Django 这样我们就在虚拟环境下安装了Django&#x…

pycharm导入自己写的模块时,模块下方出现红色波浪线的解决方案

这种情况其实可以不用管&#xff0c;是可以正常运行的&#xff1b; 但是&#xff0c;如果看着不舒服&#xff0c;可以进行以下过程进行设置即可&#xff1a; file->settings->project->project structure->点击项目路径->点击Excluded。然后确定就正常显示了…

立志10天学会C++基础应用—day02 代码清晰易懂 涉及数据结构算法的知识 写完了~我也麻了

哈喽&#xff0c;很高兴又见面啦&#xff0c;一起加油一起学习&#xff0c;欢迎您的关注&#xff01;https://blog.csdn.net/hanhanwanghaha学习路上有您的关注是我的荣幸&#xff0c;一起进步是我的动力&#xff0c;明天也一起加油啊&#xff01; 以往链接 立志10天学会C基…

Python3导入自定义模块的3种方式

关于如何自定义一个模块&#xff0c;如果大家不懂的话还请先看下面这篇博文 ↓ http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318447437605e90206e261744c08630a836851f5183000) 模块是个好东西啊&#xff0c;大牛们开源共享许多…

Flask项目的部署详解

哈喽&#xff0c;很高兴又见面啦&#xff0c;一起加油一起学习&#xff0c;欢迎您的关注&#xff01;https://blog.csdn.net/hanhanwanghaha学习路上有您的关注是我的荣幸&#xff0c;一起进步是我的动力&#xff0c;明天也一起加油啊&#xff01; 目录宝塔更新Python版本apt安…

【Python】对象、类、元类

龟叔发明了Python&#xff0c;然后集成了一堆概念在这门语言里面&#xff0c;比如&#xff1a;迭代器&#xff0c;装饰器&#xff0c;函数&#xff0c;生成器&#xff0c;类&#xff0c;对象&#xff0c;协程等等。 这些概念对初学者似乎没一个好懂的&#xff0c;不过还有比这更…

JETBRAINS开发工具中Translation翻译插件的使用

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

【Python】pdfminer3k模块批量转换本地PDF文件

上一篇文章自己研究了一下如何批量将word或者ppt文件转换为PDF文件&#xff0c;但是有时候我们也想要将pdf文件转换为word或者txt文件&#xff0c;方便复制和处理。本文主要通过调用pdfminer3k模块进行处理。 说明&#xff1a;本文是在Windows10下使用python最新的3.6版本虚拟…

Python读写json文件的简单实现

转载自https://blog.csdn.net/vitaminc4/article/details/77985175 介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式&#xff0c;但是也使用了类似于C语言家族的习惯(包括C、C、Java、Ja…

Nacos配置

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

【Python】如何选择赋值和拷贝

在Python中&#xff0c;一切皆为对象&#xff0c;对象通过「变量名」引用&#xff0c;「变量名」更确切的叫法是「名字」&#xff0c;好比我们每个人都有自己的名字一样&#xff0c;我们通过名字来代指某个人&#xff0c;代码里面通过名字来指代某个对象。变量赋值就是给对象绑…

❤️震惊!人生苦短,我用python来玩田忌赛马❤️

一读标题笑死自己哈哈哈&#xff0c;最近猪哥&#xff08;玩得敲好的彭友&#xff09;找我帮忙解决他不会作业哈哈哈&#xff0c;他们公司自己出的笔试题哈哈哈&#xff0c;希望别被他们出题人看见哈哈哈&#xff0c;回想猪哥说的一句话&#xff0c;万一这就是以后你遇到的试题…

错误之data_insertt() takes 1 positional argument but 2 were given解决方法

1、首先检测函数与调用直接的参数是否匹配。 2、若为python环境。 函数定义如下&#xff1a; 调用如下&#xff1a; 显示如下错误&#xff1a; 解决方法&#xff1a;在函数定义时添加self。即为&#xff1a; 则问题解决。 这是一个很基本的&#xff0c;但是很严重的错误。只…

python将Unix时间戳转换成时间

将时间戳转换成时间 在时间戳转换成时间中&#xff0c;首先需要将时间戳转换成localtime&#xff0c;再转换成时间的具体格式&#xff1a; 利用localtime()函数将时间戳转化成localtime的格式利用strftime()函数重新格式化时间 #coding:UTF-8 import timetimestamp 15324990…