2011-12-20 5 views
1

私は書籍「Practical C++ Programming」を使ってC++をレビューしており、Stacksというものを見つけました。本で定義されている、それはデータを格納するためのアルゴリズムとして定義されています。スタックは何に使用されていますか?なぜ彼らはC++であるのですか?

私はこの本で見たことから、アセンブリのように見えます...私は16ビットのものについて何かを読んでいます。

私の質問:スタックは何のために使われているのですか?それらはまだ有用なのですか、それとも32/64ビットコンピュータでより簡単かつ効率的に行うことができる古い方法ですか?私はスタックの目的が何であるか本当に混乱しています。


編集:私の質問は非常に曖昧であるので、私はそれを修正してくださいよ...何スタックであり、それを使用すべきとき。

+3

これはデータ構造であり、アルゴリズムではありません。 –

+3

これは16/32/64ビットとは関係がありません。特定のデータ構造が必要な場合は、ビット数にかかわらず必要です。 – PlasmaHH

+1

なぜこれがダウンボトムで攻撃されているのですか? – Gabe

答えて

6

あなたが話しているスタックによって異なります。

最初はメモリ内の格納場所です。

スタックは、16/32/64ビットコンピュータに関係なく、依然として非常に有用なラストインファーストアウトのデータ構造です。

コールスタック(または「スタック」)は、動作しているスタックの例です。

+6

コールスタックはファーストイン、ラストアウトです。だから、それはスタックの種類とは異なります。スタックの単なる一例です。 – sepp2k

+0

@ sepp2k - 修正されました。 –

+1

私はお尻になっていますが、Cの経験を宣言した100万人近くの寄稿者は、「メモリスタック」はスタックのアプリケーションであることを知っていなければなりません。 –

2

標準LIFOロジックの場合は、スタックを使用できます。 LIFOロジックを必要とする多くの問題があります。

4

LIFO(ラスト・イン・ファースト・アウト)方式でデータを保存する必要がある場合に使用します。情報はhereです。 16/32/64 /どんなビットアーキテクチャでも、スタックの原則とは何の関係もありません。

6

スタックはメソッドではなく、むしろデータ構造であり、LIFO(Last In First Out)です。

C++では、std::stack<>はどのような種類のデータでもよいクラステンプレートです。あなたが必要とするものが、最後に、最初に出てくるものがまさにその場です。

例は、ファンクション/プロシージャの実行中に実行状態を保存するためにスタックアーキテクチャを利用する仮想マシンまたはインタプリタです。サブ手順は、発信者の状態を変更することはできません言語の通訳次の点を考慮してください

std::stack<RunState> state; 
Instruction i = fetch(); 

switch (i.type()) { 
case Instruction.Call: 
    state.push (state.top()); 
    break; 
case Instruction.Return: 
    state.pop(); 
    break; 
... 
} 

ウィキペディアは、スタックデータ構造を使用するためのmore examplesを持っています。いくつかのソートの問題は、スタックで比較的簡単に解決されます。すべてのデータ構造と同様に

、およびC++は非常にそれらのいくつか(listsqueuessetsmaps (a.k.a. associative arrays, a.k.a. dictionaries)arrays/vectors、および多くを)持っている、あなたも2年後には今、多分それをする必要はないではないかもしれないが、あなたが知っておくべきそれらの特性、利点、欠点、およびそれらを使用するのが適切な瞬間であるかどうかを判断する。

関連する問題