在C语言中,堆栈(Stack)是一种重要的数据结构,它遵循后进先出(LIFO, Last In First Out)的原则。下面我将为你提供一个C语言堆栈的入门指南,包括堆栈的基本概念和实现方式。
### 堆栈的基本概念
堆栈是一种只能在一端(称为栈顶)进行插入和删除操作的线性表。堆栈的主要操作有两种:
1. **压栈(Push)**:在栈顶添加一个元素。
2. **弹栈(Pop)**:移除栈顶的元素,并返回这个元素。
### 堆栈的实现方式
在C语言中,堆栈可以通过数组或链表来实现。这里我们使用数组来演示一个简单的堆栈实现。
#### 示例代码
以下是一个使用数组实现的堆栈的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define MAX_SIZE 100 // 定义堆栈的最大容量
typedef struct {
int items[MAX_SIZE]; // 存储堆栈元素的数组
int top; // 栈顶指针
} Stack;
// 初始化堆栈
void initStack(Stack *s) {
s->top = -1; // 初始时,栈为空,栈顶指针指向-1
}
// 检查堆栈是否为空
bool isEmpty(Stack *s) {
return s->top == -1;
}
// 检查堆栈是否已满
bool isFull(Stack *s) {
return s->top == MAX_SIZE - 1;
}
// 压栈操作
bool push(Stack *s, int item) {
if (isFull(s)) {
printf("Stack is full!\n");
return false;
}
s->items[++s->top] = item; // 先移动栈顶指针,再存储元素
return true;
}
// 弹栈操作
bool pop(Stack *s, int *item) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
return false;
}
*item = s->items[s->top--]; // 先存储栈顶元素,再移动栈顶指针
return true;
}
// 查看栈顶元素(不移除)
bool peek(Stack *s, int *item) {
if (isEmpty(s)) {
printf("Stack is empty!\n");
return false;
}
*item = s->items[s->top];
return true;
}
int main() {
Stack s;
initStack(&s);
push(&s, 10);
push(&s, 20);
int item;
if (peek(&s, &item)) {
printf("Top item: %d\n", item);
}
if (pop(&s, &item)) {
printf("Popped item: %d\n", item);
}
return 0;
}
这个代码段定义了一个堆栈结构体`Stack`,并提供了初始化、检查空满、压栈、弹栈和查看栈顶元素的功能。你可以根据这个示例进一步学习和扩展堆栈的其他操作。