一、三大要素
1、逻辑结构;
2、存储结构;
3、运算。
1.1、逻辑结构包括线性结构和非线性结构。非线性结构包括树和图;
1.2、存储结构:顺序结构和链式结构。
总结:算法的设计依赖于逻辑结构,而算法的实现依赖于存储结构,同一逻辑结构可采用不同的存储结构。
二、时间复杂度
1、渐近时间复杂度一般取决于算法频度最大的语句频度;
2、T(n)不仅与n有关,还与它所处理的数据集的状态有关。在这种情况下,T(n)常用最坏的时间复杂度来计算;
3、if B then S的运行时间=条件B的测试时间(通常定位O(1))+分支的运行时间;
4、if B then S else C的运行时间=条件B的测试时间(通常定位O(1))+分支的运行时间(S/C的运行时间的较大者)。
常见的时间复杂度的关系:O(1)<=O(log2(n))<=O(n)<=O(nlog2(n))<=O(n^2)<=O(n^3)<=……O(n^k)<=O(2^k)<=O(n!).
三、线性表的存储结构
3.1 线性表的顺序存储;
3.2 线性表的链式存储
1、单链表
2、循环链表
3、双向链表
4、双向循环链表
3.3 线性表的基本运算
1、顺序表的插入(在元素ai之前插入元素)
if(i<1)ORif(i>n+1) then{参数错 return}
for j=n to i step(-1)
V(j+1) ←V(j)
end(j)
V[j] ← x
n←n+1 //表长+1
return
PS:顺序表插入算法评价
设pi是在第i个元素前插入一个元素的概率,则在表长为n的表中插入(或删除)一个元素所需移动次数的平均值为:n/2;
2、顺序表的删除(删除长度为n的线性表的第i个元素)
if(i<1)OR(i>n+1) then{参数错 return}//非法位置
for j=i to n-1
V[j] ← V[j+1]// 结点前移
end(j)
n←n-1
return
PS:顺序表删除的算法评价:设qi是删除第i个元素的概率,则在表长为n的表中删除一个元素所需移动次数的平均值为:(n-1)/2
3、单链表的插入
在链表中值为a的前面插入值为b的结点
3.1 先生成一新结点,存放值b
GETNODE (p);data (p) ←b;
3.2•将b插入到a前(假设q指向a的前一结点)
① next (p) ← next (q);
② next (q) ← p;
原则:先确定新的指针,再修改旧的指针
4 单链表的删除(假设q指向a的前一结点)
4.1将a从链表中删除
① p ← next(q);
② next(q)←next(p);
4.2回收由p指向的结点
RET(p);
5 循环链表的插入
5.1生成一新结点p,存放值y
GETNODE (p);data (p) ←y;
5.2
① next (p) ← next (q);
② priou(p) ←q;
③ priou(next(p)) ← p;
④ next(q) ← p;
6.双向链表的删除
① p ←q;
② next (priou(q)) ← next (q);
③ priou(next (q)) ← priou(q);
RET (p);