昨晚想看看高性能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