以下に、C言語でスタックを実装するためのいくつかの方法とコード例を示します。
- 配列を使用したスタックの実装:
#define MAX_SIZE 100
int stack[MAX_SIZE];
int top = -1;
void push(int item) {
if (top == MAX_SIZE - 1) {
printf("スタックが満杯です。\n");
return;
}
stack[++top] = item;
}
int pop() {
if (top == -1) {
printf("スタックが空です。\n");
return -1;
}
return stack[top--];
}
上記のコードでは、配列を使用してスタックを実装しています。push
関数は要素をスタックに追加し、pop
関数はスタックから要素を取り出します。
- リンクリストを使用したスタックの実装:
typedef struct Node {
int data;
struct Node* next;
} Node;
Node* top = NULL;
void push(int item) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = item;
newNode->next = top;
top = newNode;
}
int pop() {
if (top == NULL) {
printf("スタックが空です。\n");
return -1;
}
int data = top->data;
Node* temp = top;
top = top->next;
free(temp);
return data;
}
上記のコードでは、リンクリストを使用してスタックを実装しています。push
関数は新しいノードを作成し、リンクリストの先頭に追加します。pop
関数は先頭のノードを削除し、そのデータを返します。
これらの例では、スタックの要素の追加や削除時にスタックが満杯または空の場合にエラーメッセージを表示しています。エラーハンドリングはスタックの正常な動作を確保するために重要です。
スタックは、再帰関数の呼び出しの追跡、式の評価、バックトラッキングなど、さまざまなアルゴリズムや問題で使用されます。この記事では、スタックの基本的な構文と使用方法を紹介しました。