スタック

http://www.geocities.jp/ky_webid/algorithm/008.html

データの扱い方の話ですかね。

簡単に言うと配列の後ろに追加、また後ろから削除、という感じでしょうか。

とりあえず適当に実装してみます。

#include <stdio.h>

typedef struct {
    int data[100];
    int index;
} stack;

int push (stack *s,int data) {
    if ( s->index >= 100 ) {
        return 0;
    }
    s->data[s->index++] = data;
    return 1;
}

int pop (stack *s) {
    if ( !s->index ) {
        // この場合どうしよう・・・
        return 0;
    }
    return s->data[--s->index];
}

int main (void) {
    stack s;
    s.index = 0;
    
    push(&s,100);
    push(&s,200);
    
    printf("%d\n", pop(&s) );
    
    push(&s,300);
    
    printf("%d\n", pop(&s) );
    printf("%d\n", pop(&s) );
    
    return 0;
}

こんな感じですかね。配列をそのまま使おうとしたのですが、どうやっても現在位置の添え字の引数が必要だったので一まとめにできないかと悩んでいたら構造体に行き着きました。

push時に配列の制限を超えていた場合と、popの場合に0より下になった場合の処理をどうすればいいのかわかりませんでした。

解答例との比較

まったく違う実装例でしたが、やりたい事は同じですね。僕が実装したs->indexはそのスタックの場所を示すことからスタックポインタと呼ばれるらしいです。