C语言实现栈功能
#include <stdio.h>
#include <stdlib.h>
// 定义栈结构体,包含整型数组和栈顶元素下标
struct Stack {
int arr[10];
int top;
};
// 初始化栈
void initStack(struct Stack *stack) {
stack->top = -1; // 将栈顶元素下标设为-1,表示栈为空
}
// 判断栈是否已满
int isFull(struct Stack *stack) {
return stack->top == 9; // 当栈顶下标等于9时,栈已满
}
// 判断栈是否为空
int isEmpty(struct Stack *stack) {
return stack->top == -1; // 当栈顶下标等于-1时,栈为空
}
// 入栈操作
void push(struct Stack *stack, int data) {
if (isFull(stack)) {
printf("Stack Overflow.\n"); // 栈已满,无法入栈,输出错误信息
return;
}
stack->arr[++stack->top] = data; // 栈顶元素下标加1,将data添加到栈顶
}
// 出栈操作,返回弹出的元素
int pop(struct Stack *stack) {
if (isEmpty(stack)) {
printf("Stack Underflow.\n"); // 栈为空,无法出栈,输出错误信息
return -1;
}
return stack->arr[stack->top--]; // 返回栈顶元素,并将栈顶下标减1
}
// 测试栈操作
int main() {
struct Stack stack;
initStack(&stack); // 初始化栈
push(&stack, 1); // 入栈1
push(&stack, 2); // 入栈2
push(&stack, 3); // 入栈3
printf("Popped element: %d\n", pop(&stack)); // 弹出栈顶元素,输出2
printf("Popped element: %d\n", pop(&stack)); // 弹出栈顶元素,输出1
printf("Popped element: %d\n", pop(&stack)); // 弹出栈顶元素,输出3
printf("Popped element: %d\n", pop(&stack)); // 尝试弹出元素,但栈已空,输出错误信息
return 0;
}