数据结构学习第一天

昨晚想看看高性能mysql,但是发现数据结构是绕不开的,所以是得好好学学数据结构了,选了一本入门教材《大话数据结构》,就当做读书笔记提炼精华了,今天是第一天,看看能坚持多久。

 

第一章 绪论

 

一、基本概念和术语

数据:描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。

数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理,也称为记录。

数据项:一个数据元素可由若干数据项组成。数据项是数据不可分割的最小单位。

数据对象:性质相同的数据元素的集合。

数据结构:相互之间存在一种或多种特定关系的数据元素的集合。

 

二、逻辑结构和物理结构

逻辑结构:数据对象中数据元素之间的相互关系,分为四种,集合,树形,线型,图形

物理结构:数据的逻辑结构在计算机中的存储形式,分为以下几种

1、顺序存储结构,是把数据元素顺序的放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一样的。

2、链式存储结构,是把数据元素放在任意的存储单元中,这组存储单元可以是连续的,也可以不是连续的。

 

第二章 算法

一、定义

算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。

 

算法的特性:输入、输出、有穷性、确定性、可行性。

 

判断一个算法的效率时,函数中的常数和其他次要项可以忽略,而更应该关注主项(最高阶项)的阶数。

 

算法时间复杂度:

在进行算法分析时,语句的总执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n)=O(f(n)),它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数

 

推倒大O阶的方法:

1、用常数取1代运行时间中的所有加法常数

2、在修改后的运行次数函数中,只保留最高阶项

3、如果最高阶存在且不是1,则取出与这个项相乘的常数

得到的结果就是大O阶

 

那么,就会产生三种阶:常数阶,线性阶,指数阶

常数阶:时间复杂度是O(1)

线性阶:循环结构会复杂很多,要确定某个算法的阶数,我们常常需要确定某个特定语句或某个语句集运行的次数,因此关键就是要分析循环结构的运行情况

 

第三章 线性表

零个或多个数据元素的优先序列,叫线性表。第一它是有序的,第二它是有限的。

存储器中每个存储单元都是有编号的,这个编号称为地址。

1、顺序存储结构的插入和删除

插入算法的思路:

(1)如果插入位置不合理,抛出异常

(2)如果线性表长度大于等于数组长度,则抛出异常或者动态扩容

(3)从最后一个位置开始,向前遍历到第i个位置,分别将他们都向后移动一个位置

(4)插入到第i个位置

(5)数组长度加1

 

你可能感兴趣的:(数据结构)