Organizing all the code blocks.

This commit is contained in:
Yudong Jin
2022-12-03 01:31:29 +08:00
parent fec56afd5f
commit 9bd5980a81
21 changed files with 2520 additions and 310 deletions

View File

@@ -116,3 +116,33 @@ comments: true
""" 判断双向队列是否为空 """
is_empty = len(duque) == 0
```
=== "Go"
```go title="deque.go"
```
=== "JavaScript"
```js title="deque.js"
```
=== "TypeScript"
```typescript title="deque.ts"
```
=== "C"
```c title="deque.c"
```
=== "C#"
```csharp title="deque.cs"
```

View File

@@ -112,6 +112,36 @@ comments: true
is_empty = len(que) == 0
```
=== "Go"
```go title="queue.go"
```
=== "JavaScript"
```js title="queue.js"
```
=== "TypeScript"
```typescript title="queue.ts"
```
=== "C"
```c title="queue.c"
```
=== "C#"
```csharp title="queue.cs"
```
## 队列实现
队列需要一种可以在一端添加,并在另一端删除的数据结构,也可以使用链表或数组来实现。
@@ -276,6 +306,36 @@ comments: true
return self.__front.val
```
=== "Go"
```go title="linkedlist_queue.go"
```
=== "JavaScript"
```js title="linkedlist_queue.js"
```
=== "TypeScript"
```typescript title="linkedlist_queue.ts"
```
=== "C"
```c title="linkedlist_queue.c"
```
=== "C#"
```csharp title="linkedlist_queue.cs"
```
### 基于数组的实现
数组的删除首元素的时间复杂度为 $O(n)$ ,因此不适合直接用来实现队列。然而,我们可以借助两个指针 `front` , `rear` 来分别记录队首和队尾的索引位置,在入队 / 出队时分别将 `front` / `rear` 向后移动一位即可,这样每次仅需操作一个元素,时间复杂度降至 $O(1)$ 。
@@ -477,6 +537,36 @@ comments: true
return res
```
=== "Go"
```go title="array_queue.go"
```
=== "JavaScript"
```js title="array_queue.js"
```
=== "TypeScript"
```typescript title="array_queue.ts"
```
=== "C"
```c title="array_queue.c"
```
=== "C#"
```csharp title="array_queue.cs"
```
## 队列典型应用
- **淘宝订单。** 购物者下单后,订单就被加入到队列之中,随后系统再根据顺序依次处理队列中的订单。在双十一时,在短时间内会产生海量的订单,如何处理「高并发」则是工程师们需要重点思考的问题。

View File

@@ -112,6 +112,36 @@ comments: true
is_empty = len(stack) == 0
```
=== "Go"
```go title="stack.go"
```
=== "JavaScript"
```js title="stack.js"
```
=== "TypeScript"
```typescript title="stack.ts"
```
=== "C"
```c title="stack.c"
```
=== "C#"
```csharp title="stack.cs"
```
## 栈的实现
为了更加清晰地了解栈的运行机制,接下来我们来自己动手实现一个栈类。
@@ -249,6 +279,36 @@ comments: true
return self.__peek.val
```
=== "Go"
```go title="linkedlist_stack.go"
```
=== "JavaScript"
```js title="linkedlist_stack.js"
```
=== "TypeScript"
```typescript title="linkedlist_stack.ts"
```
=== "C"
```c title="linkedlist_stack.c"
```
=== "C#"
```csharp title="linkedlist_stack.cs"
```
### 基于数组的实现
使用「数组」实现栈时,将数组的尾部当作栈顶。准确地说,我们需要使用「列表」,因为入栈的元素可能是源源不断的,因此使用动态数组可以方便扩容。
@@ -363,6 +423,36 @@ comments: true
return self.__stack[index]
```
=== "Go"
```go title="array_stack.go"
```
=== "JavaScript"
```js title="array_stack.js"
```
=== "TypeScript"
```typescript title="array_stack.ts"
```
=== "C"
```c title="array_stack.c"
```
=== "C#"
```csharp title="array_stack.cs"
```
!!! tip
实际编程中,我们一般直接将 `ArrayList` 或 `LinkedList` 当作「栈」来使用。我们仅需通过脑补来屏蔽无关操作,而不用专门去包装它。