基本的な順序スタックをC言語でどのように記述しますか?
以下は、基本的なスタックのC言語での実装例です。
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
void initStack(Stack *s) {
s->top = -1;
}
int isEmpty(Stack *s) {
return s->top == -1;
}
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
void push(Stack *s, int value) {
if (isFull(s)) {
printf("Stack is full\n");
return;
}
s->top++;
s->data[s->top] = value;
}
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
return -1;
}
int value = s->data[s->top];
s->top--;
return value;
}
int peek(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
return -1;
}
return s->data[s->top];
}
int main() {
Stack stack;
initStack(&stack);
push(&stack, 10);
push(&stack, 20);
push(&stack, 30);
printf("Top element: %d\n", peek(&stack));
printf("Popped element: %d\n", pop(&stack));
printf("Popped element: %d\n", pop(&stack));
printf("Popped element: %d\n", pop(&stack));
printf("Is stack empty: %s\n", isEmpty(&stack) ? "true" : "false");
return 0;
}
このコードは、基本的な順序スタックデータ構造を定義しており、スタックの初期化、スタックが空かどうかまたは満杯かどうかの判断、プッシュ、ポップ、スタックのトップ要素の取得などの操作が含まれています。main関数では、スタックの初期化、プッシュ、ポップなどの操作が行われ、いくつかの情報が出力されます。
自分のニーズに合わせてこのコードを変更や拡張することができます。