数据结构复习笔记(一)

一、三大要素

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);

 

你可能感兴趣的:(数据结构复习笔记(一))