アプリケーションで曲のリストを表すデータ構造をトラバースするためのアルゴリズムを開発しようとしています。
そのリストは、私がすでに演奏したすべての曲 (私の演奏履歴) と、これから演奏する他の曲で構成されています。
Something like this (example):
- Hソング1
- Hソング2
- Hソング3
Hソング4
現在再生中の曲
キュー 5 の Q ソング
- キュー 6 の Q ソング
- キュー 7 の Q ソング
- キュー 8 の Q ソング
プレイリストを移動できるように、「前へ」および「次へ」ボタンを実装する必要があります。
曲を再生するたびに履歴に保存されます。
ユーザーが曲を再生するときのすべてのユースケースを解決する効率的なアルゴリズム (コードは必要ありません。アイデアまたは疑似コードのみ) が必要です。
たとえば、1 つのシナリオは次のようになります。
履歴には曲 1、2、および 3 があります。ここで曲 4 を再生し、その後の履歴状態は 1、2、3、および 4 です。「前へ」ボタンをクリックして、以前に再生した曲をもう一度再生するとします。現在、履歴の状態は 1、2、3、4、および 3 です (曲 3 は曲 4 の前に再生されました)。「前へ」ボタンをもう一度クリックすると、新しい履歴の状態は 1、2、3、4、3、2 になります。
ここで、たとえば曲 6 など、キュー内の曲をクリックするとします。履歴の状態は 1、2、3、4、3、2、および 6 です。[前へ] ボタンをクリックすると、曲 2 が再生され、その曲が一番上に追加されます。履歴 (状態: 1,2,3,4,3,2,6,2))。
ヒストリーの状態を簡潔に保ち、ヒストリーの一番上を見れば常に前の曲を提供してくれる何らかのデータ構造を開発できれば素晴らしいと思います。
したがって、このデータ構造はその問題には適していません。履歴の状態を簡潔に保ちますが、履歴を簡単にトラバースする方法がわかりません。
データ構造を変更すると、トラバースのアルゴリズムが単純になるかもしれませんが、両方の要求を達成する方法 (履歴情報を保持し、以前に再生された曲を簡単に取得する可能性がある) はありますか?
この議論に貢献してくれるすべての人に感謝します。http://starvibes.comの音楽プレーヤーにそのアルゴリズムが必要なのは、私の意見では「次の大きなもの」になるのは良いことです。