Skip to content

Commit 1540a62

Browse files
committed
补充图片
1 parent e836415 commit 1540a62

File tree

6 files changed

+14
-4
lines changed

6 files changed

+14
-4
lines changed

docs/10_递归/recursion.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def print_num_use_stack(n):
106106
这里结果也是输出 1 到 10,只不过我们是手动模拟了入栈和出栈的过程,帮助你理解计算机是如何实现递归的,是不是挺简单!现在你能明白为什么上边 print_num_recursive print_num_recursive_revserve 两个函数输出的区别了吗?
107107

108108
# 尾递归
109-
上边的代码示例中实际上包含了两种形式的递归,一种是普通的递归,还有一种叫做尾递归:
109+
上边的代码示例(麻雀虽小五脏俱全)中实际上包含了两种形式的递归,一种是普通的递归,还有一种叫做尾递归:
110110

111111
```py
112112
def print_num_recursive(n):

docs/2_数组和列表/array_and_list.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ list.insert | O(n) |
3030
list.pop(index), default last element | O(1) |
3131
list.remove | O(n) |
3232

33+
![](./list.png)
3334

3435
# 用 list 实现 Array ADT
3536
讲完了 list 让我们来实现一个定长的数组 Array ADT,在其他一些语言中,内置的数组结构就是定长的。

docs/2_数组和列表/list.png

242 KB
Loading

docs/3_链表/linked_list.md

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class LinkedList(object):
3737

3838
来看下时间复杂度:
3939

40-
操作 | 平均时间复杂度 |
40+
链表操作 | 平均时间复杂度 |
4141
------------------------------|----------------|
4242
linked_list.append(value) | O(1) |
4343
linked_list.appendleft(value) | O(1) |
@@ -67,7 +67,15 @@ class Node(object):
6767
- 直接删除节点,当然如果给的是一个值,我们还是需要查找这个值在哪个节点? - 但是如果给了一个节点,我们把它拿掉,直接让它的前后节点互相指过去不就行了?哇欧,删除就是 O(1) 了,两步操作就行啦
6868

6969
好,废话不多说,我们在视频里介绍怎么实现一个双链表 ADT。
70-
70+
最后让我们看下它的时间复杂度:(这里 CircularDoubleLinkedList 取大写字母缩写为 cdll)
71+
72+
循环双端链表操作 | 平均时间复杂度 |
73+
---------------------------------------|----------------|
74+
cdll.append(value) | O(1) |
75+
cdll.appendleft(value) | O(1) |
76+
cdll.remove(node),注意这里参数是 node | O(1) |
77+
cdll.headnode() | O(1) |
78+
cdll.tailnode() | O(1) |
7179

7280
# 小问题:
7381
- 这里单链表我没有实现 insert 方法,你能自己尝试实现吗? insert(value, new_value),我想在某个值之前插入一个值。你同样需要先查找,所以这个步骤也不够高效。

docs/4_队列/array_queue.png

107 KB
Loading

docs/4_队列/queue.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ for i in range(100):
5757
print(i % maxsize)
5858
```
5959

60+
![](./array_queue.png)
6061

6162
我们来实现一个空间有限的循环队列。ArrayQueue,它的实现很简单,但是缺点是需要预先知道队列的长度来分配内存。
6263

@@ -78,7 +79,7 @@ for i in range(100):
7879
- remove(node) # O(1)
7980

8081
啊哈,似乎删除头尾都可以啦,而且都是 O(1) 的,完美。
81-
交给你一个艰巨的任务,实现双端队列 Deque() ADT。你可以参考前几章的任何代码,挑战一下这个任务,别忘记写单元测试呦
82+
交给你一个艰巨的任务,实现双端队列 Deque() ADT。你可以参考前几章的任何代码,挑战一下这个任务,别忘记写单元测试呦。当然如果没想出来也没关系,后边我们实现栈的时候还会用到它,那里我们会实现这个代码。
8283

8384

8485
# 思考题

0 commit comments

Comments
 (0)