#include <stdio.h>
// 構造体定義
typedef struct _Node {
// 前のノードへのポインタ
struct _Node *prev;
// 値
int value;
} Node;
// スタックポインタ(現在のノードを示すポインタ)
Node *sp;
// 空かどうかを返す
int empty() {
return sp == NULL;
}
// プッシュ
void push(int value) {
Node *newNode;
// 領域確保
newNode
= (Node
*)malloc(sizeof(Node
)); // 値を代入
newNode->value = value;
// 先頭以外ならば既に前にある要素と連結
if (sp != NULL)
newNode->prev = sp;
// スタックポインタを新しいノードに移動
sp = newNode;
}
// ポップ
int pop() {
// 空で取り出そうとしたならばエラー(アンダーフロー)
if (empty()) {
}
// 返り値をセット
int ret = sp->value;
// 後にメモリ解放するノードをセット
Node *fr = sp;
// スタックポインタを前に移動
sp = sp->prev;
// メモリ解放
// 値を返す
return ret;
}
// 表示
void show() {
// 空ならばすぐに結果表示
if (empty()){
return;
}
// この関数用のスタックポインタを用意
Node *tmp = sp;
// 表示
while (tmp != NULL) {
printf(" ┃ %04d ┃\n", tmp
->value
); tmp = tmp->prev;
}
}
// メイン
int main(void) {
// 動作テスト
push(1);
push(2);
push(pop());
push(3);
pop();
show();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyDmp4vpgKDkvZPlrprnvqkKdHlwZWRlZiBzdHJ1Y3QgX05vZGUgewogICAgCiAgICAvLyDliY3jga7jg47jg7zjg4njgbjjga7jg53jgqTjg7Pjgr8KICAgIHN0cnVjdCBfTm9kZSAqcHJldjsKICAgIC8vIOWApAogICAgaW50IHZhbHVlOwogICAgCn0gTm9kZTsKCi8vIOOCueOCv+ODg+OCr+ODneOCpOODs+OCvyjnj77lnKjjga7jg47jg7zjg4njgpLnpLrjgZnjg53jgqTjg7Pjgr8pCk5vZGUgKnNwOwoKLy8g56m644GL44Gp44GG44GL44KS6L+U44GZCmludCBlbXB0eSgpIHsKICAgIAogICAgcmV0dXJuIHNwID09IE5VTEw7CiAgICAKfQoKLy8g44OX44OD44K344OlCnZvaWQgcHVzaChpbnQgdmFsdWUpIHsKICAgIAogICAgTm9kZSAqbmV3Tm9kZTsKICAgIC8vIOmgmOWfn+eiuuS/nQogICAgbmV3Tm9kZSA9IChOb2RlICopbWFsbG9jKHNpemVvZihOb2RlKSk7CiAgICAvLyDlgKTjgpLku6PlhaUKICAgIG5ld05vZGUtPnZhbHVlID0gdmFsdWU7CiAgICAKICAgIC8vIOWFiOmgreS7peWkluOBquOCieOBsOaXouOBq+WJjeOBq+OBguOCi+imgee0oOOBqOmAo+e1kAogICAgaWYgKHNwICE9IE5VTEwpCiAgICAgICAgbmV3Tm9kZS0+cHJldiA9IHNwOwogICAgICAgIAogICAgLy8g44K544K/44OD44Kv44Od44Kk44Oz44K/44KS5paw44GX44GE44OO44O844OJ44Gr56e75YuVCiAgICBzcCA9IG5ld05vZGU7CiAgICAKfSAKCi8vIOODneODg+ODlwppbnQgcG9wKCkgewogICAgCiAgICAvLyDnqbrjgaflj5bjgorlh7rjgZ3jgYbjgajjgZfjgZ/jgarjgonjgbDjgqjjg6njg7wo44Ki44Oz44OA44O844OV44Ot44O8KQogICAgaWYgKGVtcHR5KCkpIHsKICAgICAgICBwcmludGYoIuOCqOODqeODvDog44K544K/44OD44Kv44Gv56m644Gn44GZXG4iKTsKICAgICAgICBleGl0KDEpOwogICAgfQogICAgCiAgICAvLyDov5TjgorlgKTjgpLjgrvjg4Pjg4gKICAgIGludCByZXQgPSBzcC0+dmFsdWU7CiAgICAvLyDlvozjgavjg6Hjg6Ljg6rop6PmlL7jgZnjgovjg47jg7zjg4njgpLjgrvjg4Pjg4gKICAgIE5vZGUgKmZyID0gc3A7CiAgICAvLyDjgrnjgr/jg4Pjgq/jg53jgqTjg7Pjgr/jgpLliY3jgavnp7vli5UKICAgIHNwID0gc3AtPnByZXY7CiAgICAvLyDjg6Hjg6Ljg6rop6PmlL4KICAgIGZyZWUoZnIpOwogICAgLy8g5YCk44KS6L+U44GZCiAgICByZXR1cm4gcmV0OwogICAgCn0KCi8vIOihqOekugp2b2lkIHNob3coKSB7CiAgICAKICAgIC8vIOepuuOBquOCieOBsOOBmeOBkOOBq+e1kOaenOihqOekugogICAgaWYgKGVtcHR5KCkpewogICAgICAgIHByaW50Zigi54++5Zyo44CB44K544K/44OD44Kv44Gv56m644Gn44GZ44CCXG4iKTsKICAgICAgICByZXR1cm47CiAgICB9CiAgICAgICAgCiAgICAvLyDjgZPjga7plqLmlbDnlKjjga7jgrnjgr/jg4Pjgq/jg53jgqTjg7Pjgr/jgpLnlKjmhI8KICAgIE5vZGUgKnRtcCA9IHNwOwogICAgCiAgICAvLyDooajnpLoKICAgIHByaW50ZigiXG4g44CQ54++5Zyo44Gu44K544K/44OD44Kv44CRIFxuXG4iKTsKICAgIHdoaWxlICh0bXAgIT0gTlVMTCkgewogICAgICAgIHByaW50ZigiICAgIOKUgyAgJTA0ZCAg4pSDXG4iLCB0bXAtPnZhbHVlKTsKICAgICAgICB0bXAgPSB0bXAtPnByZXY7CiAgICB9CiAgICBwcmludGYoIiAgICDilJfilIHilIHilIHilIHilJtcbiIpOwogICAgCn0KCi8vIOODoeOCpOODswppbnQgbWFpbih2b2lkKSB7CiAgICAKICAgIC8vIOWLleS9nOODhuOCueODiAogICAgcHVzaCgxKTsKICAgIHB1c2goMik7CiAgICBwdXNoKHBvcCgpKTsKICAgIHB1c2goMyk7CiAgICBwb3AoKTsKICAgIHNob3coKTsgCiAgICByZXR1cm4gMDsKICAgIAp9