Add Zig code blocks.

This commit is contained in:
Yudong Jin
2023-02-01 22:03:04 +08:00
parent 6cd6d5589e
commit 7ce7386bab
25 changed files with 599 additions and 0 deletions

View File

@@ -223,6 +223,12 @@ comments: true
let isEmpty = deque.isEmpty
```
=== "Zig"
```zig title="deque.zig"
```
## 5.3.2. 双向队列实现
双向队列需要一种可以在两端添加、两端删除的数据结构。与队列的实现方法类似,双向队列也可以使用双向链表和循环数组来实现。
@@ -413,3 +419,9 @@ comments: true
```swift title="linkedlist_deque.swift"
```
=== "Zig"
```zig title="linkedlist_deque.zig"
```

View File

@@ -256,6 +256,12 @@ comments: true
let isEmpty = queue.isEmpty
```
=== "Zig"
```zig title="queue.zig"
```
## 5.2.2. 队列实现
队列需要一种可以在一端添加,并在另一端删除的数据结构,也可以使用链表或数组来实现。
@@ -719,6 +725,12 @@ comments: true
}
```
=== "Zig"
```zig title="linkedlist_queue.zig"
```
### 基于数组的实现
数组的删除首元素的时间复杂度为 $O(n)$ ,因此不适合直接用来实现队列。然而,我们可以借助两个指针 `front` , `rear` 来分别记录队首和队尾的索引位置,在入队 / 出队时分别将 `front` / `rear` 向后移动一位即可,这样每次仅需操作一个元素,时间复杂度降至 $O(1)$ 。
@@ -1241,6 +1253,12 @@ comments: true
}
```
=== "Zig"
```zig title="array_queue.zig"
```
以上代码仍存在局限性,即长度不可变。然而,我们可以通过将数组替换为列表(即动态数组)来引入扩容机制,有兴趣的同学可以尝试实现。
## 5.2.3. 两种实现对比

View File

@@ -255,6 +255,12 @@ comments: true
let isEmpty = stack.isEmpty
```
=== "Zig"
```zig title="stack.zig"
```
## 5.1.2. 栈的实现
为了更加清晰地了解栈的运行机制,接下来我们来自己动手实现一个栈类。
@@ -683,6 +689,12 @@ comments: true
}
```
=== "Zig"
```zig title="linkedlist_stack.zig"
```
### 基于数组的实现
使用「数组」实现栈时,考虑将数组的尾部当作栈顶。这样设计下,「入栈」与「出栈」操作就对应在数组尾部「添加元素」与「删除元素」,时间复杂度都为 $O(1)$ 。
@@ -1023,6 +1035,12 @@ comments: true
}
```
=== "Zig"
```zig title="array_stack.zig"
```
## 5.1.3. 两种实现对比
### 支持操作