スタック
//一番最後に格納したデータが取り出される.
//後入れ先出し(Last In First Out)という LIFO
//例 机に積み重ねられた本 積む:push 降ろす:pop
//スタックを実現するには、配列中のどの位置までは使われているのかを管理する必要があります。
//この位置を管理する変数をスタックポインタと呼びます。
//初期状態でスタックポインタは0番目の要素を指しています。
//スタックポインタを使えば、スタックからデータを降ろしたときに、実際に配列からデータを消さなくて済む。
#include <stdio.h>
#include <iostream>
#pragma warning (disable : 4996)
#define STACK_SIZE (100)
#define msg(a)std::cout<<a<<std::endl;
int main(void)
{
int stack[STACK_SIZE];
int sp = 0;
char command;
int i;
do
{
msg("コマンドを入力してください");
msg("スタックに積む : a");
msg("スタックから降ろす : b");
msg("スタックデータを表示 : c");
msg("終了 : q");
scanf( "%c", &command);
switch(command)
{
case 'a':
if( sp >= STACK_SIZE)
{
msg("スタックが満杯です");
}
else
{
msg("データを入力");
scanf("%d",&stack[sp]);
++sp;
}
break;
case 'b':
if( sp == 0){
msg("スタックが空です");
}
else
{
--sp;
msg(stack[sp]<<"が取り出されました");
}
break;
case 'c':
if( sp == 0){
msg("スタックが空です");
}
else
{
for(i=sp-1;i>=0;--i)
{
msg(stack[i]);
}
}
break;
case 'q':
break;
default:
msg("コマンドが不正です");
break;
}
msg("");
msg("");
fflush(stdin);
}while( command != 'q');
return 0;
}