c言語でデータ構造 ~stack~
概要
基本的なデータ構造の一つ。LIFO(LastIn,FirstOut)後に格納されたデータから先に取り出される。
スタックポインタ(次に格納するデータ位置を保持している指標)と呼ばれる指標で操作する。
操作
・push
スタックポインタが指す位置にデータを格納する。
・pop
スタックポインタが指す位置のデータを取り出す。
実装
スタックのサイズ、スタックポインタを予めわかりやすいように定義しておく
#define STACK_SIZE 100 //スタック大きさを設定 #define SP (s->sp) //スタックポインタの参照をSPとする
スタックの構造を定義
typedef struct{ int strage[STACK_SIZE]; //stackのデータ格納領域 int sp; //次に格納するデータ位置(初期値は0) }STACK;
初期化用操作関数
//[機能]指定されたスタックを初期化する //[引数]*s:初期化するスタック(ポインタ) void initStack(STACK *s) { SP = 0; return; }
データ格納用操作関数
//[機能]指定されたスタックにデータを格納する //[引数]*s:格納対象となるスタック(ポインタ) // data:格納するデータ //[返り値]正常終了:1 ,スタックオーバーフロー:0 int push(STACK *s,int data) { if(SP < STACK_SIZE){ s -> strage[SP] = data; SP++; return(1); }else{ return(0); } }
データ取り出し用操作関数
//[機能]指定されたスタックからデータを取り出す //[引数]*s:取り出し対象となるスタック(ポインタ) // data:取り出したデータの格納先(ポインタ) //[戻り値]正常終了:1 ,スタックアンダーフロー:0 int pop(STACK*s,int *data) { if(SP>0){ SP--; *data = s->strage[SP]; s -> strage[SP] = NULL; return(1); }else{ return(0); } }