データ構造(キュー2.3) - 0から学ぶアルゴリズムへ

その名の通り:同じ種類のようなキューを、最初の人々の最初の行は、治療を取得します

同様のキューとスタック:FIFOキュー表であります

まず、アナログの配列を考慮し、リニアアレイシミュレーション場合は、あまりにも多くのスペースにつながり、そしてなぜだろうか?アナログアレイスタックは、この問題が発生しますか?

キューは、FIFOテーブルがあるため、そのような追加として5つの要素は、アレイ内の位置番号を、今回0-1場所を2つの要素を削除し、テーブルの番号0~4で占めます。この構造を維持するために占めるが、利用されていない番号0-1の位置をキューにつながります。

配列の要素のスタックを削除尾なので、余分なスペースを取ることはありません。

最適化:「リングに配列」(金型を意味します)。

私たちは、各要素がモジュロ下のテーブルに配列を追加した場合、配列全体が円形になり、中に余分なスペースを取って問題はありません

例:スケジューリングアルゴリズムのシミュレーションループ配列

5仕事ではない、完全な実行が尾部にそれを置く場合は、100分までのタスクを実行するたびに、場合の出力時間の実行を終了

0:150-80-200-350-20

1:80-200-350-20-50

2; 200-350-20-50出力180

3:.......

出力:

5 100

150のP1

80 P2

P3 200

P4 350

P5 20

出力:

P2 180

P5 400

450のP1

P3 550

P4 800

コード:

#include <アルゴリズム> 
の#include <iostreamの> 
する#include <cstdlib> 
の#include <fstreamの> 
する#include <CStringの> 
する#include <ビットセット> 
の#include <cstdioを> 
する#include <TIME.H> 
の#include <両端キュー> 
する#include <キュー> 
の#include <スタック> 
の#include <cmath> 
の#include <マップ> 
書式#include < 設定 > 使用して名前空間はstdを、#define LEN 100005 
のtypedef 構造体PP {
     チャー名[ 100 ]。
    

 


int型のトン。
} P。

PQ [LEN]。

int型のヘッド、テール、N。

ボイドエンキュー(P x)から{ 
    Q [尾] =のX。 =(尾+ 1)%LEN。
} 

Pデキュー{ 
    P X = Q [ヘッド]。
    ヘッド =(ヘッド+ 1)%LEN。
    リターンのx; 
} 


int型のmain(){
     int型 elaps = 0 、C。
    INT I、Q; 
    P U; 
    scanf関数(" %d個の%のD "、&​​N、&Q)。
    
    以下のためのint型i = 0 ; iがn <; iは++ ){ 
        scanf関数(" %sの" 、Q [I] .nameの)。
        scanf関数(" %のD "、&Q [i]は.T)。
    } 
    ヘッド = 1 ;尾= N + 1 しばらく(ヘッド=!尾){ 
        U = デキュー(); 
        C = 分(Q、UT)。
        UT - = C。
        elaps + = C。
        もし(UT> 0 ){ 
            エンキュー(U)。
        } {
            printf(" %sの%d個の\ n " 、u.name、elaps)。
        } 
    } 
    戻り 0 
}

C ++標準ライブラリ

ヘッダ

書式#include <キュー>

定義

キュー< 整数 > QUE。

尾の要素xに追加されました

que.push(X)。

ヘッド要素を削除します。

que.pop();

ヘッド素子を訪れるが、削除されません。

que.front();

例2:キューの問題を解決することができ幅優先探索

mおよびnは、あなたの3つの操作は、N + 1、-1に、* 2、いくつかの操作が最小メートルを尋ねたことができます

#include <アルゴリズム> 
の#include <iostreamの> 
する#include <cstdlib> 
の#include <fstreamの> 
する#include <CStringの> 
する#include <ビットセット> 
の#include <cstdioを> 
する#include <TIME.H> 
の#include <両端キュー> 
する#include <キュー> 
の#include <スタック> 
の#include <cmath> 
の#include <マップ> 
書式#include < 設定 > 使用して名前空間はstdを、構造体A-A {
     int型のx、I。
}。

 



%D%D "、&​​N、&M); 
    キュー <AA> QUE; 
    AA; 
    AI = 0 ; 
    AX = N; 
    que.push(A); 
    int型NUM;
     一方!(que.empty()){ 
        A = que.front();
         場合(AX == M){ 
            NUM =は愛;
             破る; 
        } 
        // + 
        A = que.front(); 
        AX ++ ; 
        AI ++
        que.push(A)。
        //- 
        A = que.front()。 - ; 
        AI ++ ; 
        que.push(A)。
        // * 
        A = que.front();  * = 2 ; 
        AI ++ ; 
        que.push(A)。
        
        que.pop(); 
    } 
    のprintf(" %d個の\ n " 、NUM)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/wz-archer/p/11711774.html