列表
ADT:
- 对象:\((item_0,\cdots,item_{N-1})\)
- 操作:
- Find length
- Make empty
- Find k-th
- Insert
- Delete
- Find next
- Find previous
实现:
-
数组:
array[i] = item_i
顺序映射问题:1. 需估计MaxSize 2. 插入删除\(O(N)\)
优势:找k-th为\(O(1)\)
-
链表
链表¶
初始化:
typedef struct list_node *list_ptr;
typedef struct list_node {
element data;
list_ptr next;
};
list_ptr ptr;
插入 \(O(1)\)
删除:
遍历:
例
链表反转
思路:寻找状态之间的转移
边界:q = h, p = NULL
;
转移:t = q->next, q->next = p, p = q, q = t;
双向链表¶
定义:
typedef struct node *node_ptr;
typedef struct node {
node_ptr llink;
element item;
node_ptr rlink;
}
应用:多项式
- ADT:
- 对象:\(P(x)=a_1x^{e_1}+\cdots+a_nx^{e_n}\)
- 操作:
- Find degree
- Addition
- Subtraction
- Multiplication
- Differentiation
- 表示:
- 数组:
- 链表:
多重链表¶
处理稀疏数据
静态链表¶
定义:data CursorSpace[]
struct data {ElementType Element, int Next}
应用:内存管理
思路:将空闲区域串在静态链表上
malloc:
free(p):