目录
Chapter 3 Lists, Stacks, and Queues 表 栈 队列
review
Chapter 1 Introdution
数据结构:数据集data set +关系relation + 操作operations
算法+数据结构=程序
逻辑描述+物理操作
Chapter 2 Algorithm Analysis
一、运行时间估计
T(N)=O(f(N)) 存在正常数 c 和 n0 使得当 N ≧ n0 时 T(N) ≦ cf(N)
T(N)=Ω(g(N)) 存在正常数 c 和 n0 使得当 N ≧ n0 时 T(N) ≧ cg(N)
T(N)=Θ(h(N)) 当且仅当T(N) =O(h(N)) 且 T(N) = Ω(h(N))
T(N)=o(p(N)) 若 T(N) = O(p(N)) 且 T(N) ≠ Θ(p(N))
some rules
1、若 𝑇_1 (𝑁)=𝑂(𝑓(𝑁)) 且 𝑇_2 (𝑁)=𝑂(𝑔(𝑁)), 那么
(a) 𝑇_1 (𝑁)+𝑇_2 (𝑁)=max(𝑂(𝑓(𝑁), 𝑂(𝑔(𝑁))),
(b) 𝑇_1 (𝑁)∗𝑇_2 (𝑁)=𝑂(𝑓(𝑁)∗𝑔(𝑁))
2、若𝑇(𝑁) 是 k 次多项式(polynomial), 那么 𝑇(𝑁)=Θ(𝑁^𝑘)
3、对任意常数 k 有〖𝑙𝑜𝑔𝑁〗^𝑘 =𝑂(𝑁) .
this tell us that logarithms(对数) grow very slowly
Chapter 3 Lists, Stacks, and Queues 表 栈 队列
一、表 Lists
1.表的简单数组实现
缺点:MaxSize 需要估计,通常需要估计得大一些,浪费大量空间,特别是存在未知大小的表;
插入 Insertion 和Deletion 需要O(N) 时间,同时涉及大量数据移动;
优点:PrintList 和 Find 以线性时间执行,FindKth 花费常数时间
2.链表 linked list (指针实现)
链表由一系列不必在内存中相连的结构组成,每个结构均含有表元素和指向包含该元素后继元的结构的指针 Next ,最后一个单元的 Next 指向 NULL(0);
链表的类型声明
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
struct Node
{
ElementType Element;
Positon Next;
};
测试链表是否为空
// return true if is empty
int IsEmpty(List L)
{
return L->Next == NULL;
}
测试当前位置是否为链表末尾