C言語のスタックの使い方
C言語では、スタックの機能を配列で実現できます。スタックとは「後入れ先出し(Last-In-First-Out、LIFO)」データ構造であり、一端でのみ挿入と削除という操作が可能で、その端をスタックの先頭と呼びます。
スタックを配列で実装する際の基本手順は以下のとおりです。
- スタック用のストレージとして配列を宣言します。
- スタックの最上位要素の位置を示すスタックポインタという変数を定義します。最初はスタックが空である状態なので、スタックポインタは-1に設定します。
- スタックポインタを1増やし、挿入する要素をスタックポインタが指す配列位置に格納する
- スタックから要素を削除する時は、先頭ポインタが指す要素を削除してから、先頭ポインタを1減らします。
- スタックは、要素を挿入する前に空でないかどうかを確認し、要素を削除する前に空かどうかを確認する必要があります。
配列を利用したスタックの実装例を以下に示します。
#include <stdio.h>
#define MAX_SIZE 100
int stack[MAX_SIZE]; // 堆栈的存储空间
int top = -1; // 栈顶指针
void push(int data) {
if (top >= MAX_SIZE - 1) {
printf("Stack Overflow\n");
return;
}
stack[++top] = data;
}
int pop() {
if (top < 0) {
printf("Stack Underflow\n");
return -1;
}
return stack[top--];
}
int main() {
push(1);
push(2);
push(3);
printf("%d\n", pop()); // 输出3
printf("%d\n", pop()); // 输出2
printf("%d\n", pop()); // 输出1
printf("%d\n", pop()); // 输出Stack Underflow
return 0;
}
このサンプルコードでは、スタックの格納領域として100個の配列を確保し、スタックポインタのtopを定義しています。push関数は要素を挿入するのに使用され、pop関数は要素を削除するのに使用されます。main関数では、最初に3要素(1、2、3)を挿入し、次に要素を削除して結果を出力します。スタックがいっぱいになると要素の挿入時に「Stack Overflow」が出力され、スタックが空になると要素の削除時に「Stack Underflow」が出力されます。