循環キューはキュー2 -

パート1:循環キュー

私たちは、私たちが書いた最後の時間を見てQueue

struct Queue{
    int que[1000];     //最大容纳1000个元素
    int head = 0;      //队列的第一个元素
    int tail = 0;      //队列的最后一个元素
    void push(int x){ que[tail++]=x; }  //增加一个
    void pop(){ head++; }      //弹出第一个
    bool empty(){ return tail-head; }     //是否为空
    int num(){ return tail-head; }        //返回有多少个元素
    int getHead(){ return que[head]; }    //获取第一个元素
};

今、私たちは、i番目の要素を取得する機能を追加しました。

int getNum(int x){
}

まあ、物事は内部に記入し始めます。

int getNum(int x){
    return que[x];
}

あなたがいる場合でも、明確に、x比較的大きな、そして、何を出力するのでしょうか?

方法を見つけるその後、我々は彼に与えることができ、円形のキューあなたがしている場合、ある、x大きすぎる、我々は彼に戻って行くよhead、このような要素を決定するために、再度を、:

これは、開始しました!

int getNum(int x){
    return que[x%(head-tall)];
}

キューが空である場合は、それがhead-tail0である、そこだろうerror、我々は特別な文を追加します。

int getNum(int x){
    return !(head-tall)?-1:que[x%(head-tall)];
}

キューが空の場合、リターン-1我々は道getHead()も書き直します:

int getHead(){
    return !(head-tall)?-1:que[head];
}

良い、それは〜循環キューを実現しています

おすすめ

転載: www.cnblogs.com/sdltf/p/12516649.html