以下是一個簡單的 C 語言實現棧的代碼示例:
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
// 定義棧結構
typedef struct {
int data[MAX_SIZE];
int top; // 棧頂指針
} Stack;
// 初始化棧
void initStack(Stack *s) {
s->top = -1;
}
// 判斷棧是否為空
bool isEmpty(Stack *s) {
return s->top == -1;
}
// 判斷棧是否已滿
bool isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入棧
void push(Stack *s, int value) {
if (isFull(s)) {
printf("Stack overflow\n");
return;
}
s->top++;
s->data[s->top] = value;
}
// 出棧
int pop(Stack *s) {
if (isEmpty(s)) {
printf("Stack underflow\n");
return -1;
}
int value = s->data[s->top];
s->top--;
return value;
}
// 獲取棧頂元素
int peek(Stack *s) {
if (isEmpty(s)) {
printf("Stack underflow\n");
return -1;
}
return s->data[s->top];
}
// 打印棧中的元素
void printStack(Stack *s) {
if (isEmpty(s)) {
printf("Stack is empty\n");
return;
}
printf("Stack elements: ");
for (int i = 0; i <= s->top; i++) {
printf("%d ", s->data[i]);
}
printf("\n");
}
int main() {
Stack stack;
initStack(&stack);
push(&stack, 10);
push(&stack, 20);
push(&stack, 30);
printStack(&stack); // 輸出:Stack elements: 10 20 30
int poppedValue = pop(&stack);
printf("Popped value: %d\n", poppedValue); // 輸出:Popped value: 30
int topValue = peek(&stack);
printf("Top value: %d\n", topValue); // 輸出:Top value: 20
return 0;
}
上述代碼中,首先定義了一個結構體 Stack
,包含一個數組 data
作為棧的存儲空間,以及一個整型變量 top
作為棧頂指針。
然后,定義了一些棧的操作函數:initStack
用于初始化棧,isEmpty
和 isFull
用于判斷棧是否為空或已滿,push
用于入棧,pop
用于出棧,peek
用于獲取棧頂元素,以及 printStack
用于打印棧中的元素。
在 main
函數中,首先通過調用 initStack
初始化了一個棧 stack
,然后通過調用 push
將元素壓入棧中,再通過調用 printStack
打印棧中的元素。
接著,通過調用 pop
函數將棧頂元素出棧,并打印出棧的元素值。
最后,通過調用 peek
函數獲取棧頂元素值,并打印棧頂元素。