mirror of
https://github.com/krahets/hello-algo.git
synced 2026-06-16 15:18:37 +08:00
Add animation player (#1877)
* Add auto slide controller. * Fix the animation blocks. * renamed as animation_player * Bug fixes * Refine animation player controls
This commit is contained in:
@@ -399,19 +399,19 @@
|
||||
|
||||
Как показано на рисунках ниже, мы рассматриваем головной и хвостовой узлы двусвязного списка как голову и хвост двусторонней очереди и одновременно реализуем функции добавления и удаления узлов с обеих сторон.
|
||||
|
||||
=== "LinkedListDeque"
|
||||
=== "<1>"
|
||||

|
||||
|
||||
=== "push_last()"
|
||||
=== "<2>"
|
||||

|
||||
|
||||
=== "push_first()"
|
||||
=== "<3>"
|
||||

|
||||
|
||||
=== "pop_last()"
|
||||
=== "<4>"
|
||||

|
||||
|
||||
=== "pop_first()"
|
||||
=== "<5>"
|
||||

|
||||
|
||||
Код реализации приведен ниже:
|
||||
@@ -424,19 +424,19 @@
|
||||
|
||||
Как показано на рисунках ниже, аналогично реализации обычной очереди на массиве мы также можем использовать кольцевой массив для реализации двусторонней очереди.
|
||||
|
||||
=== "ArrayDeque"
|
||||
=== "<1>"
|
||||

|
||||
|
||||
=== "push_last()"
|
||||
=== "<2>"
|
||||

|
||||
|
||||
=== "push_first()"
|
||||
=== "<3>"
|
||||

|
||||
|
||||
=== "pop_last()"
|
||||
=== "<4>"
|
||||

|
||||
|
||||
=== "pop_first()"
|
||||
=== "<5>"
|
||||

|
||||
|
||||
На основе реализации обычной очереди нужно лишь добавить методы добавления в голову очереди и удаления из хвоста:
|
||||
|
||||
@@ -368,13 +368,13 @@
|
||||
|
||||
Как показано на рисунке ниже, мы можем рассматривать головной узел и хвостовой узел связного списка как голову очереди и хвост очереди соответственно, договорившись, что добавлять узлы можно только в хвост, а удалять - только из головы.
|
||||
|
||||
=== "LinkedListQueue"
|
||||
=== "<1>"
|
||||

|
||||
|
||||
=== "push()"
|
||||
=== "<2>"
|
||||

|
||||
|
||||
=== "pop()"
|
||||
=== "<3>"
|
||||

|
||||
|
||||
Ниже приведен код реализации очереди на связном списке:
|
||||
@@ -396,13 +396,13 @@
|
||||
|
||||
Можно увидеть, что и `enqueue` , и `dequeue` требуют всего одной операции, а значит обе имеют временную сложность $O(1)$ .
|
||||
|
||||
=== "ArrayQueue"
|
||||
=== "<1>"
|
||||

|
||||
|
||||
=== "push()"
|
||||
=== "<2>"
|
||||

|
||||
|
||||
=== "pop()"
|
||||
=== "<3>"
|
||||

|
||||
|
||||
Ты можешь заметить еще одну проблему: при непрерывных операциях `enqueue` и `dequeue` значения `front` и `rear` оба движутся вправо, и **когда они доходят до конца массива, дальше сдвигаться уже нельзя**. Чтобы решить эту проблему, можно рассматривать массив как кольцевой массив, у которого начало и конец соединены.
|
||||
|
||||
@@ -365,13 +365,13 @@
|
||||
|
||||
Как показано на рисунке ниже, для операции `push` достаточно вставить элемент в голову связного списка. Такой способ вставки называется вставкой в голову. Для операции `pop` достаточно удалить головной узел из списка.
|
||||
|
||||
=== "LinkedListStack"
|
||||
=== "<1>"
|
||||

|
||||
|
||||
=== "push()"
|
||||
=== "<2>"
|
||||

|
||||
|
||||
=== "pop()"
|
||||
=== "<3>"
|
||||

|
||||
|
||||
Ниже приведен пример кода реализации стека на основе связного списка:
|
||||
@@ -384,13 +384,13 @@
|
||||
|
||||
Если реализовывать стек на основе массива, то хвост массива можно рассматривать как вершину стека. Как показано на рисунке ниже, операции `push` и `pop` соответствуют добавлению элемента в конец массива и удалению элемента из конца, обе имеют временную сложность $O(1)$ .
|
||||
|
||||
=== "ArrayStack"
|
||||
=== "<1>"
|
||||

|
||||
|
||||
=== "push()"
|
||||
=== "<2>"
|
||||

|
||||
|
||||
=== "pop()"
|
||||
=== "<3>"
|
||||

|
||||
|
||||
Поскольку количество элементов, помещаемых в стек, может непрерывно расти, мы можем использовать динамический массив и тем самым не заниматься расширением массива вручную. Ниже приведен пример кода:
|
||||
|
||||
Reference in New Issue
Block a user