《数据结构》笔记之绪论

前言

身为半路出家的小工一枚,于数据结构和算法颇有压力,去年在水哥的建议下开始学习这一块的内容。奈何后来因工作原因,一直无法对所学的东西付诸实践,渐而忘之。近日一直在专攻设计模式,想起这2块内容又是大厂必备的知识,缺一不可,所以又把去年的书《数据结构——Java语言描述(第2版)》拿了出来,准备再复习一次,并将所学进行总结。


绪论

数据结构的基本概念

数据和数据元素

数据:是人们利用文字符号、数学符号以及其他规定的符号对现实世界的事物及其活动所做的抽象描述。

数据元素:表示一个事物的一组数据。

数据项:构成数据元素的数据。

抽象数据元素:没有实际意义的数据元素。

以下面的代码来具体说明

public class User {
    private String mUserName;
    private int mUserId;
    private String mUserAddress;
}

上述中User类中的每个属性就是数据项,所有的属性集合就是数据元素。


数据的逻辑结构

数据的逻辑结构:数据元素之间的相互联系方式。
分类:线性结构、树状结构和图结构。

  • 线性结构

一般定义:除第一个和最后一个数据元素外,每个数据元素只有一个前驱数据元素和一个后继数据元素。

  • 树状结构

一般定义:除根节点外,每个数据元素只有一个前驱数据元素,可有零个或若干个后继数据元素。

  • 图结构

一般定义:每个数据元素可有零个或若干个前驱数据元素和零个或若干个后继数据元素。


数据的存储结构

任何需要计算机进行管理和处理的数据元素都必须首先按某种方式存储在计算机中。数据元素在计算机中的存储方式称为数据的存储结构

分类:顺序存储结构,链式存储结构。

顺序存储结构

是把数据元素存储在一块连续地址空间的内存中,程序设计方法是使用数组

特点:逻辑上相邻的数据元素在物理上(内存存储位置上)也相邻,数据间的逻辑关系表现在数据元素的存储位置关系上。

指针是指向一个内存单元的地址。一个数据元素和一个指针称为一个节点

链式存储结构

使用指针吧相互直接关联的节点(即直接前驱几点或者直接后继节点)链接起来。Java用一个对象的对象引用来实现指针。

特点:逻辑上相邻的数据元素在物理上不一定相邻,数据间的逻辑关系表现在节点的链接关系上。

数据的操作

对一种类型的数据进行的某种方法的处理称作数据的操作,一种类型的数据所有的操作集合称作数据的操作集合

其他

顺序存储结构和链式存储结构只是最基本、最常用的两种结构。除此之外还可以通过二者的组合实现一些复杂的存储结构。
针对上面所说的逻辑关系,以简单的数组(顺序存储结构)来说明,链式的自行脑补:):

int[]numbers={1,2,3}

所谓的“数据间的逻辑关系表现在数据元素的存储位置关系上”就是说,数据1,2,3在数组int[]numbers中的先后顺序表现在他们在内存中存储的先后顺序位置,换句话就是在数组int[]numbers中2在1和3的附近,体现在内存中2的存储位置前后就是1和3的存储位置。


抽象数据类型

类型是一组值得集合。

数据类型是指一个类型和定义在这个类型上的操作集合。

抽象数据类型(Abstract Data Type,ADT)是指一个逻辑概念上的类型和这个类型上的操作集合。

数据类型指的是高级程序设计语言支持的基本数据类型,而抽象数据类型指的是在基本数据类型支持下用户新设计的数据类型。


算法和算法的时间复杂度

算法

定义:算法是描述求解问题方法的操作步骤集合。

表示方法

  • 文字形式:是用中文或英文这样的文字来描述算法。
  • 伪码形式:是用一种仿程序设计语言的语言来描述算法。
  • 程序设计语言形式:是用某种程序语言描述算法。
算法的性质
  • 输入性:具有零个或若干个输入量;
  • 输出型:至少产生一个输出或者执行一个有意义操作;
  • 有限性:执行语句的序列是有限的;
  • 确定性:每一条语句的含义明确,无二义性;
  • 可执行性:每一条语句都应该在有限的时间内完成。
算法设计目标
  • 正确性
  • 可读性
  • 健壮性
  • 高时间效率
  • 高空间效率
算法的时间复杂度分析

表示算法的时间效率与算法所处理的数据元素个数n函数关系的最常用的函数是O()函数(O()读作大O)

定义

算法的时间复杂度主要和两个因素有关:

  1. 算法中的最大嵌套环数;
  2. 最大嵌套循环结构中每重循环的循环次数。
算法的空间复杂度分析

算法的空间复杂度分析主要是分析算法在运行时所需要的内存空间的数量级。通常也是采用O()函数。

其他

程序和算法的唯一区别就是程序允许无限循环,二算法不允许无限循环。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值