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 @@
|
||||
|
||||
このように、エンキューとデキューはいずれも 1 回の操作だけで済み、時間計算量はともに $O(1)$ です。
|
||||
|
||||
=== "ArrayQueue"
|
||||
=== "<1>"
|
||||

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

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

|
||||
|
||||
ここで 1 つ問題があります。エンキューとデキューを繰り返すと、`front` と `rear` はどちらも右へ移動し続け、**配列の末尾に達するとそれ以上進めなくなります**。この問題を解決するために、配列を先頭と末尾がつながった「環状配列」とみなします。
|
||||
|
||||
@@ -365,13 +365,13 @@
|
||||
|
||||
下図のように、プッシュ操作では要素を連結リストの先頭に挿入するだけでよく、このノード挿入方法は「頭部挿入法」と呼ばれます。ポップ操作では、先頭ノードを連結リストから削除するだけです。
|
||||
|
||||
=== "LinkedListStack"
|
||||
=== "<1>"
|
||||

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

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

|
||||
|
||||
以下は、連結リストによってスタックを実装したコード例です:
|
||||
@@ -384,13 +384,13 @@
|
||||
|
||||
配列でスタックを実装する場合、配列の末尾をスタックトップとして扱えます。下図のように、プッシュとポップはそれぞれ配列末尾への要素追加と削除に対応し、どちらの時間計算量も $O(1)$ です。
|
||||
|
||||
=== "ArrayStack"
|
||||
=== "<1>"
|
||||

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

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

|
||||
|
||||
プッシュされる要素は際限なく増える可能性があるため、動的配列を使えば、配列の拡張を自前で処理する必要がありません。以下にコード例を示します:
|
||||
|
||||
Reference in New Issue
Block a user