c语言栈的用法
在C语言中,栈(Stack)是一种数据结构,它遵循后进先出(Last In, First Out,LIFO)的原则。
在C中,可以使用数组或链表来实现栈。
下面是一个简单的用数组实现栈的例子:
```c
#include <stdio.h>
#define MAX_SIZE 100
// 定义栈结构
struct Stack {
int arr[MAX_SIZE];
int top;
};
// 初始化栈
void initialize(struct Stack *stack) {
stack->top = -1; // 栈顶初始化为-1,表示空栈
}
// 判断栈是否为空
int isEmpty(struct Stack *stack) {
return stack->top == -1;
}
// 判断栈是否已满
int isFull(struct Stack *stack) {
return stack->top == MAX_SIZE - 1;
}
// 入栈操作
void push(struct Stack *stack, int value) {
if (isFull(stack)) {
printf("栈已满,无法入栈\n");
} else {
stack->arr[++stack->top] = value;
printf("%d 入栈成功\n", value);
}
}
// 出栈操作
int pop(struct Stack *stack) {
if (isEmpty(stack)) {
printf("栈为空,无法出栈\n");
return -1; // 表示栈为空
} else {
return stack->arr[stack->top--];
}
}
// 获取栈顶元素但不出栈
int peek(struct Stack *stack) {
if (isEmpty(stack)) {
printf("栈为空\n");
return -1; // 表示栈为空
} else {
return stack->arr[stack->top];
}
}
int main() {
struct Stack myStack;
initialize(&myStack);
push(&myStack, 10);
push(&myStack, 20);
push(&myStack, 30);
printf("栈顶元素:%d\n", peek(&myStack));
printf("出栈元素:%d\n", pop(&myStack));
printf("出栈元素:%d\n", pop(&myStack));
printf("栈是否为空:%s\n", isEmpty(&myStack) ? "是" : "否");
return 0;
}
```
这个例子中,`struct Stack` 定义了一个栈的结构体,包含一个数组用于存储元素和一个表示栈顶位置的变量。
然后,使用`initialize` 函数初始化栈,`isEmpty` 和`isFull` 函数判断栈是否为空或已满,`push` 函数用于入栈,`pop` 函数用于出栈,`peek` 函数用于获取栈顶元素但不出栈。
在`main` 函数中演示了栈的基本操作。