1

スタックが何をするのかを完全に理解しています(後入れ先出し)。それは私を混乱させるスタックのほんの一部です。

typedef struct dynArrStruct
{
    char *location; //element
    int length;  //max size
    int currSize; //top
}dynArr;


dynArr a; //declared in main
//sorry this is an assignment and I try to refrain from posting my full code
//on here b/c of potential cheaters

このコードをスタックとして使用します。

基本的に、私のプログラムはバランスの取れた文字を見つけることになっています:'{'、'('、'<'、'['とそれらの終了カウンター部分。

一言で言えば、オープニングブレースを見つけるたびに、それをスタックに押し込みます。閉じ中括弧が見つかるまでスタックに押し込み続け、閉じ中括弧が見つかったらすぐにスタックをポップする必要があります。

私が混乱しているのは、変数char*の場所です。

私の文字列が「()」だとしましょう

GDBの場合:

'('を読み込んだ場合は、スタックにプッシュします。')'を読み込んだ場合は、ポップします。

私がするとき:p a-> locationそれは「()」を出力します

スタックをポップするたびに、a-> locationの値から「()」を削除することになっているのでしょうか、それともa-> locationに関係のないスタックをポップするのでしょうか?

つまり、ポップされた後に「」を出力する必要がありますか?

この質問が意味をなさない場合は、事前にお詫び申し上げます

4

2 に答える 2

2

コードを投稿していないので、確信が持てませんが、ポインタ(char * locationなど)とそれが指しているコンテンツを混同しているのではないかと思います。現在文字列"()"を指しているポインタは、gdbでは()として出力されますが、(スタックの最上位)を指している文字は'('です。

コードの少なくとも一部を投稿すると、より具体的になりやすくなります。

于 2013-02-21T03:28:19.900 に答える
2

はい、スタックから要素をポップすると、スタックからアクセスできなくなります。アクセス可能な要素の数を表すスタックのサイズも1つ減らす必要があります。トップ値へのアクセスとトップ値のポップの違いは、C ++ STL(Cで作業していることは知っていますが、これは単なる例です)がトップ値のポップとアクセスのための2つの異なる機能を提供する理由の1つです。std::stackオブジェクトの値。このstd::stack::topメソッドを使用すると、スタックの一番上にある要素に実際にアクセスできますが、このstd::stack::popメソッドでは、要素を一番上から「ポップ」して削除します。あなたがシングルで行くつもりならpopただし、このメソッドは、スタックの最上位にあった値のコピーを返すと同時に、スタックのデータ構造からその値の内部表現を削除する必要があります。

于 2013-02-21T03:26:10.117 に答える