[考研系列之数据结构]数据结构概述

1.脑图

2.数据结构

2.1 抽象数据类型

表示法:

(D,S,P)

D:数据对象

S:D上的关系集

P:对D的基本操作集

ADT格式

ADT 抽象数据类型名{

数据对象:<数据对象定义>

数据关系:<数据对象的定义>

基本操作:<基本操作的定义>

}ADT 抽象数据类型名

基本操作的格式:

基本操作名(参数表)

初始条件:<初始条件描述>

操作结构:<操作结果描述>

2.2 分类

2.2.1 按值的不同特性

原子类型的值是不能分解的,如C中基本数据类型

结构类型的值是可分解的,是由结构类型和原子类型聚合成的

而结构类型中按照值的成分是不是可变又分成:固定聚合类型&可变聚合类型

固定聚合类型如复数,它是由<a,b>两个实数组成

可变聚合类型如字符串,它是由n个char类型字符组成

2.2.2 按数据元素之间表示

顺序映像就如同数组,是一块连续的空间,由头指针和尾指针就可以指定这段空间

非顺序映像如同链表,是n块不连续空间,每块空间有一个指针指向下一个空间(也有双向指针)

2.2.3 按前驱后继分类

首先,我们看看什么是前驱后继

前驱:某数据元素在此数据类型中的上一个数据元素

后继:某数据元素在此数据类型中的下一个数据元素

如果一个数据类型中所有数据元素没有前驱也没有后继,那么每个元素之间就没没有关联,这种结构称之为集合;

如果每个元素都有一个前驱和一个后继(其实这么说不对,因为第一个元素没有前驱,最后一个元素没有后继),那么他们就形成了一个线性的结构,称之为线性表

再如果每个元素都有一个前驱,但是有多个后继(这么说也不对,因为第一个元素是没有前驱,而叶子节点是没有后继),那么他们就成了一个树

最后,n个前驱n个后继的话,就形成了图。

我们的数据结构主要就是以前驱后继的形式去分类学习的,再辅以顺序映像和非顺序映像的表示就衍生了更多的数据结构,这个接下来会逐步讲述。

3.算法

3.1 什么是算法?

算法是对特定问题求解的步骤的描述是指令的有限序列

3.2 算法的5个重要特征

[1] 有穷性

两点含义:

(1) 算法必须是在有穷步后结束,如无限循环就不是有穷的。

(2) 每步算法必须是在有穷时间内完成

[2] 确定性

两点含义:

(1) 每一条指令都不能有二义性

(2) 相同的输入只能有相同的输出

[3] 可行性

算法中描述的操作都能通过有限次基本运算实现

[4] 输入

一个算法有0个以上输入

[5] 输出

一个算法有1个以上输出

3.3 算法设计的要求:

[1] 正确性

四个层次:

a.不含语法错误

b.对于几组输入的输出正确

c.程序对于精心选择的输入能得出正确的输出

d.程序对于一切合法输入都有正确的输出

[2] 可读性

算法代码可被人阅读

[3] 健壮性

代码在面对异常时处理

[4] 效率与低储存量需求

算法的时间和空间代价

3.4 算法复杂度

算法的效率从耗费的时间和空间上划分:

[1] 时间复杂度

时间复杂度一般使用大O表示法,它表示算法的时间效率的下限,按照函数增长趋势又分为常量阶、线性阶、平方阶、对数阶、指数阶(算法的效率逐渐降低,复杂度逐渐升高)。

[2] 空间复杂度

指的是算法运行期间占用的内存大小,一般也用大O表示法表示最差情况。

[考研系列之数据结构]数据结构概述

时间: 2024-11-02 23:34:47

[考研系列之数据结构]数据结构概述的相关文章

[考研系列之数据结构]线性表概述

1.脑图 2.表示方法 按照数据结构概述所说,线性表有两种表示方法分别是顺序表示和链式表示,链表就是链式表示的典型. 我们知道链式表示是分配了n块内存空间,可以认为彼此不连续,所以不能用偏移量去定位每个元素. 下面就先说最简单的单向链表: 如果每个数据元素能有一个指针指向下一个元素的话,那么只需要知道第一个数据元素就能一个一个的遍历整个链表了,这就是单向链表. 对于每个链表元素我们称之为节点,每个节点都有两个域:数据域&指针域 数据域就是数据元素所在的区域,而指针域则是存储指向另一个节点的指针的

[考研系列之数据结构]线性表之链表

1.链表分类 通过线性表概述,我们知道了链表这样一种数据结构,它又分成三类,分别是 单向链表 循环链表 双向链表 单向链表 单向链表的指针域只有一个指向下一个节点的指针,需要注意几点: 1.头指针--指向第一个节点 2.最后一个结点的指针指向NULL 3.头结点--在链表的第一个结点之前附设一个结点,它的数据域为空 所以,我们看到:  单向链表为空的<=>链表有且只有一个头结点<=>头结点的指针指向NULL 循环链表 循环链表和单向链表最大的不同就是:最后一个结点的指针不再指向NU

[考研系列之数据结构]线性表之队列

基本概念 队列的定义 队列是一种只能在表的一头插入,另一头删除的线性表,简而言之具有FIFO的特性 组成 队头 队尾 扩展 双端队列 只能在两端进行删除插入操作的线性表 实现 链队列 顺序队列 循环队列 循环队列 循环队列是将顺序队列臆造成一个环,如图 循环队列有以下参数 front 指向队头的指针 rear 指向队尾的指针 SIZE 循环最大队列长度 对于循环队列,初始状态的时候 front=rear=0; 每次insert的时候 Insert((front++)%SIZE); 那么,当循环队

[考研系列之数据结构]线性表之栈

?基本概念 栈的定义 限定仅在表尾进行插入或删除的线性表 组成 栈顶 栈底 基本操作 入栈(PUSH) 往栈中插入一个元素 弹栈(POP) 从栈顶删除一个元素 栈的表示 顺序栈 链栈 对于顺序栈,有两个指针base和top base指向栈底 top指向栈顶 对于栈的一些基本情况: 栈不存在时候 base=NULL 栈为空时  top=base 栈的长度 top-base 链栈略过. 栈的应用 1 数制转换 数制转换我们使用一种称之为"辗转相除法"的算法.此算法的基本原理基于: N=(N

[考研系列之数据结构]线性表之字符串

基本概念 串(字符串)  由0个或多个字符组成的有限序列,例如s="hello world" 串名  上例中的s 子串  某串任意连续字符组成的子序列,称为此字符串的子串 空串  0个字符的串,s="" 空格串  由一个或多个字符组成的串 模式匹配算法 作用 定位某子串T在字符串S中的位置 主串 S 模式串  T 针对模式匹配算法从简到难我们需要了解两种算法: [1] 朴素的模式匹配算法 [2] KMP匹配算法 朴素的模式匹配算法: 所谓朴素就是简单,这是一种简单的

【未完成】《统计机器翻译》读书笔记:系列0,全书概述与个人总结

说明:本系列文章是本人在阅读统计机器翻译后所做的个人读书笔记,会按照每一章的顺序来按章详细叙述内容总结和习题解答. 系列0:全书概述与个人总结 本书是大牛Philipp Koehn的作品,他是开源项目Moses项目的领导者,具体可以去www.statmt.org/moses/查看,我也会在未来的半个月写一些有关Moses学习的博文. 本书分为三个部分:基础知识(介绍机器翻译需要语言学的基础.概率论的基础).核心方法(基于词的翻译模型.基于短语的翻译模型.解码decoding).前沿研究 在绪论部

深入剖析Redis系列(四) - Redis数据结构与全局命令概述

前言 Redis 提供了 5 种数据结构.理解每种数据结构的特点,对于 Redis 的 开发运维 非常重要,同时掌握 Redis 的 单线程命令处理 机制,会使 数据结构 和 命令 的选择事半功倍. 接下来的几篇文章,将从如下几个方面介绍 Redis 的几种数据结构,命令使用及其应用场景. 预备知识:几个简单的 全局命令,数据结构 和 内部编码,单线程命令 处理机制分析. 数据结构特性:5 种 数据结构 的特点.命令使用.应用场景. 数据管理:键管理.遍历键.数据库管理. 正文 1. 预备知识

深入剖析Redis系列:Redis数据结构与全局命令概述

前言 Redis 提供了 5 种数据结构.理解每种数据结构的特点,对于 Redis 的 开发运维 非常重要,同时掌握 Redis 的 单线程命令处理 机制,会使 数据结构 和 命令 的选择事半功倍. 接下来的几篇文章,将从如下几个方面介绍 Redis 的几种数据结构,命令使用及其应用场景. 预备知识:几个简单的 全局命令,数据结构 和 内部编码,单线程命令 处理机制分析. 数据结构特性:5 种 数据结构 的特点.命令使用.应用场景. 数据管理:键管理.遍历键.数据库管理. 正文 1. 预备知识

考研系列之三-数据结构杂集

1.线性表顺序表倒置算法: int len=strlen(l); int i=0; while(i<len/2){ int tmp=l[i]; l[i]=l[len-i-1]; l[len-i-1]=tmp; } 2.画二叉排序树 每次与子树根节点比较,从而向下左右选择移动,左小右大. 中序遍历可得到有序序列. 3.线索二叉树 1)  扩展结点结构,增加两个标志域,以记录左右孩子域记录的为孩子还是前驱后继.标志域为0,表示指示孩子:为1,表示指示前驱后继.另外,增设一头结点,其数据域不存储数据,