C語言中的棧是一種后進先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),通常用于存儲臨時變量、函數(shù)調(diào)用等。在C語言中,棧通常是通過數(shù)組或鏈表來實現(xiàn)的。
操作棧的基本操作包括:
以下是一個使用數(shù)組實現(xiàn)棧的示例代碼:
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int top;
} Stack;
void init(Stack *s) {
s->top = -1;
}
void push(Stack *s, int value) {
if (s->top < MAX_SIZE - 1) {
s->data[++s->top] = value;
} else {
printf("Stack overflow!\n");
}
}
int pop(Stack *s) {
if (s->top >= 0) {
return s->data[s->top--];
} else {
printf("Stack is empty!\n");
return -1;
}
}
int top(Stack *s) {
if (s->top >= 0) {
return s->data[s->top];
} else {
printf("Stack is empty!\n");
return -1;
}
}
bool isEmpty(Stack *s) {
return s->top == -1;
}
int size(Stack *s) {
return s->top + 1;
}
int main() {
Stack stack;
init(&stack);
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
printf("Top element: %d\n", top(&stack));
while (!isEmpty(&stack)) {
printf("%d ", pop(&stack));
}
printf("\n");
return 0;
}
在這個示例代碼中,我們定義了一個棧結(jié)構(gòu)體Stack
,并實現(xiàn)了基本的壓棧、彈棧、獲取棧頂元素、判斷棧是否為空和獲取棧的大小等操作。我們可以通過調(diào)用這些函數(shù)來操作這個棧。