見出し画像

スタックをC言語で書いてみた このプログラムの問題点を幾つあげられますか?

もう少し、スタックについて寄り道。

スタックについて書いたのが既に二週間前で、「スタックってなんだっけ?」という感じです。
そういうときはこちらへ

C言語でスタックを書いてみました。

#include <stdlib.h>
#include "stack.h"

int* s_addr = 0;
int* s_sp = 0;

/* create stack */
void create(int size)
{
        s_addr = malloc(size);
        s_sp = s_addr + (size / sizeof(int));
}

/* destroy stack */
void destroy()
{
        free(s_addr);
}

/* push to stack */
void push(int data)
{
        *s_sp = data;
        s_sp--;
}

/* pop from stack */
int pop()
{
        s_sp++;
        return *s_sp;
}

「push」はスタックに入れて
「pop」はスタックから取り出します。

「push/pop」はほとんどスタックにしか使われない表現です。
スタックというと「push/pop」で、
「push/pop」というとスタックです。
別のデータ構造に「push/pop」を使うと混乱するかもしれません。

また、スタックは下から、アドレスの大きい方から使っていくというのも慣習です。
アドレスの小さいほうから使っても同じことはできるのだけど、何故か下から使います。
時には「スタックに積む」と言ったりもしますが、この「積む」という表現に合った実装イメージだからからもしれません。

ところで、このプログラムですが、汎用的なライブラリとして提供する場合には決していいプログラムではありません。
私は問題点を10個あげました。
みなさんならどのような問題点を指摘されるでしょうか。

この記事が気に入ったらサポートをしてみませんか?