2017-11-11 9 views
-1

私のキューの実現は、奇妙な方法で動作します:新しい要素をエンキューするときは、すべて正しいですが、デキューを開始するとき、この時点で私のヘッドが1であるにもかかわらず、尾が大きくなります。 C++での索引作成の特殊性は何ですか?なぜそれはこのように振る舞うのですか?ここ は私の完全なコードです: https://hastebin.com/odibusacuk.cppキューの実現C++

class Queue{ 
public: 
int head=1; 
int tail=1; 
int q[MAX]; 

int Queue::enqueue(int x){ 
    if (isFull()){ 
     return 0;} 
    else { 
     q[tail]=x; 
     cout << tail << " here is a tail\n"; 
     if (tail==sizeof(q)){ 
      cout << tail << " this is tail\n" ; 
      tail=1;} 
     else { 
      tail=tail+1; 
      } 
     return x; 
     } 
} 
int Queue::dequeue(){ 
if(isEmpty()){ 
    cout << " the queue is empty\n"; 
    return 0;} 
else { 
    int x=q[head]; 
    if (head==sizeof(q)){ 
     head=1;} 
    else { 
     head=head++; 
return x;} 
    } 
return 0; 
} 
+0

[mcve]を含めてください。 – hnefatl

+0

あなたが行ったことを私たちに見せて、修正できるようにする必要があります。 –

+0

私の出力は 4 9 6 3エンキュー 1-ヘッドとテール-5 3デキューされました –

答えて

0

あなたは

cout << k.enqueue(4) << " " << k.enqueue(9) << ' ' << k.enqueue(6) << " " << k.enqueue(3) << " enqueued\n "; 

ような何かを行うときには、これらの関数が呼び出されますどのような順序で指定されていないので、あなたが持っている問題があります。 あなたの例では、右から左に呼び出されています。 これはあなたのキューはあなたの頭は1を指している は、このようにあなたができる3.

をデキューするあなたは、要素0をスキップし、素子1に直接行っているので、

{ 0, 3, 6, 9, 4 } 

0があり、実際にあることを意味します続きを読むhere