栈(Stack)
-
操作原则:后进先出(LIFO,Last In First Out)。
- 元素从栈顶插入(push),也从栈顶移除(pop)。
-
基本操作:
- Push:将元素压入栈顶。
- Pop:将栈顶元素弹出。
- Top/Peek:获取栈顶元素但不弹出。
-
应用场景:
- 函数调用栈(用于保存函数调用状态)。
- 表达式求值(如中缀表达式转后缀表达式)。
- 撤销操作(如文本编辑器中的撤销功能)。
以下是使用C语言的简单实现:
#include <stdio.h>
#include <stdlib.h>
#define MAX 100 // 栈的最大容量
typedef struct Stack {
int data[MAX];
int top;
} Stack;
// 初始化栈
void initStack(Stack *stack) {
stack->top = -1;
}
// 检查栈是否为空
int isEmpty(Stack *stack) {
return stack->top == -1;
}
// 检查栈是否满
int isFull(Stack *stack) {
return stack->top == MAX - 1;
}
// 压入栈
void push(Stack *stack, int value) {
if (isFull(stack)) {
printf("Stack is full\n");
return;
}
stack->data[++(stack->top)] = value;
}
// 弹出栈
int pop(Stack *stack) {
if (isEmpty(stack)) {
printf("Stack is empty\n");
exit(1);
}
return stack->data[(stack->top)--];
}
// 查看栈顶元素
int peek(Stack *stack) {
if (isEmpty(stack)) {
printf("Stack is empty\n");
exit(1);
}
return stack->data[stack->top];
}
int main() {
Stack stack;
initStack(&stack);
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
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));
return 0;
}
运行如下: