栈的常用操作主要有:push(增加一个元素),pop(删除栈顶元素),peek(返回栈顶元素但不删除),empty(判断栈是否为空);栈其实是受限的线性表,限制体现为插入和删除时只能在尾部进行,所以通常我们可以用数组或者链表模拟栈,这篇博客用c语言模拟了栈的各种基本操作,并且提供测试案例供大家使用。(注意,这里使用的是静态数组,动态数组大致思路不变)。
代码如下:
#include <stdio.h>
#define MAX_SIZE 10
// 定义一个全局变量作为栈顶指针
int top = -1;
int stack[MAX_SIZE];
// 入栈操作
void push(int value) {
if (top == MAX_SIZE - 1) {
printf("栈已满,无法入栈!\n");
return;
}
stack[++top] = value;
printf("%d 入栈成功!\n", value);
}
// 出栈操作
int pop() {
if (top == -1) {
printf("栈为空,无法出栈!\n");
return -1;
}
int value = stack[top--];
printf("%d 出栈成功!\n", value);
return value;
}
// 获取栈顶元素
int peek() {
if (top == -1) {
printf("栈为空!\n");
return -1;
}
return stack[top];
}
// 判断栈是否为空
int isEmpty() {
return top == -1;
}
// 打印栈中的元素
void printStack() {
if (isEmpty()) {
printf("栈为空!\n");
return;
}
printf("栈中元素:");
for (int i = 0; i <= top; i++) {
printf("%d ", stack[i]);
}
printf("\n");
}
int main() {
push(5);
push(10);
push(15);
push(20);
printStack();
pop();
pop();
printStack();
printf("栈顶元素:%d\n", peek());
system("pause");
return 0;
}