数据结构相关笔记①
W1-W2
算法复杂度
算法复杂度描述了算法执行时间或空间随输入规模变化的增长趋势。以下是常见的算法复杂度及其表示方式:
常数 (Constant)
对数 (Logarithmic)
线性 (Linear)
准线性 (Quasi-linear)
二次 (Quadratic)
三次 (Cubic)
指数 (Exponential)
排序
抽象数据类型 (ADT)
抽象数据类型 Abstract Data Type,是一种数据类型,其特征仅由其行为(操作)定义,而不是其具体实现。例如,栈、队列、链表、树等都是抽象数据类型。
索引列表 (Index-Based List) 数组
| 操作 | 时间复杂度 | 描述 |
|---|---|---|
| size() | 返回存储中的元素数量。 | |
| isEmpty() | 检查存储是否为空。 | |
| get(i) | 返回索引为 i 的元素。 |
|
| set(i, e) | 将索引 i 处的元素替换为元素 e,并返回被替换的元素。 |
|
| add(i, e) | 在索引 i 处插入元素 e。索引大于或等于 i 的现有元素将后移。 |
|
| remove(i) | 移除并返回索引 i 处的元素。索引大于或等于 i 的现有元素将前移。 |
例子
| Method | Returned value | List content |
|---|---|---|
| add(0, A) | - | [A] |
| add(0, B) | - | [B, A] |
| get(1) | A | [B, A] |
| set(2, C) | “error” | [B, A] |
| add(2, C) | - | [B, A, C] |
| add(4, D) | “error” | [B, A, C] |
| remove(1) | A | [B, C] |
| add(1, D) | - | [B, D, C] |
| add(1, E) | - | [B, E, D, C] |
| get(4) | “error” | [B, E, D, C] |
| add(4, F) | - | [B, E, D, C, F] |
| set(2, G) | D | [B, E, G, C, F] |
位置列表 (Positional List) 单/双向链表
| 操作 | 单向链表 | 双向链表 | 描述 |
|---|---|---|---|
| size() | 返回存储中的元素数量。 | ||
| isEmpty() | 检查存储是否为空。 | ||
| first(e) | 返回第一个元素的位置(如果为空则返回 null)。 |
||
| last(e) | 返回最后一个元素的位置(如果为空则返回 null)。 |
||
| removeFirst() | 移除并返回第一个元素。 | ||
| removeLast() | 移除并返回最后一个元素。 | ||
| insertBefore(p, e) | 不适用 | 在位置 p 之前插入元素 e。 |
|
| insertAfter(p, e) | 在位置 p 之后插入元素 e。 |
||
| remove(p) | 移除并返回位置 p 处的元素。 |
||
| before(p) | 不适用 | 返回位置 p 的前一个元素的位置(如果 p 是第一个位置则返回 null)。 |
|
| after(p) | 返回位置 p 的后一个元素的位置(如果 p 是最后一个位置则返回 null)。 |
栈 (Stack)
| 操作 | 时间复杂度 | 描述 |
|---|---|---|
| push(e) | 插入元素 e。 |
|
| pop() | 移除并返回最后插入的元素。 | |
| top() | 返回最后插入的元素,但不移除。 | |
| size() | 返回存储中的元素数量。 | |
| isEmpty() | 检查存储是否为空。 |
例子
| operation | returns | stack |
|---|---|---|
| push(5) | - | [5] |
| push(3) | - | [5, 3] |
| size() | 2 | [5, 3] |
| pop() | 3 | [5] |
| isEmpty() | False | [5] |
| pop() | 5 | [] |
| isEmpty() | True | [] |
| push(7) | - | [7] |
| push(9) | - | [7, 9] |
| top() | 9 | [7, 9] |
| push(4) | - | [7, 9, 4] |
| pop() | 4 | [7, 9] |
队列 (Queue)
| 操作 | 时间复杂度 | 描述 |
|---|---|---|
| enqueue(e) | 插入元素 e 到队列的末尾。 |
|
| dequeue() | 移除并返回队列前端的元素。队列为空返回 nul | |
| first() | 返回队列前端的元素,但不移除它。队列为空返回 null | |
| size() | 返回队列中存储的元素数量。 | |
| isEmpty() | 检查队列是否为空。 |
例子
| Operation | Output | Queue |
|---|---|---|
| enqueue(5) | - | (5) |
| enqueue(3) | - | (5, 3) |
| dequeue() | 5 | (3) |
| enqueue(7) | - | (3, 7) |
| dequeue() | 3 | (7) |
| first() | 7 | (7) |
| dequeue() | 7 | () |
| dequeue() | null | () |
| isEmpty() | true | () |
| enqueue(9) | - | (9) |
| enqueue(7) | - | (9, 7) |
| size() | 2 | (9, 7) |
| enqueue(3) | - | (9, 7, 3) |
| enqueue(5) | - | (9, 7, 3, 5) |
| dequeue() | 9 | (7, 3, 5) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Xiaotan's Blog!
评论


