赞
踩
空间复杂度S(n):程序执行时占用存储单元的长度。
时间复杂度T(n):程序执行时耗费时间的长度。
在分析一般算法的效率时,常关注以下两种复杂度
1)最坏情况复杂度
T
w
o
r
s
e
(
n
)
Tworse(n)
Tworse(n)
2)平均复杂度
T
a
v
g
(
n
)
Tavg(n)
Tavg(n)
1)什么是线性表
由同类型数据元素构成有序序列的线性结构
表中元素个数成为线性表的长度
线性表没有元素时,称为空表
表起始位置称为表头,结束位置称为表尾
2)什么是广义线性表
广义表是线性表的推广
对于线性表而言,n个元素都是基本的单元
广义表中,这些元素不仅可以是单元素也可以是另一个广义表
3) 什么是多重链表
多重链表:链表中的节点可能同时隶属于多个链
一、什么是数组、链表
数组和链表是两种不同的基本数据结构,它们在内存存储上的表现不一样,所以也有各自的特点。
1、数组
数组是一组具有相同数据类型的变量的集合,这些变量称之为集合的元素;
每个元素都有一个编号,称之为下标,可以通过下标来区别并访问数组元素,数组元素的个数叫做数据的长度;
2、链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的
链表的特性是在中间任意位置插入和删除元素都非常快,不需要移动其它元素
对于单向链表而言,链表中的每一个元素都要保存一个指向下一个元素的指针
对于双向链表而言,链表中的每个元素既要保存指向下一个元素的指针,又要保存指向上一个元素的指针
对于双向循环链表而言,链表中的最后一个元素保存一个指向第一个元素的指针
二、数组、链表的优缺点
1、数组的优点和缺点
优点:
随机访问性强
查找速度快,数组在内存中顺序存储,可通过下标访问,访问效率高
数组从栈上分配内存,使用方便
缺点:
插入和删除效率低,需要移动其他元素
数组元素减少时,可能浪费内存
内存空间要求高,必须有足够的连续内存空间
使用数组之前,必须事先固定数组长度,不支持动态改变数组大小;
数组的大小是固定的,所以存在访问越界的风险
2、链表的优点和缺点
优点:
插入删除速度快
内存利用率高,不会浪费内存
大小没有固定,拓展很灵活,链表从堆上分配内存,自由度大
缺点:
不能随机查找,必须从第一个开始遍历,查找效率低(数组的大小是固定的,所以存在访问越界的风险)
堆栈(Stack):具有一定操作约束的线性表
只在一端(栈顶,Top)做插入、删除
队列(Quene):具有一定操作约束的线性表
二叉树T:一个有穷的结点集合
这个集合可以为空
若不为空,则它是由根节点和称为其左子树Tl和右子树Tr的两个不相交的二叉树构成。
(1)完全二叉树,层序遍历不存在空的树。
公式:
1.树的必记公式:n = n0+n1+n2+…
2.二叉树必记公式:n0=n2+1
3.完全二叉树必记公式:n1 = 0或者n1 = 1
(1)先序遍历
遍历过程为:
查找问题:
- 静态查找和动态查找
二叉搜索树(BST)也称二叉排序树或二叉查找树。
平衡因子(BF),BF(T)=Hl-Hr,其中Hl和Hr分别为T的左右子树的高度。
平衡二叉树(AVL树):空树或者任一节点左右子树高度差的绝对值不超过1.
RR右旋
LL旋转
LR旋转
RL旋转
优先队列:特殊的队列,取出元素的顺序是按照元素的优先权大小,而不是进入队列的先后顺序。
堆的两个特性:
带权路径长度(WPL):设二叉树有n个叶子节点,每个叶子结点带有权值Wk,从根结点到每个叶子结点的长度为Ik,则每个叶子结点的带权路径长度之和就是:WPL=(WkIk)之和。
最优二叉树或哈夫曼树:WPL最小的二叉树。
哈夫曼树的构造:
每次把权值最小的两颗二叉树合并
哈夫曼树的特点:
无向图:图中边没有方向
有向图:图中边单向或双向
网络:带权重的图
1 图的遍历
(1)深度优先搜索(DFS)
(2)广度优先搜索(BFS)(类似于树的层序遍历)
有序,在数组中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。