-1

StackMin、Pop、Push のスタック内の最小値を取得しようとしていますΘ(1)。私のコードは機能しません...これが私の試みです:

typedef struct{
    int top;
    int entry[1000];
    int small;
} Stack;

void Pop(int *e,Stack *ps){
    *e=ps->entry[--ps->top];
}

void Push(int e,Stack *ps){
    ps->entry[ps->top++]=e;
}

int StackMin(Stack *ps){
    ps->small=ps->entry[ps->top];
    while(!StackEmpty(ps)){
        int *e;
        *e=ps->entry[--ps->top];
        if(ps->small >= *e){
            ps->small = *e;
        }
    }
    return ps->small;
}
4

3 に答える 3

2

これらの行にはポインターは必要ありません。

int *e; 
*e=ps->entry[--ps->top]; 
if(ps->small >= *e){ 
    ps->small = *e; 
} 

それらを次のように変更します。

int e = ps->entry[--ps->top]; 
if(ps->small >= e){ 
    ps->small = e; 
} 
于 2012-10-24T21:41:52.560 に答える
2

これを行うには、2 つのスタックが必要です。1 つのスタックは順序で最小値を持つことができ、最小値を呼び出すたびにこのスタックを更新します。自分でアルゴリズムを考えてみてください。

于 2012-10-24T21:39:39.133 に答える
1

「機能しない」という説明はあまり役に立ちません...しかし、いずれにせよ、これには問題があるように見えます:

int *e;
*e=ps->entry[--ps->top];
if(ps->small >= *e){
    ps->small = *e;
}

問題は、ポインターを宣言し (現在は何も指していない - 初期化されていない)、それが指す (無効な) 場所に値を書き込むことです。

たまたまコードがクラッシュせず、質問がアルゴリズムに関するものである場合、別のユーザーがそれに関する回答を投稿しています。

于 2012-10-24T21:42:46.730 に答える