スタックのC言語による実装

サンプルプログラム

ここでは、実際にC言語によるスタックの実装を紹介します。まずは、以下のサンプルを実行してみてください。

stackc-1:main.c
#include <stdio.h>

//	配列の最大の大きさ
#define MAX_LENGTH	100

typedef struct{
	//	データを格納数る配列
	int array[MAX_LENGTH];
	//	現在の位置
	int current;
}STACK;

//	スタックの初期化
void init(STACK*);
//	値のプッシュ
int push(STACK*,int);
//	値のポップ
int pop(STACK*,int*);

void main(){
	STACK s;
	int value;
	init(&s);	//	スタックを初期化
	//	1,2,3の順で値をプッシュ
	push(&s,1);	
	push(&s,2);
	push(&s,3);
	//	値をポップ
	while(pop(&s,&value)){
		printf("%d ",value);
	}
	printf("¥n");
}

//	スタックの初期化
void init(STACK* pStack)
{
	int i;
	for(i = 0; i < MAX_LENGTH; i++){
		pStack->array[i] = 0;
	}
	//	カレントの値を0に。
	pStack->current = 0;
}
//	値のプッシュ
int push(STACK* pStack,int value)
{
	if(pStack->current < MAX_LENGTH){
		//	まだデータが格納できるのなら、データを格納し、一つずらす。
		pStack->array[pStack->current] = value;
		pStack->current++;
		return 1;
	}
	//	データを格納しきれなかった
	return 0;
}
//	値のポップ
int pop(STACK* pStack,int* pValue)
{
	if(pStack->current > 0){
		//	まだデータが格納できるのなら、データを格納し、一つずらす。
		pStack->current--;
		*pValue = pStack->array[pStack->current];
		return 1;
	}
	return 0;
}
実行結果
3 2 1

このプログラムでは、データを1,2,3の順でpushしています。それをpopすると、逆に3,2,1の順で出力されることがわかります。