52

誰かが主な違いを説明してもらえますか? どの言語のプログラミングでも、これらの関数について明確な知識はありません。

4

6 に答える 6

58

C や C++ などのプログラミング言語の基本的なデータ構造には、スタックとキューがあります。

スタック データ構造は、スタックに挿入または「プッシュ」された最初の要素が、スタックから削除または「ポップ」される最後の要素である「先入れ後出し」ポリシー (FILO) に従います。

同様に、キューのデータ構造は「先入れ先出し」ポリシーに従います (カウンターの列に並ぶときの通常のキューの場合と同様)。最初の要素がキューにプッシュされるか、「エンキュー」され、同じキューから削除する必要がある場合の要素は「Dequeued」です。

これは、スタックのプッシュとポップに非常に似ていますが、エンキューとデキューという用語は、使用中のデータ構造がスタックかキューかに関する混乱を避けるためのものです。

クラス コーダーには、エンキューとデキューのプロセスを示す簡単なプログラムがあります。参考までに調べてみてはいかがでしょう。

http://classcoders.blogspot.in/2012/01/enque-and-deque-in-c.html

于 2013-05-08T05:53:21.577 に答える
44

Enqueueキューに対する操作でDequeueある傾向があり、まさにそのように聞こえるデータ構造です。

ちょうど最新のテイラー・スウィフトのコンサートのチケットを求めて列に並ぶ人々のように、一方の端でアイテムをエンキューし、もう一方の端でデキューします (最初はビリー・ジョエルと言うつもりでしたが、それは私をひどくデートさせます)。

どちらかの側でエンキューおよびデキューできる両端キューなどのキューのバリエーションがありますが、大多数はより単純な形式になります。

           +---+---+---+
enqueue -> | 3 | 2 | 1 | -> dequeue
           +---+---+---+

この図は、番号 1、2、3 をこの順序でキューに入れ、まだデキューしていないキューを示しています。


enqueue例として、とdequeue関数を使用して動作中の単純なキューを示す Python コードを次に示します。より深刻なコードであれば、クラスとして実装されますが、動作を説明するには十分なはずです。

import random

def enqueue(lst, itm):
    lst.append(itm)        # Just add item to end of list.
    return lst             # And return list (for consistency with dequeue).

def dequeue(lst):
    itm = lst[0]           # Grab the first item in list.
    lst = lst[1:]          # Change list to remove first item.
    return (itm, lst)      # Then return item and new list.

# Test harness. Start with empty queue.

myList = []

# Enqueue or dequeue a bit, with latter having probability of 10%.

for _ in range(15):
    if random.randint(0, 9) == 0 and len(myList) > 0:
        (itm, myList) = dequeue(myList)
        print(f"Dequeued {itm} to give {myList}")
    else:
        itm = 10 * random.randint(1, 9)
        myList = enqueue(myList, itm)
        print(f"Enqueued {itm} to give {myList}")

# Now dequeue remainder of list.

print("========")
while len(myList) > 0:
    (itm, myList) = dequeue(myList)
    print(f"Dequeued {itm} to give {myList}")

実行中のサンプルを示します。

Enqueued 70 to give [70]
Enqueued 20 to give [70, 20]
Enqueued 40 to give [70, 20, 40]
Enqueued 50 to give [70, 20, 40, 50]
Dequeued 70 to give [20, 40, 50]
Enqueued 20 to give [20, 40, 50, 20]
Enqueued 30 to give [20, 40, 50, 20, 30]
Enqueued 20 to give [20, 40, 50, 20, 30, 20]
Enqueued 70 to give [20, 40, 50, 20, 30, 20, 70]
Enqueued 20 to give [20, 40, 50, 20, 30, 20, 70, 20]
Enqueued 20 to give [20, 40, 50, 20, 30, 20, 70, 20, 20]
Dequeued 20 to give [40, 50, 20, 30, 20, 70, 20, 20]
Enqueued 80 to give [40, 50, 20, 30, 20, 70, 20, 20, 80]
Dequeued 40 to give [50, 20, 30, 20, 70, 20, 20, 80]
Enqueued 90 to give [50, 20, 30, 20, 70, 20, 20, 80, 90]
========
Dequeued 50 to give [20, 30, 20, 70, 20, 20, 80, 90]
Dequeued 20 to give [30, 20, 70, 20, 20, 80, 90]
Dequeued 30 to give [20, 70, 20, 20, 80, 90]
Dequeued 20 to give [70, 20, 20, 80, 90]
Dequeued 70 to give [20, 20, 80, 90]
Dequeued 20 to give [20, 80, 90]
Dequeued 20 to give [80, 90]
Dequeued 80 to give [90]
Dequeued 90 to give []
于 2013-05-08T05:41:51.573 に答える
13

これらは、「先入れ先出し」である「FIFO」キューを説明するときに通常使用される用語です。これは線のように機能します。あなたは映画に行くことにしました。チケットを購入するための長い列があり、チケットを購入するためにキューに入ることにしました。これが「エンキュー」です。ある時点で列の先頭にいて、チケットを購入し、その時点で列を離れます。これが「Dequeue」です。

于 2013-05-08T05:41:41.217 に答える
4

キューは特定の両面データ構造です。一方の側に新しい要素を追加し、もう一方の側から要素を削除できます (一方の側しかないスタックとは対照的に)。エンキューとは要素を追加すること、デキューとは要素を削除することを意味します。こちらをご覧ください。

于 2013-05-08T05:41:18.787 に答える
2

エンキューとは要素を追加すること、デキューとは要素を削除することを意味します。

var stackInput= []; // First stack
var stackOutput= []; // Second stack

// For enqueue, just push the item into the first stack
function enqueue(stackInput, item) {
  return stackInput.push(item);
}

function dequeue(stackInput, stackOutput) {
  // Reverse the stack such that the first element of the output stack is the
  // last element of the input stack. After that, pop the top of the output to
  // get the first element that was ever pushed into the input stack
  if (stackOutput.length <= 0) {
    while(stackInput.length > 0) {
      var elementToOutput = stackInput.pop();
      stackOutput.push(elementToOutput);
    }
  }

  return stackOutput.pop();
}
于 2020-02-18T22:32:12.677 に答える