0

アプリケーションで曲のリストを表すデータ構造をトラバースするためのアルゴリズムを開発しようとしています。

そのリストは、私がすでに演奏したすべての曲 (私の演奏履歴) と、これから演奏する他の曲で構成されています。

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の音楽プレーヤーにそのアルゴリズムが必要なのは、私の意見では「次の大きなもの」になるのは良いことです。

4

3 に答える 3