fix(ru): align proofreading corrections with the Simplified Chinese original (#2004)

* docs(ru): correct proofreading issues in prose and code examples

* docs(ru): align proofreading edits with Simplified Chinese source

* fix(ru): repair generated Zig statements and complete comment translations
This commit is contained in:
Yudong Jin
2026-10-27 18:19:11 +08:00
committed by GitHub
parent 350f483801
commit 71a773df64
149 changed files with 675 additions and 649 deletions

View File

@@ -67,7 +67,7 @@
Next *ListNode // Указатель на следующий узел
}
// NewListNode Конструктор, создает новый узел
// NewListNode — функция-конструктор, создающая новый связный список.
func NewListNode(val int) *ListNode {
return &ListNode{
Val: val,
@@ -195,7 +195,7 @@
```python title="linked_list.py"
# Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4
# Инициализация отдельных узлов
# Инициализация каждого узла
n0 = ListNode(1)
n1 = ListNode(3)
n2 = ListNode(2)
@@ -212,7 +212,7 @@
```cpp title="linked_list.cpp"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
// Инициализация отдельных узлов
// Инициализация каждого узла
ListNode* n0 = new ListNode(1);
ListNode* n1 = new ListNode(3);
ListNode* n2 = new ListNode(2);
@@ -229,7 +229,7 @@
```java title="linked_list.java"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
// Инициализация отдельных узлов
// Инициализация каждого узла
ListNode n0 = new ListNode(1);
ListNode n1 = new ListNode(3);
ListNode n2 = new ListNode(2);
@@ -246,7 +246,7 @@
```csharp title="linked_list.cs"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
// Инициализация отдельных узлов
// Инициализация каждого узла
ListNode n0 = new(1);
ListNode n1 = new(3);
ListNode n2 = new(2);
@@ -263,7 +263,7 @@
```go title="linked_list.go"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
// Инициализация отдельных узлов
// Инициализация каждого узла
n0 := NewListNode(1)
n1 := NewListNode(3)
n2 := NewListNode(2)
@@ -280,7 +280,7 @@
```swift title="linked_list.swift"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
// Инициализация отдельных узлов
// Инициализация каждого узла
let n0 = ListNode(x: 1)
let n1 = ListNode(x: 3)
let n2 = ListNode(x: 2)
@@ -297,7 +297,7 @@
```javascript title="linked_list.js"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
// Инициализация отдельных узлов
// Инициализация каждого узла
const n0 = new ListNode(1);
const n1 = new ListNode(3);
const n2 = new ListNode(2);
@@ -314,7 +314,7 @@
```typescript title="linked_list.ts"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
// Инициализация отдельных узлов
// Инициализация каждого узла
const n0 = new ListNode(1);
const n1 = new ListNode(3);
const n2 = new ListNode(2);
@@ -331,7 +331,7 @@
```dart title="linked_list.dart"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */\
// Инициализация отдельных узлов
// Инициализация каждого узла
ListNode n0 = ListNode(1);
ListNode n1 = ListNode(3);
ListNode n2 = ListNode(2);
@@ -348,7 +348,7 @@
```rust title="linked_list.rs"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
// Инициализация отдельных узлов
// Инициализация каждого узла
let n0 = Rc::new(RefCell::new(ListNode { val: 1, next: None }));
let n1 = Rc::new(RefCell::new(ListNode { val: 3, next: None }));
let n2 = Rc::new(RefCell::new(ListNode { val: 2, next: None }));
@@ -366,7 +366,7 @@
```c title="linked_list.c"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
// Инициализация отдельных узлов
// Инициализация каждого узла
ListNode* n0 = newListNode(1);
ListNode* n1 = newListNode(3);
ListNode* n2 = newListNode(2);
@@ -383,7 +383,7 @@
```kotlin title="linked_list.kt"
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
// Инициализация отдельных узлов
// Инициализация каждого узла
val n0 = ListNode(1)
val n1 = ListNode(3)
val n2 = ListNode(2)
@@ -400,7 +400,7 @@
```ruby title="linked_list.rb"
# Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4
# Инициализация отдельных узлов
# Инициализация каждого узла
n0 = ListNode.new(1)
n1 = ListNode.new(3)
n2 = ListNode.new(2)
@@ -474,7 +474,7 @@
| Добавление элемента | $O(n)$ | $O(1)$ |
| Удаление элемента | $O(n)$ | $O(1)$ |
## Основные типы связных списков
## Распространенные типы связных списков
Как показано на рисунке ниже, существует три распространенных типа связных списков.
@@ -538,7 +538,7 @@
Prev *DoublyListNode // Указатель на предыдущий узел
}
// NewDoublyListNode Инициализация
// NewDoublyListNode инициализирует узел двусвязного списка.
func NewDoublyListNode(val int) *DoublyListNode {
return &DoublyListNode{
Val: val,
@@ -680,7 +680,7 @@
end
```
![Виды связных списков](linked_list.assets/linkedlist_common_types.png)
![Распространенные типы связных списков](linked_list.assets/linkedlist_common_types.png)
## Типичные применения связных списков

View File

@@ -31,7 +31,7 @@
```cpp title="list.cpp"
/* Инициализация списка */
// Обрати внимание: в C++ vector соответствует описываемому здесь nums
// Обратите внимание: в C++ vector соответствует описываемому здесь nums
// Без начальных значений
vector<int> nums1;
// С начальными значениями
@@ -44,7 +44,7 @@
/* Инициализация списка */
// Без начальных значений
List<Integer> nums1 = new ArrayList<>();
// С начальными значениями (обрати внимание: элементы массива должны использовать обертку Integer[] вместо int[])
// С начальными значениями (обратите внимание: элементы массива должны использовать обертку Integer[] вместо int[])
Integer[] numbers = new Integer[] { 1, 3, 2, 5, 4 };
List<Integer> nums = new ArrayList<>(Arrays.asList(numbers));
```
@@ -153,7 +153,7 @@
### Доступ к элементам
Поскольку в этом разделе список рассматривается как структура на основе динамического массива, доступ к элементам и их обновление можно выполнять за $O(1)$ времени, что очень эффективно.
Поскольку в этом разделе список рассматривается как структура на основе динамического массива, доступ к элементам и изменение их значений можно выполнять за $O(1)$ времени, что очень эффективно.
=== "Python"
@@ -161,8 +161,8 @@
# Доступ к элементу
num: int = nums[1] # Доступ к элементу по индексу 1
# Обновление элемента
nums[1] = 0 # Обновить элемент по индексу 1 значением 0
# Изменение элемента
nums[1] = 0 # Изменить значение элемента с индексом 1 на 0
```
=== "C++"
@@ -171,8 +171,8 @@
/* Доступ к элементу */
int num = nums[1]; // Доступ к элементу по индексу 1
/* Обновление элемента */
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
/* Изменение элемента */
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
```
=== "Java"
@@ -181,8 +181,8 @@
/* Доступ к элементу */
int num = nums.get(1); // Доступ к элементу по индексу 1
/* Обновление элемента */
nums.set(1, 0); // Обновить элемент по индексу 1 значением 0
/* Изменение элемента */
nums.set(1, 0); // Изменить значение элемента с индексом 1 на 0
```
=== "C#"
@@ -191,8 +191,8 @@
/* Доступ к элементу */
int num = nums[1]; // Доступ к элементу по индексу 1
/* Обновление элемента */
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
/* Изменение элемента */
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
```
=== "Go"
@@ -201,8 +201,8 @@
/* Доступ к элементу */
num := nums[1] // Доступ к элементу по индексу 1
/* Обновление элемента */
nums[1] = 0 // Обновить элемент по индексу 1 значением 0
/* Изменение элемента */
nums[1] = 0 // Изменить значение элемента с индексом 1 на 0
```
=== "Swift"
@@ -211,8 +211,8 @@
/* Доступ к элементу */
let num = nums[1] // Доступ к элементу по индексу 1
/* Обновление элемента */
nums[1] = 0 // Обновить элемент по индексу 1 значением 0
/* Изменение элемента */
nums[1] = 0 // Изменить значение элемента с индексом 1 на 0
```
=== "JS"
@@ -221,8 +221,8 @@
/* Доступ к элементу */
const num = nums[1]; // Доступ к элементу по индексу 1
/* Обновление элемента */
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
/* Изменение элемента */
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
```
=== "TS"
@@ -231,8 +231,8 @@
/* Доступ к элементу */
const num: number = nums[1]; // Доступ к элементу по индексу 1
/* Обновление элемента */
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
/* Изменение элемента */
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
```
=== "Dart"
@@ -241,8 +241,8 @@
/* Доступ к элементу */
int num = nums[1]; // Доступ к элементу по индексу 1
/* Обновление элемента */
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
/* Изменение элемента */
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
```
=== "Rust"
@@ -250,8 +250,8 @@
```rust title="list.rs"
/* Доступ к элементу */
let num: i32 = nums[1]; // Доступ к элементу по индексу 1
/* Обновление элемента */
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
/* Изменение элемента */
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
```
=== "C"
@@ -265,8 +265,8 @@
```kotlin title="list.kt"
/* Доступ к элементу */
val num = nums[1] // Доступ к элементу по индексу 1
/* Обновление элемента */
nums[1] = 0 // Обновить элемент по индексу 1 значением 0
/* Изменение элемента */
nums[1] = 0 // Изменить значение элемента с индексом 1 на 0
```
=== "Ruby"
@@ -274,13 +274,13 @@
```ruby title="list.rb"
# Доступ к элементу
num = nums[1] # Доступ к элементу по индексу 1
# Обновление элемента
nums[1] = 0 # Обновить элемент по индексу 1 значением 0
# Изменение элемента
nums[1] = 0 # Изменить значение элемента с индексом 1 на 0
```
??? pythontutor "Визуализация выполнения"
https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%0A%20%20%20%20num%20%3D%20nums%5B1%5D%20%20%23%20%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C%D1%81%D1%8F%20%D0%BA%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%201%20%D0%BF%D0%BE%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%0A%20%20%20%20%23%20%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%20%20%20%20nums%5B1%5D%20%3D%200%20%20%20%20%23%20%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%201%20%D0%B4%D0%BE%200&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false
https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%0A%20%20%20%20num%20%3D%20nums%5B1%5D%20%20%23%20%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%201%0A%0A%20%20%20%20%23%20%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%0A%20%20%20%20nums%5B1%5D%20%3D%200%20%20%20%20%23%20%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D1%81%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%BC%201%20%D0%BD%D0%B0%200&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false
### Вставка и удаление элементов
@@ -944,7 +944,7 @@
??? pythontutor "Визуализация выполнения"
https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20%0A%20%20%20%20%23%20%D0%9E%D1%82%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums.sort%28%29%20%20%23%20%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%2C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D1%8B%20%D0%BF%D0%BE%20%D0%B2%D0%BE%D0%B7%D1%80%D0%B0%D1%81%D1%82%D0%B0%D0%BD%D0%B8%D1%8E&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false
https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20%0A%20%20%20%20%23%20%D0%9E%D1%82%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums.sort%28%29%20%20%23%20%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%20%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%20%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%B0%D0%B3%D0%B0%D1%8E%D1%82%D1%81%D1%8F%20%D0%BF%D0%BE%20%D0%B2%D0%BE%D0%B7%D1%80%D0%B0%D1%81%D1%82%D0%B0%D0%BD%D0%B8%D1%8E&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false
## Реализация списка

View File

@@ -14,9 +14,9 @@
| -------------- | --------------------------------------- | ----------------------------------------- | ------------------------------------------------------- |
| Назначение | Долговременное хранение данных, включая ОС, программы, файлы и т.д. | Временное хранение выполняемых программ и обрабатываемых данных | Хранение часто используемых данных и инструкций, уменьшающее число обращений CPU к памяти |
| Энергозависимость | Данные не теряются после отключения питания | Данные теряются после отключения питания | Данные теряются после отключения питания |
| Емкость | Большая, уровень TB | Меньшая, уровень GB | Очень малая, уровень MB |
| Емкость | Большая, на уровне TB | Меньшая, на уровне GB | Очень малая, на уровне MB |
| Скорость | Низкая, от сотен до тысяч MB/s | Высокая, десятки GB/s | Очень высокая, десятки и сотни GB/s |
| Цена | Низкая, единицы валюты за GB | Высокая, десятки и сотни валютных единиц за GB | Очень высокая, входит в стоимость CPU |
| Цена (в китайских юанях) | Низкая, от нескольких десятых долей юаня до нескольких юаней за GB | Высокая, десятки и сотни юаней за GB | Очень высокая, входит в стоимость CPU |
Компьютерную систему хранения можно представить в виде пирамиды, показанной на рисунке ниже. Чем ближе устройство хранения к вершине пирамиды, тем оно быстрее, тем меньше его емкость и тем выше его стоимость. Такая многоуровневая конструкция возникла не случайно, а стала результатом тщательных инженерных компромиссов.