C语言实现的顺序栈基本操作
在C语言中,顺序栈(或称为数组栈)是通过数组实现的栈结构。栈是一种后进先出(LIFO, Last In First Out)的数据结构,基本操作包括:
- 初始化栈
- 判断栈是否为空
- 判断栈是否为满
- 入栈(Push)
- 出栈(Pop)
- 取栈顶元素
下面是一个基本的C语言实现示例:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 定义栈的最大容量
typedef struct {
int data[MAX_SIZE]; // 用数组存储栈元素
int top; // 栈顶指针
} Stack;
// 初始化栈
void initStack(Stack *s) {
s->top = -1; // 栈顶指针初始为-1,表示栈为空
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return s->top == -1;
}
// 判断栈是否为满
int isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 入栈操作
int push(Stack *s, int value) {
if (isFull(s)) {
printf("栈已满,无法入栈。\n");
return 0;
}
s->data[++(s->top)] = value; // 将元素压入栈顶
return 1;
}
// 出栈操作
int pop(Stack *s, int *value) {
if (isEmpty(s)) {
printf("栈为空,无法出栈。\n");
return 0;
}
*value = s->data[(s->top)--]; // 弹出栈顶元素
return 1;
}
// 取栈顶元素
int peek(Stack *s, int *value) {
if (isEmpty(s)) {
printf("栈为空,没有栈顶元素。\n");
return 0;
}
*value = s->data[s->top];
return 1;
}
// 示例使用
int main() {
Stack s;
initStack(&s);
push(&s, 10);
push(&s, 20);
push(&s, 30);
int value;
if (pop(&s, &value)) {
printf("出栈元素: %d\n", value);
}
if (peek(&s, &value)) {
printf("当前栈顶元素: %d\n", value);
}
return 0;
}
说明:
initStack
:初始化栈,将栈顶指针设为-1,表示栈为空。isEmpty
:检查栈是否为空,通过判断top
是否为-1。isFull
:检查栈是否为满,通过判断top
是否等于MAX_SIZE-1
。push
:将元素压入栈顶。若栈满则无法入栈。pop
:弹出栈顶元素,若栈空则无法出栈。peek
:获取栈顶元素而不弹出(栈状态不变),若栈空则无法获取。
注意要根据实际应用选择合适的栈容量MAX_SIZE
。