数据结构综合笔记1——整体介绍和学习要求

笔者:司镜233
笔记介绍:

大多数的时候,我的自学之路以莫名其妙的缘由终止了。我希望这门数据结构,我能好好的预习、复习加总结。完完整整的把这个内容学会,并会做题,加以应用。

无论怎样,这个笔记的最大收益人是我。不过,我希望更多的人看到,也通过我的总结和视频学好数据结构,然后一起敲代码哈哈哈~~~

如果你喜欢这份笔记,或是觉得我的讲解或是总结的不错,那就左手一个点赞评论加关注,右手双击666。
关注我的微博“司镜233”,还可以第一时间知道我的最新动态,领取各种学习资料,我会尽量坚持录学习的视频,让自己一步一步成长的同时,也觉得自己学习的路上不是一个人。
如果有什么建议可以随时提出,在下面评论我就看得到哦~~如果可行,我就会改正的。

关于学习视频和这份笔记,我会发到b站和简书上。大家可以免费浏览和观看,如果经济允许且认为我讲的对你有帮助,可以赞助¥5.00哦,这是我给这门数据结构所有内容的定价~~~如果支付的话,记得备注下数据结构。

《数据结构综合笔记1——整体介绍和学习要求》 乾坤未定,你我皆是黑马.png

第1章 绪论

1.1什么是数据结构

1、基础要求:

1)C语言基础编程

2)数学:集合,矩阵(线性代数),最好还会一点离散数学,不会也没关系

2、计算机的四门基础课:数据结构(DS),计算机组成原理,计算机网络和操作系统(OS)

3、研究应用:AI(人工智能),BD(大数据),云计算

4核心:数据(Data)+结构(Structure关系)

数据结构具体指同一类数据元素中,各元素之间的相互关系,包括三个组成:

  1. 数据的逻辑结构、

  2. 数据的存储结构

  3. 数据运算结构。

5、编译软件:coldblocks,c-free,vc++,vs

1.2 基本概念和术语

1.2.1 数学概念

  1. 数据(Data):对客观事物的符号表示

  2. 数据元素(Data Element):数据的基本单位。ex,图中的一个圆圈,一个圆圈代表一条书目信息

  3. 数据项(data item):数据元素的组成部分,是不可分割的最小单位。ex,一条书目信息中包含书名、作者名、出版商等数据项。

  4. 数据对象(data object):性质相同的数据元素的集合,是数据的一个子集。ex,许多条书目信息组成一张表,这个书目信息表就是数据对象。

  5. 数据结构(data structure):相互之间存在一种或多种特定关系的数据元素的集合。(特定关系指的是逻辑结构)

定义:
Data Structure = (D,S)
D:数据集合
S:关系集合

结构:

  • 集合
  • 线性结构
  • 树形结构
  • 图状结构(网状结构)

1.2.2 计算机概念

  1. 逻辑结构:数据元素之间的逻辑关系,基本上是数学的描述
  2. 物理结构(存储结构):包括数据元素的表示和关系的表示,通常是表示如何存储数据。
  1. 位(bit):二进制数的一位
  2. 元素(element)/结点(node):由若干位组合起来的位串。数据元素在在计算机中的映像。
  3. 数据域(data field):当数据元素由若干数据项组成时,位串中对应于各个数据项的子位串
  1. 虚拟存储结构:虚拟处理器中表示的。ex,C语言作为一个执行C指令和C数据类型的虚拟处理器,在其上表示的数据结构就是虚拟存储结构

  2. 数据类型(data type****):值的集合和定义在这个集合上的一组操作的总称。ex,整型变量:值为整数,操作为加减乘除等算术运算

  3. 抽象数据类型(Abstract data type****,ADT****):一个数学模型,以及定义在该模型上的一组操作。

原子类型(atomic data type):变量值不可分解
固定聚合类型(fixed-aggregate data type):变量值由确定数目的成分按某种结构组成 可变聚合类型(variable-aggregate data type):构成可变聚合类型值的成分的数目不确定

定义:(D,S,P)
D:数据对象 S:关系集 P:对D的基本操作集‘’
格式:

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

  1. 多形数据类型(polymorphic data type):成分不确定的数据类型

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

在本笔记的所有算法,会以三种类型的代码表示:

一种是严蔚敏老师书上的,介于伪代码和C语言之间的类C语言;

一种是C语言,可以编译实现的;

一种是python语言,因为我常用的是python,所以在学习数据结构的时候,我也会用python实现一遍。

1.3.1 C语言

A. 语言介绍

C语言是一个强大的专业化编程语言

B. 起源

贝尔实验室,源于B语言

C. 语言特性

设计特性:自顶向下,结构化编程

1、高效性
2、可移植性
3、强大的功能和灵活性
4、面向编程人员

D. 应用领域

《数据结构综合笔记1——整体介绍和学习要求》 image.png

系统软件开发

操作系统:UNIX、Windows、Linux。

驱动程序:比如主板驱动、显卡驱动、摄像头驱动。驱动一般是用C语言和汇编语言写的,C++ 在这方面稍弱。

数据库:SQL Server、Oracle、MySQL、DB2。

应用软件开发

办公软件:WPS。

图形图像多媒体:Photoshop、Mediaplayer。

嵌入式软件开发:嵌入式软件开发说得简单点就是芯片编程,比如我们以后学习在单片机和 ARM 上进行的开发都属于嵌入式软件开发。

游戏开发:2D、3D 游戏。CS 整个游戏的引擎全部是用纯C写的。

C语言可以做网站。。

E. 代码举例

《数据结构综合笔记1——整体介绍和学习要求》 image.png

F. 基本语法

1、数据类型:

《数据结构综合笔记1——整体介绍和学习要求》 image.png

2、核心描述

《数据结构综合笔记1——整体介绍和学习要求》 image.png
《数据结构综合笔记1——整体介绍和学习要求》 image.png
《数据结构综合笔记1——整体介绍和学习要求》 image.png

3、编译器介绍和推荐

1)Dev-C++

Dev-C++ 是一个C++ 开发工具。它包括多页面窗口、工程编辑器,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序。它也提供高亮度语法显示的,以减少编辑错误。

Dev-C++是一个Windows下的C和C++程序的集成开发环境。http://www.shfdjk.com它使用MingW32/GCC编译器,遵循C/C++标准。开发环境包括多页面窗口、工程编辑器以及调试器等,在工程编辑器中集合了编辑器、编译器、连接程序和执行程序,提供高亮度语法显示的,以减少编辑错误,还有完善的调试功能,能够适合初学者与编程高手的不同需求,是学习C或C++的首选开发工具!

2)mingw

MinGW是Minimalist GNU onWindows的简称,是指只用自由软件来生成纯粹的Win32可执行文件的编译环境。

一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你生成本地的Windows程序而不需要第三方C运行库。实际上MinGW 并不是一个C/C++ 编译器,而是一套GNU工具集合。除开GCC (GNU 编译器集合)以外,MinGW 还包含有一些其他的GNU 程序开发工具(比如gawk bison 等等)。

开发 MinGW 是为了那些不喜欢工作在 Linux(FreeBSD)操作系统而留在Windows 的人提供一套符合GNU 的工作环境。总体说来,使用MinGW 就是GNU。

3)WIN-TC

初学C的一款比较好的软件,也是学习C的一款比较官方标准的软件

WIN-TC是一个turbo C2 WINDOWS平台开发工具,最大特点是支持中文界面,支持鼠标操作,程序段复制,为初学c语言、对高等编程环境不熟悉的同志们非常有帮助。

该软件使用turbo C2为内核,提供WINDOWS平台的开发界面,因此也就支持WINDOWS平台下的功能,例如剪切、复制、粘贴和查找替换等。而且在功能上也有它的独特特色例如语法加亮、C内嵌汇编、自定义扩展库的支持等。并提供一组相关辅助工具令你在编程过程中更加游刃有余,如虎添翼。

WIN-TC简繁双语版可以正常运行于98及其以上的简体及繁体WINDOWS操作系统上。

4)Cygwin

Cygwin是一个用于在Windows上模拟Linux环境的软件。它可以作为那些虚拟机软件的一个部分替代品。

运行Cygwin后,你会得到一个类似Linux的Shell环境,在其中你可以使用绝大部分Linux软件和功能。如Gcc,Make,Vim,Emacs等等。总之如果你想使用某个Linux下的功能,而windows上又找不到好的替代品的话,你就可以用Cygwin。

5)Microsoft Visual stdudio

Visual Studio(VS) 是一套非常完备的工具和服务,可帮助小伙伴为Microsoft 平台和其他平台创建各种各样的应用程序。Visual Studio 还可将您所有的项目、团队和利益干系人联系在一起。现在您的团队可以从任何位置以虚拟方式进行更为敏捷的合作,无论他们采用何种开发工具。

功能介绍

可以通过强大的集成开发环境构建面向 Windows、Android、iOS 以及 Web 的出色应用。使用任何 IDE 或编辑器在云中进行版本控制、敏捷、持续交付、应用程序分析协作。

适用于所有操作系统的编辑器使用可在 Windows、OS X 或 Linux 上运行的免费代码编辑器构建和调试现代 Web 和云应用程序。

6)CodeBlocks

codeblocks是一款功能强大的C/C++集成开发环境,软件支持应用程序的开发、也可以对现有的程序进行编译,在设计过程中,您可以随意调试软件,codeblocks带有调试的环境,可以自由控制对程序的调试、停止、生成并运行等,功能非常丰富;

codeblocks扩展性能非常强大,软件内置大量的开发插件程序,你可以直接在软件中进行连接下载,帮助您获得更高效、稳定、快捷的开发辅助程序,codeblocks新版在项目构建、可视化设计、调试、代码生成等方面都有巨大的提升,需要的小伙伴们可以下载体验。

1.3.2 python

安装和配置

系统:windows b站视频:https://www.bilibili.com/video/av40941700/

教程文案:https://www.jianshu.com/p/43f8d24603d5

1.3.3 计算机工作的基本原理

A、计算机组成

中央处理器(CPU):从内存中获取指令去执行

存储器:在计算机中,一切内容都是以数字形式存储的。

随机访问存储器(RAM)

永久存储器,一般指硬盘。

外围设备

B、低级语言和高级语言

低级语言

机器语言。必须用数字代码来表示这些指令中的每一个。

高级语言:如C

简化编程过程,更接近人类考虑问题的方式。

A + B = C

Return C;

编译器:让计算机理解高级语言,负责将人类编写的高级语言转化为详细的机器语言指令集的程序。

C、使用程序解决问题的步骤

  1. 定义程序目标:

a) 程序所需要的信息

b) 需要进行的计算和操作

c) 输出是什么

  1. 设计程序

a) 是否有输入

b) 如何表示数据

c) 用什么方法处理数据

d) 用户界面和输出

*用好的方式表示信息可以使程序设计和数据处理容易很多,这个方式就是数据结构中我们要学习的内容。

  1. 编写代码

a) 将程序设计解释为C语言

b) 添加文字注释

  1. 编译——一般通过编译器

a) 将源代码转化为可执行代码(本机语言或机器语言)

b) 检查程序是否为有效的C语言程序

  1. 运行程序

  2. 测试和调试程序

  3. 维护和修改程序

D、编程机制和环境

环境:UNIX, Linux, MS-DOS, Windows, Macintosh OS

1、编译过程

编译:

将源代码转换为中间代码。存放在一个目标代码文件。

中间代码:机器语言代码。

链接:

启动代码(start-up code):程序和操作系统之间的接口

库代码:库例程的代码

1.4 算法和算法分析

1.4.1 算法的特性

1、有穷性

2、确定性

3、可行性

4、输入

5、输出

1.4.2 算法的设计要求

1、正确性

2、可读性

3、健壮性

4、效率与低存储量需求

1.4.3 算法效率的度量

A、衡量方法:

1、事后统计的方法

2、事前分析估计的方法

取决的因素:

1)依据的算法选用何种策略。

2)问题的规模

3)书写程序的语言

4)编译程序产生的机器代码的质量

5)机器执行指令的速度

B、比较算法的时间:

算法由控制结构、原操作构成,所以也是由这些语句的执行时间来决定算法的效率。

通常做法是:基本操作重复执行的次数作为算法的时间量度

Ex:

上面这段算法的执行时间与基本操作重复的次数成正比:T(n) = O(n³)

C、渐进时间复杂度:Asymptotic Time Complexity

1、定义:一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法 的时间量度记作:

T(n) = O(f(n))

2****、频度:语句的频度是该语句重复执行的次数

[图片上传失败…(image-dbebfd-1548166318320)]

常数阶,对数阶,线性阶,平方阶,指数阶

3、如何选择基本操作?

1)考虑一种主要的

2)同时考虑几种基本操作,然后相加

3)同时考虑几种基本操作,对不同的操作赋予不同的权值(反应其相对时间)

  1. 缺点:

考虑的只是问题的规模n的增长率

实际应用中,往往把事前分析和事后统计合起来用

1.4.4 算法的存储空间需求

A、空间复杂度:

S(n) = O(f(n))

1、存储内容:指令、常数、变量、输入数据、工作单元(对数据进行操作的)、和辅助空间(存储一些为实现计算所需的信息)

原地工作:额外空间相对于输入数据量来说是常数

额外空间:除输入和程序之外的额外空间。

2、情况分类:

a) 输入数据所占的空间只取决于问题本身,和算法无关——只分析额外空间

b) ………. 有关——本身所需空间+额外空间

c) 所占空间依赖于特定的输入——一般按照最坏的情况来分析。

24种排序算法的效率比较(视频):https://www.bilibili.com/video/av14429343

    原文作者:司镜233
    原文地址: https://www.jianshu.com/p/0f41a1617612
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞