解学武 《数据结构概述》学习笔记1--数据结构与算法概述--19-10-10

一、数据结构

数据结构大致包含以下几种存储结构:

  • 线性表,还可细分为顺序表、链表、栈和队列;
  • 树结构,包括普通树,二叉树,线索二叉树等;
  • 图存储结构;

(一)线性表

有序,线性表并不是一种具体的存储结构,它包含顺序存储结构和链式存储结构,是顺序表和链表的统称。
1、顺序表
类似数组,但数组不属于数据结构范畴
2、链表
位置随机
使用链表存储数据时,是随用随申请,因此数据的存储位置是相互分离的,换句话说,数据的存储位置是随机的。
3、栈和队列
栈中的元素只能从线性表的一端进出(另一端封死),且要遵循“先入后出”的原则,即先进栈的元素后出栈。

队列中的元素只能从线性表的一端进,从另一端出,且要遵循“先入先出”的特点,即先进队列的元素也要先出队列。

(二)树存储结构

树存储结构适合存储具有“一对多”关系的数据。
解学武 《数据结构概述》学习笔记1--数据结构与算法概述--19-10-10_第1张图片

(三)图存储结构

图存储结构适合存储具有“多对多”关系的数据。
解学武 《数据结构概述》学习笔记1--数据结构与算法概述--19-10-10_第2张图片

二、算法

1、什么是算法
准确性,健壮性,效率性
效率:算法的运行时间【时间复杂度】、运行算法所需内存空间大小【空间复杂度】

在学习C语言的时候讲过,程序由三种结构构成:顺序结构、分支结构和循环结构。顺序结构和分支结构中的每段代码只运行一次;循环结构中的代码的运行时间要看循环的次数。

由于是估算算法的时间复杂度,相比而言,循环结构对算法的执行时间影响更大。所以,算法的时间复杂度,主要看算法中使用到的循环结构中代码循环的次数(称为“频度”)。次数越少,算法的时间复杂度越低。

例如:
a) ++x; s=0;
b) for (int i=1; i<=n; i++) { ++x; s+=x; }
c) for (int i=1; i<=n; i++) { for (int j=1; i<=n; j++) { ++x; s+=x; } }

上边这个例子中,a 代码的运行了 1 次,b 代码的运行了 n 次,c 代码运行了 n*n 次。

2、时间复杂度表示
O(频度)
单独时间复杂度
在这里插入图片描述
a、b、c总共的时间复杂度
解学武 《数据结构概述》学习笔记1--数据结构与算法概述--19-10-10_第3张图片
3、常用时间复杂度的排序
在这里插入图片描述
常数 对数 线性 平方 立方 指数

你可能感兴趣的:(数据结构读书笔记,数据结构与算法)