スタックを実装してみる
=============================================================================
C++の標準ライブラリにはスタックとキューがありますが、Cにはないので自作して実装してみる。
=============================================================================
C++の標準ライブラリにはスタックとキューがありますが、Cにはないので自作して実装してみます。
C++の標準ライブラリを使ったスタックとキューについては、「スタックとキュー」をご参照下さい。
C++の標準ライブラリのスタックのメソッドにはスタックの途中の要素を取り出すというメソッド(関数)が
ないので、それも追加で実装してみます。
Cにはクラスというものがないので、全部関数として実装してみます。
関数は以下の通りです。
init → スタックを初期化。
isempty → 空かどうかチェック
pop → 要素を末尾から削除
push → 要素を末尾に追加
topstack → 末尾の要素(スタックトップ)を取得
mstack → 途中の要素を取得
issize → 要素数を取得
(mystack.c)
0〜4をスタックにつみ、スタックの要素数を表示し、関数mstackで要素を先頭から1つづつ取り出して表示、
最後に末尾(スタックトップ)から1個づつ取り出して表示する。
#include <stdio.h>
void init(void);
int isempty(void);
int issize(void);
void push(int);
void pop(void);
int topstack(void);
int mstack(int);
int stck[100];
int top=0;
void init() {
top=0; }
int isempty() {
if(top==0) {return 1;}
else{return 0;}
}
int issize() {
return top; }
void push(int v) {
if (top >=100) {
printf("Stack is full\n"); }
else{stck[top]=v; top++;}
}
void pop() {
if(top==0) {
printf("Stack is empty\n");}
else { top--;}
}
int topstack() {
return stck[top-1]; }
int mstack(int v) {
if (v <=top-1) {return stck[v];}
else{printf("No stack is assigned: ");return 0; }
}
int main(void) {
int i;
init();
for(i=0; i<5;++i) {
push(i); }
printf("size: %d\n",issize());
for (i=0; i<6; i++) {
printf("%d\n",mstack(i));
}
while(isempty() == 0) {
printf("%d\n",topstack());
pop(); }
return 0;
}
実行例
c:\bcc55\Bin>bcc32 mystack.c Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland mystack.c: Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland c:\bcc55\Bin>mystack size: 5 0 1 2 3 4 No stack is assigned: 0 4 3 2 1 0 c:\bcc55\Bin>