Skip to content

Commit 90d8a3f

Browse files
Stulov Alextrekhleb
Stulov Alex
authored andcommittedDec 28, 2018
Translate into Russian (trekhleb#275)
* Translate LinkedList README in Russian. * Translate missed sentence. Add link to Chinese README.
1 parent 98eb9ae commit 90d8a3f

File tree

2 files changed

+160
-0
lines changed

2 files changed

+160
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
# Связный список
2+
Связный список — базовая динамическая структура данных в информатике,
3+
состоящая из узлов, каждый из которых содержит как собственно данные,так ссылку
4+
(«связку») на следующий узел списка. Данная структура позволяет эффективно
5+
добавлять и удалять элементы на произвольной позиции в последовательности в
6+
процессе итерации. Более сложные варианты включают дополнительные ссылки,
7+
позволяющие эффективно добавлять и удалять произвольные элементы.
8+
9+
Принципиальным преимуществом перед массивом является структурная гибкость:
10+
порядок элементов связного списка может не совпадать с порядком расположения
11+
элементов данных в памяти компьютера, а порядок обхода списка всегда
12+
явно задаётся его внутренними связями. Суть преимущества состоит в том,
13+
что во многих языках создание массива требует указать его размер заранее.
14+
Связный список позволяет обойти это ограничение.
15+
16+
Недостатком связных списков является то, что время доступа линейно
17+
(и затруднительно для реализации конвейеров). Быстрый доступ(случайный)
18+
невозможен.
19+
20+
![Связный список](https://upload.wikimedia.org/wikipedia/commons/6/6d/Singly-linked-list.svg)
21+
22+
## Псевдокод основных операций
23+
24+
### Вставка
25+
26+
```text
27+
Add(value)
28+
Pre: value - добавляемое значение
29+
Post: value помещено в конец списка
30+
n ← node(value)
31+
if head = ø
32+
head ← n
33+
tail ← n
34+
else
35+
tail.next ← n
36+
tail ← n
37+
end if
38+
end Add
39+
```
40+
41+
```text
42+
Prepend(value)
43+
Pre: value - добавляемое значение
44+
Post: value помещено в начало списка
45+
n ← node(value)
46+
n.next ← head
47+
head ← n
48+
if tail = ø
49+
tail ← n
50+
end
51+
end Prepend
52+
```
53+
54+
### Поиск
55+
56+
```text
57+
Contains(head, value)
58+
Pre: head - первый узел в списке
59+
value - значение, которое следует найти
60+
Post: true - value найдено в списке, иначе false
61+
n ← head
62+
while n != ø and n.value != value
63+
n ← n.next
64+
end while
65+
if n = ø
66+
return false
67+
end if
68+
return true
69+
end Contains
70+
```
71+
72+
### Удаление
73+
74+
```text
75+
Remove(head, value)
76+
Pre: head - первый узел в списке
77+
value - значение, которое следует удалить
78+
Post: true - value удалено из списка, иначе false
79+
if head = ø
80+
return false
81+
end if
82+
n ← head
83+
if n.value = value
84+
if head = tail
85+
head ← ø
86+
tail ← ø
87+
else
88+
head ← head.next
89+
end if
90+
return true
91+
end if
92+
while n.next != ø and n.next.value != value
93+
n ← n.next
94+
end while
95+
if n.next != ø
96+
if n.next = tail
97+
tail ← n
98+
end if
99+
n.next ← n.next.next
100+
return true
101+
end if
102+
return false
103+
end Remove
104+
```
105+
106+
### Обход
107+
108+
```text
109+
Traverse(head)
110+
Pre: head - первый узел в списке
111+
Post: элементы списка пройдены
112+
n ← head
113+
while n != ø
114+
yield n.value
115+
n ← n.next
116+
end while
117+
end Traverse
118+
```
119+
120+
### Обратный обход
121+
122+
```text
123+
ReverseTraversal(head, tail)
124+
Pre: head и tail отноcятся к одному списку
125+
Post: элементы списка пройдены в обратном порядке
126+
if tail != ø
127+
curr ← tail
128+
while curr != head
129+
prev ← head
130+
while prev.next != curr
131+
prev ← prev.next
132+
end while
133+
yield curr.value
134+
curr ← prev
135+
end while
136+
yeild curr.value
137+
end if
138+
end ReverseTraversal
139+
```
140+
141+
## Сложность
142+
143+
### Временная сложность
144+
145+
| Чтение | Поиск | Вставка | Удаление |
146+
| :-------: | :-------: | :-------: | :-------: |
147+
| O(n) | O(n) | O(1) | O(1) |
148+
149+
### Пространственная сложность
150+
151+
O(n)
152+
153+
## Ссылки
154+
155+
- [Wikipedia](https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA)
156+
- [YouTube](https://www.youtube.com/watch?v=njTh_OwMljA&index=2&t=1s&list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8)

‎src/data-structures/linked-list/README.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Linked List
22

3+
_Read this in other languages:_
4+
[_简体中文_](README.zh-CN.md),
5+
[_Русский_](README.ru-RU.md)
6+
37
In computer science, a **linked list** is a linear collection
48
of data elements, in which linear order is not given by
59
their physical placement in memory. Instead, each

0 commit comments

Comments
 (0)
Please sign in to comment.