0

以下は、データ構造クラスの教授スライドの 1 つです。私は研究を行っていて、ここで概念を理解できず、データ構造クラスでこれを使用してプログラムを作成する必要があります。

.back は何をしますか? 以下の実際の機能に何を送信していますか: 私が 6 歳のように説明してください...

ADT-Queue (ツールキット関数配列実装)

//Create a q.
void create_queue(Queue & q)
{
    q.back = -1;
}

//check if Queue is empty
int empty( const QUEUE & q)
{
    return (q.back == -1);
}

//Purge elements in the queue
void purge(Queue & q)
{
    q.back = -1;
}

//Add an element on the q.
void enq(Queue & q, CONST INFOREC & item)
{
    ++ q.back;
q.i[q.back] = item; // i is an array of ints previously declared
}

// delete an item from the q
void deq(Queue &q, INFOREC & item)
{
    int ct; 
    item =q.i[0]; front;
    // step forward loop, moving the entire array components 1 place forward and
    // shifting the pointers
    for (ct = 1; ct < q.back; ++ct);
    q.i[ct -1] = q.i [ct];  
    --q.back;
 }
4

3 に答える 3

1

質問で与えられた新しい情報を反映するように編集されました。

backキューの最後の要素、つまり最後に追加された要素へのポインタです。

とともにi、キューが内部データ構造を維持するために必要なのはこれだけです。iは静的に割り当てられ、要素は を使用してのみインデックス付けされるためback、キューから要素を明示的に削除する必要はありません。iこれが、 withinを変更する必要がない理由purge()です。1purge()つまたはdeq()複数の要素を追加してからさらに要素を追加すると、新しい要素がメモリ内の以前の要素を単純に上書きします。はこれらの各メソッド内で適切に調整されるためback、システム メモリにまだ存在していても、キューに論理的に存在しなくなったデータ メンバーにアクセスすることはできません。

"de" はdeq"delete" を表していないことに注意してください。deq「デキュー」の略で、キューから最も古い要素を取得するための標準用語です。キューの後ろに要素を追加するための対応する用語は「エンキュー」です。

于 2013-03-21T03:33:32.553 に答える
1

キューの前は 0、後ろは q.back にあるため、キューが空の場合、q.back は -1 に初期化されます。

back が -1 の場合はキューが空かどうかを確認し、それ以外の場合は false を返します。

bool empty(const Queue & q)
{
    return (q.back == -1);
}

purge はキューを再び空にするため、init と同じです。

于 2013-03-21T03:37:49.317 に答える
0

私の推測では、キューが常に追加された最初の要素を指し、キューにback要素がない場合は常に -1 になるように ADT が設計されていると思います。

を確認してください。create_queue新しいキューが作成され、要素がまだエンキューされていないためback、-1 に初期化されます。

同様emptyに、要素が存在しない場合backでも -1 になります

ではpurge、すべての要素が削除されているため、backを -1 に更新する必要があります

したがって、enqueue..という名前の関数があった場合 -1以外backの値に更新されます。

PS:- 完全なコードを見るまで予測できないため、これは大げさな推測です:)

*EDIT*** 更新されたコードによると、私が提案したものは正常に機能します。キューが空の場合、戻るは-1になります...そうでない場合、0からn-1(max_queue_size)を指す配列... 0 -->最初の要素

于 2013-03-21T03:45:36.180 に答える