[C言語]ものすごく原始的なスタック(pop&push)を自作してみた
#include <stdio.h>
#include <string.h>
/* ここから、K&Rに載っていたサンプルコード */
#define BUFFER_SIZE 10000
static char allocbuf[BUFFER_SIZE];
static char *curp = allocbuf;
char *alloc(int);
void afree(char *);
char *alloc(int n)
{
if (curp + n > allocbuf + BUFFER_SIZE) {
return NULL;
}
char *oldp = curp;
curp += n;
return oldp;
}
void afree(char *p)
{
if (allocbuf <= p && p < allocbuf + BUFFER_SIZE ) {
curp = p;
}
}
/* ここまでが、K&Rに載っていたサンプルコード */
/* ここから下が、それを利用するstackの実装 */
static char *plist[10];
static int cur_index = 0;
int push(char *p)
{
char *lp = alloc(strlen(p) + 1);
plist[cur_index++] = lp;
strcpy(lp, p);
printf("[push] %s\n", lp);
return 1;
}
char *pop()
{
afree(plist[--cur_index]);
printf("[pop ] %s\n", plist[cur_index]);
return plist[cur_index];
}
int main()
{
push("a");
push("bc");
push("def");
pop();
pop();
pop();
return 0;
}
実行結果
[push] a
[push] bc
[push] def
[pop ] def
[pop ] bc
[pop ] a
popを連続して呼び出すと、pushしたときと逆の順番でスタックからデータが取り除かれている様子がわかります。
カテゴリ:
C